diff options
1327 files changed, 40746 insertions, 28093 deletions
diff --git a/.gitignore b/.gitignore index 80c42f83d31..e96d93837e1 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,12 @@ servo-test Servo.app .config.mk.last /glfw + +# Editors + +# IntelliJ +.idea +*.iws + +# VSCode +.vscode diff --git a/components/canvas/Cargo.toml b/components/canvas/Cargo.toml index ff31840b39d..64f258e5bbe 100644 --- a/components/canvas/Cargo.toml +++ b/components/canvas/Cargo.toml @@ -12,10 +12,6 @@ path = "lib.rs" git = "https://github.com/servo/rust-azure" features = ["plugins"] -[dependencies.layers] -git = "https://github.com/servo/rust-layers" -features = ["plugins"] - [dependencies.canvas_traits] path = "../canvas_traits" @@ -38,5 +34,5 @@ git = "https://github.com/servo/webrender_traits" euclid = {version = "0.6.4", features = ["plugins"]} gleam = "0.2.8" log = "0.3.5" -num = "0.1.24" +num-traits = "0.1.32" offscreen_gl_context = "0.1.2" diff --git a/components/canvas/canvas_paint_thread.rs b/components/canvas/canvas_paint_thread.rs index 91630915cdc..36fbbe94570 100644 --- a/components/canvas/canvas_paint_thread.rs +++ b/components/canvas/canvas_paint_thread.rs @@ -14,7 +14,7 @@ use euclid::size::Size2D; use gfx_traits::color; use ipc_channel::ipc::IpcSharedMemory; use ipc_channel::ipc::{self, IpcSender}; -use num::ToPrimitive; +use num_traits::ToPrimitive; use std::borrow::ToOwned; use std::mem; use util::opts; diff --git a/components/canvas/lib.rs b/components/canvas/lib.rs index 8a5ecce9217..027036db74c 100644 --- a/components/canvas/lib.rs +++ b/components/canvas/lib.rs @@ -14,10 +14,9 @@ extern crate euclid; extern crate gfx_traits; extern crate gleam; extern crate ipc_channel; -extern crate layers; #[macro_use] extern crate log; -extern crate num; +extern crate num_traits; extern crate offscreen_gl_context; extern crate util; extern crate webrender_traits; diff --git a/components/canvas_traits/Cargo.toml b/components/canvas_traits/Cargo.toml index 04a651ea43b..7586b2d29f4 100644 --- a/components/canvas_traits/Cargo.toml +++ b/components/canvas_traits/Cargo.toml @@ -25,9 +25,6 @@ features = [ "nightly" ] [dependencies.plugins] path = "../plugins" -[dependencies.util] -path = "../util" - [dependencies.webrender_traits] git = "https://github.com/servo/webrender_traits" @@ -36,6 +33,5 @@ cssparser = {version = "0.5.4", features = ["heap_size", "serde-serialization"]} euclid = {version = "0.6.4", features = ["plugins"]} heapsize = "0.3.0" heapsize_plugin = "0.1.2" -offscreen_gl_context = "0.1.2" serde_macros = "0.7" diff --git a/components/canvas_traits/lib.rs b/components/canvas_traits/lib.rs index fe1dbf24e17..8bf7fa0fba9 100644 --- a/components/canvas_traits/lib.rs +++ b/components/canvas_traits/lib.rs @@ -17,9 +17,7 @@ extern crate euclid; extern crate gfx_traits; extern crate heapsize; extern crate ipc_channel; -extern crate offscreen_gl_context; extern crate serde; -extern crate util; extern crate webrender_traits; use azure::azure::{AzColor, AzFloat}; diff --git a/components/compositing/Cargo.toml b/components/compositing/Cargo.toml index cec58afb9dd..536ede3f51e 100644 --- a/components/compositing/Cargo.toml +++ b/components/compositing/Cargo.toml @@ -91,14 +91,10 @@ euclid = {version = "0.6.4", features = ["plugins"]} gleam = "0.2.8" image = "0.9" log = "0.3.5" -num = "0.1.24" +num-traits = "0.1.32" offscreen_gl_context = "0.1.2" rand = "0.3" serde = "0.7" serde_macros = "0.7" time = "0.1.17" -url = {version = "0.5.7", features = ["heap_size"]} - -[target.x86_64-apple-darwin.dependencies] -core-graphics = "0.3" -core-text = "1.1" +url = {version = "1.0.0", features = ["heap_size"]} diff --git a/components/compositing/compositor.rs b/components/compositing/compositor.rs index 71528e8b88a..36688456333 100644 --- a/components/compositing/compositor.rs +++ b/components/compositing/compositor.rs @@ -31,7 +31,7 @@ use layers::scene::Scene; use layout_traits::LayoutControlChan; use msg::constellation_msg::{ConvertPipelineIdFromWebRender, ConvertPipelineIdToWebRender, Image, PixelFormat}; use msg::constellation_msg::{Key, KeyModifiers, KeyState, LoadData}; -use msg::constellation_msg::{NavigationDirection, PipelineId, WindowSizeData}; +use msg::constellation_msg::{NavigationDirection, PipelineId, WindowSizeData, WindowSizeType}; use pipeline::CompositionPipeline; use profile_traits::mem::{self, ReportKind, Reporter, ReporterRequest}; use profile_traits::time::{self, ProfilerCategory, profile}; @@ -93,8 +93,8 @@ pub struct IOCompositor<Window: WindowMethods> { /// The application window. window: Rc<Window>, - /// The display this compositor targets. - native_display: NativeDisplay, + /// The display this compositor targets. Will be None when using webrender. + native_display: Option<NativeDisplay>, /// The port on which we receive messages. port: Box<CompositorReceiver>, @@ -401,7 +401,12 @@ impl<Window: WindowMethods> IOCompositor<Window> { sender.create_api() }); - let native_display = window.native_display(); + let native_display = if state.webrender.is_some() { + None + } else { + Some(window.native_display()) + }; + IOCompositor { window: window, native_display: native_display, @@ -461,7 +466,7 @@ impl<Window: WindowMethods> IOCompositor<Window> { compositor.update_zoom_transform(); // Tell the constellation about the initial window size. - compositor.send_window_size(); + compositor.send_window_size(WindowSizeType::Initial); compositor } @@ -572,7 +577,9 @@ impl<Window: WindowMethods> IOCompositor<Window> { (Msg::ReturnUnusedNativeSurfaces(native_surfaces), ShutdownState::NotShuttingDown) => { - self.surface_map.insert_surfaces(&self.native_display, native_surfaces); + if let Some(ref native_display) = self.native_display { + self.surface_map.insert_surfaces(native_display, native_surfaces); + } } (Msg::ScrollFragmentPoint(pipeline_id, layer_id, point, _), @@ -714,6 +721,18 @@ impl<Window: WindowMethods> IOCompositor<Window> { let _ = sender.send(()); } + (Msg::GetScrollOffset(pipeline_id, layer_id, sender), ShutdownState::NotShuttingDown) => { + match self.find_layer_with_pipeline_and_layer_id(pipeline_id, layer_id) { + Some(ref layer) => { + let typed = layer.extra_data.borrow().scroll_offset; + let _ = sender.send(Point2D::new(typed.x.get(), typed.y.get())); + }, + None => { + warn!("Can't find requested layer in handling Msg::GetScrollOffset"); + }, + } + } + // When we are shutting_down, we need to avoid performing operations // such as Paint that may crash because we have begun tearing down // the rest of our resources. @@ -810,7 +829,7 @@ impl<Window: WindowMethods> IOCompositor<Window> { // Initialize the new constellation channel by sending it the root window size. self.constellation_chan = new_constellation_chan; - self.send_window_size(); + self.send_window_size(WindowSizeType::Initial); self.frame_tree_id.next(); self.composite_if_necessary(CompositingReason::NewFrameTree); @@ -1050,15 +1069,15 @@ impl<Window: WindowMethods> IOCompositor<Window> { self.pending_subpages.insert(subpage_pipeline_id); } - fn send_window_size(&self) { + fn send_window_size(&self, size_type: WindowSizeType) { let dppx = self.page_zoom * self.device_pixels_per_screen_px(); let initial_viewport = self.window_size.as_f32() / dppx; let visible_viewport = initial_viewport / self.viewport_zoom; - let msg = ConstellationMsg::ResizedWindow(WindowSizeData { + let msg = ConstellationMsg::WindowSize(WindowSizeData { device_pixel_ratio: dppx, initial_viewport: initial_viewport, visible_viewport: visible_viewport, - }); + }, size_type); if let Err(e) = self.constellation_chan.send(msg) { warn!("Sending window resize to constellation failed ({}).", e); @@ -1283,7 +1302,7 @@ impl<Window: WindowMethods> IOCompositor<Window> { self.window_size = new_size; self.scene.set_root_layer_size(new_size.as_f32()); - self.send_window_size(); + self.send_window_size(WindowSizeType::Resize); } fn on_load_url_window_event(&mut self, url_string: String) { @@ -1293,7 +1312,7 @@ impl<Window: WindowMethods> IOCompositor<Window> { Ok(url) => { self.window.set_page_url(url.clone()); let msg = match self.scene.root { - Some(ref layer) => ConstellationMsg::LoadUrl(layer.pipeline_id(), LoadData::new(url)), + Some(ref layer) => ConstellationMsg::LoadUrl(layer.pipeline_id(), LoadData::new(url, None, None)), None => ConstellationMsg::InitLoadUrl(url) }; if let Err(e) = self.constellation_chan.send(msg) { @@ -1713,14 +1732,14 @@ impl<Window: WindowMethods> IOCompositor<Window> { fn on_zoom_reset_window_event(&mut self) { self.page_zoom = ScaleFactor::new(1.0); self.update_zoom_transform(); - self.send_window_size(); + self.send_window_size(WindowSizeType::Resize); } fn on_zoom_window_event(&mut self, magnification: f32) { self.page_zoom = ScaleFactor::new((self.page_zoom.get() * magnification) .max(MIN_ZOOM).min(MAX_ZOOM)); self.update_zoom_transform(); - self.send_window_size(); + self.send_window_size(WindowSizeType::Resize); } /// Simulate a pinch zoom @@ -2208,7 +2227,9 @@ impl<Window: WindowMethods> IOCompositor<Window> { fn initialize_compositing(&mut self) { if self.webrender.is_none() { let show_debug_borders = opts::get().show_debug_borders; - self.context = Some(rendergl::RenderContext::new(self.native_display.clone(), + // We can unwrap native_display because it's only None when using webrender. + self.context = Some(rendergl::RenderContext::new(self.native_display + .expect("n_d should be Some when not using wr").clone(), show_debug_borders, opts::get().output_file.is_some())) } @@ -2297,7 +2318,9 @@ impl<Window: WindowMethods> IOCompositor<Window> { where B: IntoIterator<Item=Box<LayerBuffer>> { let surfaces = buffers.into_iter().map(|buffer| buffer.native_surface); - self.surface_map.insert_surfaces(&self.native_display, surfaces); + if let Some(ref native_display) = self.native_display { + self.surface_map.insert_surfaces(native_display, surfaces); + } } fn get_root_pipeline_id(&self) -> Option<PipelineId> { diff --git a/components/compositing/compositor_thread.rs b/components/compositing/compositor_thread.rs index fdfd4c633bf..1fa17c6d70e 100644 --- a/components/compositing/compositor_thread.rs +++ b/components/compositing/compositor_thread.rs @@ -98,6 +98,10 @@ pub fn run_script_listener_thread(compositor_proxy: Box<CompositorProxy + 'stati compositor_proxy.send(Msg::TouchEventProcessed(result)) } + ScriptToCompositorMsg::GetScrollOffset(pid, lid, send) => { + compositor_proxy.send(Msg::GetScrollOffset(pid, lid, send)); + } + ScriptToCompositorMsg::Exited => break, } } @@ -124,7 +128,7 @@ impl PaintListener for Box<CompositorProxy + 'static + Send> { // just return None in this case, since the paint thread // will exit shortly and never actually be requested // to paint buffers by the compositor. - port.recv().ok() + port.recv().unwrap_or(None) } fn assign_painted_buffers(&mut self, @@ -175,7 +179,7 @@ pub enum Msg { /// Requests the compositor's graphics metadata. Graphics metadata is what the painter needs /// to create surfaces that the compositor can see. On Linux this is the X display; on Mac this /// is the pixel format. - GetNativeDisplay(Sender<NativeDisplay>), + GetNativeDisplay(Sender<Option<NativeDisplay>>), /// Tells the compositor to create or update the layers for a pipeline if necessary /// (i.e. if no layer with that ID exists). @@ -231,6 +235,8 @@ pub enum Msg { MoveTo(Point2D<i32>), /// Resize the window to size ResizeTo(Size2D<u32>), + /// Get scroll offset of a layer + GetScrollOffset(PipelineId, LayerId, IpcSender<Point2D<f32>>), /// A pipeline was shut down. // This message acts as a synchronization point between the constellation, // when it shuts down a pipeline, to the compositor; when the compositor @@ -272,6 +278,7 @@ impl Debug for Msg { Msg::MoveTo(..) => write!(f, "MoveTo"), Msg::ResizeTo(..) => write!(f, "ResizeTo"), Msg::PipelineExited(..) => write!(f, "PipelineExited"), + Msg::GetScrollOffset(..) => write!(f, "GetScrollOffset"), } } } diff --git a/components/compositing/constellation.rs b/components/compositing/constellation.rs index 3cd67edcbcd..026edcb9b9b 100644 --- a/components/compositing/constellation.rs +++ b/components/compositing/constellation.rs @@ -25,7 +25,7 @@ use gaol; #[cfg(not(target_os = "windows"))] use gaol::sandbox::{self, Sandbox, SandboxMethods}; use gfx::font_cache_thread::FontCacheThread; -use gfx_traits::{Epoch, PaintMsg as FromPaintMsg}; +use gfx_traits::Epoch; use ipc_channel::ipc::{self, IpcOneShotServer, IpcSender}; use ipc_channel::router::ROUTER; use layout_traits::{LayoutControlChan, LayoutThreadFactory}; @@ -33,8 +33,8 @@ use msg::constellation_msg::WebDriverCommandMsg; use msg::constellation_msg::{FrameId, PipelineId}; use msg::constellation_msg::{Key, KeyModifiers, KeyState, LoadData}; use msg::constellation_msg::{PipelineNamespace, PipelineNamespaceId, NavigationDirection}; -use msg::constellation_msg::{SubpageId, WindowSizeData}; -use msg::constellation_msg::{self, ConstellationChan, Failure}; +use msg::constellation_msg::{SubpageId, WindowSizeData, WindowSizeType}; +use msg::constellation_msg::{self, ConstellationChan, PanicMsg}; use msg::webdriver_msg; use net_traits::image_cache_thread::ImageCacheThread; use net_traits::storage_thread::{StorageThread, StorageThreadMsg}; @@ -95,8 +95,8 @@ pub struct Constellation<LTF, STF> { /// A channel through which layout thread messages can be sent to this object. pub layout_sender: ConstellationChan<FromLayoutMsg>, - /// A channel through which paint thread messages can be sent to this object. - pub painter_sender: ConstellationChan<FromPaintMsg>, + /// A channel through which panic messages can be sent to this object. + pub panic_sender: ConstellationChan<PanicMsg>, /// Receives messages from scripts. pub script_receiver: Receiver<FromScriptMsg>, @@ -107,8 +107,8 @@ pub struct Constellation<LTF, STF> { /// Receives messages from the layout thread pub layout_receiver: Receiver<FromLayoutMsg>, - /// Receives messages from paint thread. - pub painter_receiver: Receiver<FromPaintMsg>, + /// Receives panic messages. + pub panic_receiver: Receiver<PanicMsg>, /// A channel (the implementation of which is port-specific) through which messages can be sent /// to the compositor. @@ -320,19 +320,19 @@ impl<LTF: LayoutThreadFactory, STF: ScriptThreadFactory> Constellation<LTF, STF> let (compositor_sender, compositor_receiver) = channel(); let (ipc_layout_receiver, ipc_layout_sender) = ConstellationChan::<FromLayoutMsg>::new(); let layout_receiver = ROUTER.route_ipc_receiver_to_new_mpsc_receiver(ipc_layout_receiver); - let (ipc_painter_receiver, ipc_painter_sender) = ConstellationChan::<FromPaintMsg>::new(); - let painter_receiver = ROUTER.route_ipc_receiver_to_new_mpsc_receiver(ipc_painter_receiver); + let (ipc_panic_receiver, ipc_panic_sender) = ConstellationChan::<PanicMsg>::new(); + let panic_receiver = ROUTER.route_ipc_receiver_to_new_mpsc_receiver(ipc_panic_receiver); let compositor_sender_clone = compositor_sender.clone(); spawn_named("Constellation".to_owned(), move || { let mut constellation: Constellation<LTF, STF> = Constellation { script_sender: ipc_script_sender, compositor_sender: compositor_sender_clone, layout_sender: ipc_layout_sender, - painter_sender: ipc_painter_sender, script_receiver: script_receiver, + panic_sender: ipc_panic_sender, compositor_receiver: compositor_receiver, layout_receiver: layout_receiver, - painter_receiver: painter_receiver, + panic_receiver: panic_receiver, compositor_proxy: state.compositor_proxy, devtools_chan: state.devtools_chan, resource_thread: state.resource_thread, @@ -416,7 +416,7 @@ impl<LTF: LayoutThreadFactory, STF: ScriptThreadFactory> Constellation<LTF, STF> parent_info: parent_info, constellation_chan: self.script_sender.clone(), layout_to_constellation_chan: self.layout_sender.clone(), - painter_chan: self.painter_sender.clone(), + panic_chan: self.panic_sender.clone(), scheduler_chan: self.scheduler_chan.clone(), compositor_proxy: self.compositor_proxy.clone_compositor_proxy(), devtools_chan: self.devtools_chan.clone(), @@ -548,7 +548,7 @@ impl<LTF: LayoutThreadFactory, STF: ScriptThreadFactory> Constellation<LTF, STF> Script(FromScriptMsg), Compositor(FromCompositorMsg), Layout(FromLayoutMsg), - Paint(FromPaintMsg) + Panic(PanicMsg) } // Get one incoming request. @@ -566,16 +566,16 @@ impl<LTF: LayoutThreadFactory, STF: ScriptThreadFactory> Constellation<LTF, STF> let receiver_from_script = &self.script_receiver; let receiver_from_compositor = &self.compositor_receiver; let receiver_from_layout = &self.layout_receiver; - let receiver_from_paint = &self.painter_receiver; + let receiver_from_panic = &self.panic_receiver; select! { msg = receiver_from_script.recv() => - Request::Script(msg.expect("Unexpected script failure in constellation")), + Request::Script(msg.expect("Unexpected script channel panic in constellation")), msg = receiver_from_compositor.recv() => - Request::Compositor(msg.expect("Unexpected compositor failure in constellation")), + Request::Compositor(msg.expect("Unexpected compositor channel panic in constellation")), msg = receiver_from_layout.recv() => - Request::Layout(msg.expect("Unexpected layout failure in constellation")), - msg = receiver_from_paint.recv() => - Request::Paint(msg.expect("Unexpected paint failure in constellation")) + Request::Layout(msg.expect("Unexpected layout channel panic in constellation")), + msg = receiver_from_panic.recv() => + Request::Panic(msg.expect("Unexpected panic channel panic in constellation")) } }; @@ -639,9 +639,9 @@ impl<LTF: LayoutThreadFactory, STF: ScriptThreadFactory> Constellation<LTF, STF> debug!("constellation got navigation message from compositor"); self.handle_navigate_msg(pipeline_info, direction); } - Request::Compositor(FromCompositorMsg::ResizedWindow(new_size)) => { + Request::Compositor(FromCompositorMsg::WindowSize(new_size, size_type)) => { debug!("constellation got window resize message"); - self.handle_resized_window_msg(new_size); + self.handle_window_size_msg(new_size, size_type); } Request::Compositor(FromCompositorMsg::TickAnimation(pipeline_id, tick_type)) => { self.handle_tick_animation(pipeline_id, tick_type) @@ -655,10 +655,6 @@ impl<LTF: LayoutThreadFactory, STF: ScriptThreadFactory> Constellation<LTF, STF> // Messages from script - Request::Script(FromScriptMsg::Failure(failure)) => { - debug!("handling script failure message from pipeline {:?}", failure); - self.handle_failure_msg(failure); - } Request::Script(FromScriptMsg::ScriptLoadedURLInIFrame(load_info)) => { debug!("constellation got iframe URL load message {:?} {:?} {:?}", load_info.containing_pipeline_id, @@ -803,10 +799,6 @@ impl<LTF: LayoutThreadFactory, STF: ScriptThreadFactory> Constellation<LTF, STF> Request::Layout(FromLayoutMsg::ChangeRunningAnimationsState(pipeline_id, animation_state)) => { self.handle_change_running_animations_state(pipeline_id, animation_state) } - Request::Layout(FromLayoutMsg::Failure(failure)) => { - debug!("handling paint failure message from pipeline {:?}", failure); - self.handle_failure_msg(failure); - } Request::Layout(FromLayoutMsg::SetCursor(cursor)) => { self.handle_set_cursor_msg(cursor) } @@ -816,15 +808,12 @@ impl<LTF: LayoutThreadFactory, STF: ScriptThreadFactory> Constellation<LTF, STF> } - // Messages from paint thread + // Panic messages - - // Notification that painting has finished and is requesting permission to paint. - Request::Paint(FromPaintMsg::Failure(failure)) => { - debug!("handling paint failure message from pipeline {:?}", failure); - self.handle_failure_msg(failure); + Request::Panic((pipeline_id, panic_reason)) => { + debug!("handling panic message ({:?})", pipeline_id); + self.handle_panic(pipeline_id, panic_reason); } - } true } @@ -851,17 +840,12 @@ impl<LTF: LayoutThreadFactory, STF: ScriptThreadFactory> Constellation<LTF, STF> } fn handle_send_error(&mut self, pipeline_id: PipelineId, err: IOError) { - let parent_info = match self.pipelines.get(&pipeline_id) { - None => return warn!("Pipeline {:?} send error after closure.", pipeline_id), - Some(pipeline) => pipeline.parent_info, - }; - // Treat send error the same as receiving a failure message + // Treat send error the same as receiving a panic message debug!("Pipeline {:?} send error ({}).", pipeline_id, err); - let failure = Failure::new(pipeline_id, parent_info); - self.handle_failure_msg(failure); + self.handle_panic(Some(pipeline_id), format!("Send failed ({})", err)); } - fn handle_failure_msg(&mut self, failure: Failure) { + fn handle_panic(&mut self, pipeline_id: Option<PipelineId>, reason: String) { if opts::get().hard_fail { // It's quite difficult to make Servo exit cleanly if some threads have failed. // Hard fail exists for test runners so we crash and that's good enough. @@ -871,15 +855,26 @@ impl<LTF: LayoutThreadFactory, STF: ScriptThreadFactory> Constellation<LTF, STF> process::exit(1); } - let window_size = self.pipelines.get(&failure.pipeline_id).and_then(|pipeline| pipeline.size); + debug!("Panic handler for pipeline {:?}: {}.", pipeline_id, reason); + + if let Some(pipeline_id) = pipeline_id { + self.replace_pipeline_with_about_failure(pipeline_id); + } + + } + + fn replace_pipeline_with_about_failure(&mut self, pipeline_id: PipelineId) { + + let parent_info = self.pipelines.get(&pipeline_id).and_then(|pipeline| pipeline.parent_info); + let window_size = self.pipelines.get(&pipeline_id).and_then(|pipeline| pipeline.size); // Notify the browser chrome that the pipeline has failed - self.trigger_mozbrowsererror(failure.pipeline_id); + self.trigger_mozbrowsererror(pipeline_id); - self.close_pipeline(failure.pipeline_id, ExitPipelineMode::Force); + self.close_pipeline(pipeline_id, ExitPipelineMode::Force); while let Some(pending_pipeline_id) = self.pending_frames.iter().find(|pending| { - pending.old_pipeline_id == Some(failure.pipeline_id) + pending.old_pipeline_id == Some(pipeline_id) }).map(|frame| frame.new_pipeline_id) { warn!("removing pending frame change for failed pipeline"); self.close_pipeline(pending_pipeline_id, ExitPipelineMode::Force); @@ -889,12 +884,12 @@ impl<LTF: LayoutThreadFactory, STF: ScriptThreadFactory> Constellation<LTF, STF> let new_pipeline_id = PipelineId::new(); self.new_pipeline(new_pipeline_id, - failure.parent_info, + parent_info, window_size, None, - LoadData::new(Url::parse("about:failure").expect("infallible"))); + LoadData::new(Url::parse("about:failure").expect("infallible"), None, None)); - self.push_pending_frame(new_pipeline_id, Some(failure.pipeline_id)); + self.push_pending_frame(new_pipeline_id, Some(pipeline_id)); } @@ -902,7 +897,7 @@ impl<LTF: LayoutThreadFactory, STF: ScriptThreadFactory> Constellation<LTF, STF> let window_size = self.window_size.visible_viewport; let root_pipeline_id = PipelineId::new(); debug_assert!(PipelineId::fake_root_pipeline_id() == root_pipeline_id); - self.new_pipeline(root_pipeline_id, None, Some(window_size), None, LoadData::new(url.clone())); + self.new_pipeline(root_pipeline_id, None, Some(window_size), None, LoadData::new(url.clone(), None, None)); self.handle_load_start_msg(&root_pipeline_id); self.push_pending_frame(root_pipeline_id, None); self.compositor_proxy.send(ToCompositorMsg::ChangePageUrl(root_pipeline_id, url)); @@ -915,7 +910,7 @@ impl<LTF: LayoutThreadFactory, STF: ScriptThreadFactory> Constellation<LTF, STF> visible_viewport: *size, initial_viewport: *size * ScaleFactor::new(1.0), device_pixel_ratio: self.window_size.device_pixel_ratio, - }); + }, WindowSizeType::Initial); // Store the new rect inside the pipeline let result = { @@ -1014,11 +1009,12 @@ impl<LTF: LayoutThreadFactory, STF: ScriptThreadFactory> Constellation<LTF, STF> }; // Create the new pipeline, attached to the parent and push to pending frames + // TODO - loaddata here should have referrer info (not None, None) self.new_pipeline(load_info.new_pipeline_id, Some((load_info.containing_pipeline_id, load_info.new_subpage_id)), window_size, script_chan, - LoadData::new(new_url)); + LoadData::new(new_url, None, None)); self.subpage_map.insert((load_info.containing_pipeline_id, load_info.new_subpage_id), load_info.new_pipeline_id); @@ -1424,7 +1420,7 @@ impl<LTF: LayoutThreadFactory, STF: ScriptThreadFactory> Constellation<LTF, STF> }, WebDriverCommandMsg::Refresh(pipeline_id, reply) => { let load_data = match self.pipelines.get(&pipeline_id) { - Some(pipeline) => LoadData::new(pipeline.url.clone()), + Some(pipeline) => LoadData::new(pipeline.url.clone(), None, None), None => return warn!("Pipeline {:?} Refresh after closure.", pipeline_id), }; self.load_url_for_webdriver(pipeline_id, load_data, reply); @@ -1586,8 +1582,8 @@ impl<LTF: LayoutThreadFactory, STF: ScriptThreadFactory> Constellation<LTF, STF> } /// Called when the window is resized. - fn handle_resized_window_msg(&mut self, new_size: WindowSizeData) { - debug!("handle_resized_window_msg: {:?} {:?}", new_size.initial_viewport.to_untyped(), + fn handle_window_size_msg(&mut self, new_size: WindowSizeData, size_type: WindowSizeType) { + debug!("handle_window_size_msg: {:?} {:?}", new_size.initial_viewport.to_untyped(), new_size.visible_viewport.to_untyped()); if let Some(root_frame_id) = self.root_frame_id { @@ -1602,14 +1598,23 @@ impl<LTF: LayoutThreadFactory, STF: ScriptThreadFactory> Constellation<LTF, STF> None => return warn!("Pipeline {:?} resized after closing.", pipeline_id), Some(pipeline) => pipeline, }; - let _ = pipeline.script_chan.send(ConstellationControlMsg::Resize(pipeline.id, new_size)); + let _ = pipeline.script_chan.send(ConstellationControlMsg::Resize( + pipeline.id, + new_size, + size_type + )); for pipeline_id in frame.prev.iter().chain(&frame.next) { let pipeline = match self.pipelines.get(&pipeline_id) { - None => { warn!("Inactive pipeline {:?} resized after closing.", pipeline_id); continue; }, + None => { + warn!("Inactive pipeline {:?} resized after closing.", pipeline_id); + continue; + }, Some(pipeline) => pipeline, }; - let _ = pipeline.script_chan.send(ConstellationControlMsg::ResizeInactive(pipeline.id, - new_size)); + let _ = pipeline.script_chan.send(ConstellationControlMsg::ResizeInactive( + pipeline.id, + new_size + )); } } @@ -1621,8 +1626,11 @@ impl<LTF: LayoutThreadFactory, STF: ScriptThreadFactory> Constellation<LTF, STF> Some(pipeline) => pipeline, }; if pipeline.parent_info.is_none() { - let _ = pipeline.script_chan.send(ConstellationControlMsg::Resize(pipeline.id, - new_size)); + let _ = pipeline.script_chan.send(ConstellationControlMsg::Resize( + pipeline.id, + new_size, + size_type + )); } } @@ -1925,7 +1933,7 @@ impl<LTF: LayoutThreadFactory, STF: ScriptThreadFactory> Constellation<LTF, STF> let event_info = self.pipelines.get(&pipeline_id).and_then(|pipeline| { pipeline.parent_info.map(|(containing_pipeline_id, subpage_id)| { - (containing_pipeline_id, subpage_id, pipeline.url.serialize()) + (containing_pipeline_id, subpage_id, pipeline.url.to_string()) }) }); diff --git a/components/compositing/lib.rs b/components/compositing/lib.rs index d72c2bace6c..22ebd94f187 100644 --- a/components/compositing/lib.rs +++ b/components/compositing/lib.rs @@ -18,10 +18,6 @@ extern crate azure; extern crate canvas; extern crate canvas_traits; extern crate clipboard; -#[cfg(target_os = "macos")] -extern crate core_graphics; -#[cfg(target_os = "macos")] -extern crate core_text; extern crate devtools_traits; extern crate euclid; #[cfg(not(target_os = "windows"))] @@ -37,7 +33,7 @@ extern crate layout_traits; extern crate log; extern crate msg; extern crate net_traits; -extern crate num; +extern crate num_traits; extern crate offscreen_gl_context; #[macro_use] extern crate profile_traits; @@ -59,7 +55,7 @@ use gfx_traits::Epoch; use ipc_channel::ipc::{IpcSender}; use msg::constellation_msg::{FrameId, Key, KeyState, KeyModifiers, LoadData}; use msg::constellation_msg::{NavigationDirection, PipelineId, SubpageId}; -use msg::constellation_msg::{WebDriverCommandMsg, WindowSizeData}; +use msg::constellation_msg::{WebDriverCommandMsg, WindowSizeData, WindowSizeType}; use std::collections::HashMap; use url::Url; @@ -103,7 +99,7 @@ pub enum CompositorMsg { KeyEvent(Key, KeyState, KeyModifiers), LoadUrl(PipelineId, LoadData), Navigate(Option<(PipelineId, SubpageId)>, NavigationDirection), - ResizedWindow(WindowSizeData), + WindowSize(WindowSizeData, WindowSizeType), /// Requests that the constellation instruct layout to begin a new tick of the animation. TickAnimation(PipelineId, AnimationTickType), /// Dispatch a webdriver command diff --git a/components/compositing/pipeline.rs b/components/compositing/pipeline.rs index 3de923ba858..9facc11829c 100644 --- a/components/compositing/pipeline.rs +++ b/components/compositing/pipeline.rs @@ -10,12 +10,11 @@ use euclid::scale_factor::ScaleFactor; use euclid::size::TypedSize2D; use gfx::font_cache_thread::FontCacheThread; use gfx::paint_thread::{ChromeToPaintMsg, LayoutToPaintMsg, PaintThread}; -use gfx_traits::PaintMsg; use ipc_channel::ipc::{self, IpcReceiver, IpcSender}; use ipc_channel::router::ROUTER; use layers::geometry::DevicePixel; use layout_traits::{LayoutControlChan, LayoutThreadFactory}; -use msg::constellation_msg::{ConstellationChan, Failure, FrameId, PipelineId, SubpageId}; +use msg::constellation_msg::{ConstellationChan, PanicMsg, FrameId, PipelineId, SubpageId}; use msg::constellation_msg::{LoadData, WindowSizeData}; use msg::constellation_msg::{PipelineNamespaceId}; use net_traits::ResourceThread; @@ -85,8 +84,8 @@ pub struct InitialPipelineState { pub constellation_chan: ConstellationChan<ScriptMsg>, /// A channel for the layout thread to send messages to the constellation. pub layout_to_constellation_chan: ConstellationChan<LayoutMsg>, - /// A channel to the associated paint thread. - pub painter_chan: ConstellationChan<PaintMsg>, + /// A channel to report panics + pub panic_chan: ConstellationChan<PanicMsg>, /// A channel to schedule timer events. pub scheduler_chan: IpcSender<TimerEventRequest>, /// A channel to the compositor. @@ -140,8 +139,6 @@ impl Pipeline { .expect("Pipeline script to compositor chan"); let mut pipeline_port = Some(pipeline_port); - let failure = Failure::new(state.id, state.parent_info); - let window_size = state.window_size.map(|size| { WindowSizeData { visible_viewport: size, @@ -179,7 +176,7 @@ impl Pipeline { subpage_id: subpage_id, load_data: state.load_data.clone(), paint_chan: layout_to_paint_chan.clone().to_opaque(), - failure: failure.clone(), + panic_chan: state.panic_chan.clone(), pipeline_port: mem::replace(&mut pipeline_port, None) .expect("script_pipeline != None but pipeline_port == None"), layout_shutdown_chan: layout_shutdown_chan.clone(), @@ -227,7 +224,7 @@ impl Pipeline { layout_to_constellation_chan: state.layout_to_constellation_chan, script_chan: script_chan, load_data: state.load_data.clone(), - failure: failure.clone(), + panic_chan: state.panic_chan.clone(), script_port: script_port, opts: (*opts::get()).clone(), prefs: prefs::get_cloned(), @@ -246,13 +243,12 @@ impl Pipeline { let privileged_pipeline_content = PrivilegedPipelineContent { id: state.id, - painter_chan: state.painter_chan, compositor_proxy: state.compositor_proxy, font_cache_thread: state.font_cache_thread, time_profiler_chan: state.time_profiler_chan, mem_profiler_chan: state.mem_profiler_chan, load_data: state.load_data, - failure: failure, + panic_chan: state.panic_chan, layout_to_paint_port: layout_to_paint_port, chrome_to_paint_chan: chrome_to_paint_chan, chrome_to_paint_port: chrome_to_paint_port, @@ -403,7 +399,7 @@ pub struct UnprivilegedPipelineContent { window_size: Option<WindowSizeData>, script_chan: IpcSender<ConstellationControlMsg>, load_data: LoadData, - failure: Failure, + panic_chan: ConstellationChan<PanicMsg>, script_port: Option<IpcReceiver<ConstellationControlMsg>>, layout_to_paint_chan: OptionalIpcSender<LayoutToPaintMsg>, opts: Opts, @@ -433,7 +429,7 @@ impl UnprivilegedPipelineContent { constellation_chan: self.constellation_chan.clone(), layout_to_constellation_chan: self.layout_to_constellation_chan.clone(), scheduler_chan: self.scheduler_chan.clone(), - failure_info: self.failure.clone(), + panic_chan: self.panic_chan.clone(), resource_thread: self.resource_thread, storage_thread: self.storage_thread.clone(), image_cache_thread: self.image_cache_thread.clone(), @@ -452,7 +448,7 @@ impl UnprivilegedPipelineContent { layout_pair, self.pipeline_port.expect("No pipeline port."), self.layout_to_constellation_chan, - self.failure, + self.panic_chan, self.script_chan.clone(), self.layout_to_paint_chan.clone(), self.image_cache_thread, @@ -480,14 +476,13 @@ impl UnprivilegedPipelineContent { pub struct PrivilegedPipelineContent { id: PipelineId, - painter_chan: ConstellationChan<PaintMsg>, compositor_proxy: Box<CompositorProxy + Send + 'static>, script_to_compositor_port: IpcReceiver<ScriptToCompositorMsg>, font_cache_thread: FontCacheThread, time_profiler_chan: time::ProfilerChan, mem_profiler_chan: profile_mem::ProfilerChan, load_data: LoadData, - failure: Failure, + panic_chan: ConstellationChan<PanicMsg>, layout_to_paint_port: Receiver<LayoutToPaintMsg>, chrome_to_paint_chan: Sender<ChromeToPaintMsg>, chrome_to_paint_port: Receiver<ChromeToPaintMsg>, @@ -502,9 +497,8 @@ impl PrivilegedPipelineContent { self.layout_to_paint_port, self.chrome_to_paint_port, self.compositor_proxy.clone_compositor_proxy(), - self.painter_chan, + self.panic_chan, self.font_cache_thread, - self.failure, self.time_profiler_chan, self.mem_profiler_chan, self.paint_shutdown_chan); @@ -526,9 +520,8 @@ impl PrivilegedPipelineContent { self.layout_to_paint_port, self.chrome_to_paint_port, self.compositor_proxy, - self.painter_chan, + self.panic_chan, self.font_cache_thread, - self.failure, self.time_profiler_chan, self.mem_profiler_chan, self.paint_shutdown_chan); diff --git a/components/compositing/timer_scheduler.rs b/components/compositing/timer_scheduler.rs index 3ae43f613bb..b928c2902dc 100644 --- a/components/compositing/timer_scheduler.rs +++ b/components/compositing/timer_scheduler.rs @@ -5,7 +5,7 @@ use euclid::length::Length; use ipc_channel::ipc::{self, IpcSender}; use ipc_channel::router::ROUTER; -use num::traits::Saturating; +use num_traits::Saturating; use script_traits::{MsDuration, NsDuration, precise_time_ms, precise_time_ns}; use script_traits::{TimerEvent, TimerEventRequest}; use std::cell::RefCell; diff --git a/components/devtools/Cargo.toml b/components/devtools/Cargo.toml index 095f73655ed..a0136fc6a08 100644 --- a/components/devtools/Cargo.toml +++ b/components/devtools/Cargo.toml @@ -24,8 +24,7 @@ path = "../plugins" git = "https://github.com/servo/ipc-channel" [dependencies] -hyper = { version = "0.8", features = [ "serde-serialization" ] } -log = "0.3.5" +hyper = { version = "0.9", features = [ "serde-serialization" ] } serde = "0.7" serde_json = "0.7" serde_macros = "0.7" diff --git a/components/devtools/actors/network_event.rs b/components/devtools/actors/network_event.rs index fea43715048..dd23accf1b5 100644 --- a/components/devtools/actors/network_event.rs +++ b/components/devtools/actors/network_event.rs @@ -312,7 +312,7 @@ impl NetworkEventActor { } pub fn add_request(&mut self, request: DevtoolsHttpRequest) { - self.request.url = request.url.serialize(); + self.request.url = request.url.as_str().to_owned(); self.request.method = request.method.clone(); self.request.headers = request.headers.clone(); self.request.body = request.body; diff --git a/components/devtools/lib.rs b/components/devtools/lib.rs index e9fe79ef14a..3aad044b485 100644 --- a/components/devtools/lib.rs +++ b/components/devtools/lib.rs @@ -23,8 +23,6 @@ extern crate devtools_traits; extern crate hyper; extern crate ipc_channel; -#[macro_use] -extern crate log; extern crate msg; extern crate serde; extern crate serde_json; @@ -287,7 +285,7 @@ fn run_server(sender: Sender<DevtoolsControlMsg>, let tab = TabActor { name: actors.new_name("tab"), title: String::from(title), - url: url.serialize(), + url: url.into_string(), console: console.name(), inspector: inspector.name(), timeline: timeline.name(), diff --git a/components/devtools_traits/Cargo.toml b/components/devtools_traits/Cargo.toml index fb9fb4f2cf5..753ac80ac53 100644 --- a/components/devtools_traits/Cargo.toml +++ b/components/devtools_traits/Cargo.toml @@ -11,9 +11,6 @@ path = "lib.rs" [dependencies.msg] path = "../msg" -[dependencies.util] -path = "../util" - [dependencies.ipc-channel] git = "https://github.com/servo/ipc-channel" @@ -23,10 +20,10 @@ path = "../plugins" [dependencies] heapsize = "0.3.0" heapsize_plugin = "0.1.2" -hyper = { version = "0.8", features = [ "serde-serialization" ] } +hyper = { version = "0.9", features = [ "serde-serialization" ] } time = "0.1" bitflags = "0.3" serde = "0.7" serde_macros = "0.7" -url = {version = "0.5.7", features = ["heap_size"]} +url = {version = "1.0.0", features = ["heap_size"]} diff --git a/components/devtools_traits/lib.rs b/components/devtools_traits/lib.rs index f084d70d638..9a46ddc0000 100644 --- a/components/devtools_traits/lib.rs +++ b/components/devtools_traits/lib.rs @@ -15,6 +15,7 @@ #![feature(custom_derive, plugin)] #![plugin(heapsize_plugin, serde_macros)] +#[allow(unused_extern_crates)] #[macro_use] extern crate bitflags; extern crate heapsize; @@ -24,7 +25,6 @@ extern crate msg; extern crate serde; extern crate time; extern crate url; -extern crate util; use hyper::header::Headers; use hyper::http::RawStatus; diff --git a/components/gfx/Cargo.toml b/components/gfx/Cargo.toml index f470f7dcd48..298d75fff18 100644 --- a/components/gfx/Cargo.toml +++ b/components/gfx/Cargo.toml @@ -30,7 +30,7 @@ smallvec = "0.1" string_cache = {version = "0.2.12", features = ["heap_size"]} time = "0.1.12" unicode-script = { version = "0.1", features = ["harfbuzz"] } -url = {version = "0.5.7", features = ["heap_size"]} +url = {version = "1.0.0", features = ["heap_size"]} [dependencies.plugins] path = "../plugins" diff --git a/components/gfx/font_cache_thread.rs b/components/gfx/font_cache_thread.rs index 315702902b9..19efd3073c6 100644 --- a/components/gfx/font_cache_thread.rs +++ b/components/gfx/font_cache_thread.rs @@ -170,6 +170,8 @@ impl FontCache { let load = PendingAsyncLoad::new(LoadContext::Font, self.resource_thread.clone(), url.clone(), + None, + None, None); let (data_sender, data_receiver) = ipc::channel().unwrap(); let data_target = AsyncResponseTarget { @@ -183,15 +185,21 @@ impl FontCache { ROUTER.add_route(data_receiver.to_opaque(), box move |message| { let response: ResponseAction = message.to().unwrap(); match response { - ResponseAction::HeadersAvailable(metadata) => { - let is_response_valid = - metadata.content_type.as_ref().map_or(false, |content_type| { - let mime = &content_type.0; - is_supported_font_type(&mime.0, &mime.1) - }); - info!("{} font with MIME type {:?}", + ResponseAction::HeadersAvailable(meta_result) => { + let is_response_valid = match meta_result { + Ok(ref metadata) => { + metadata.content_type.as_ref().map_or(false, |content_type| { + let mime = &content_type.0; + is_supported_font_type(&mime.0, &mime.1) + }) + } + Err(_) => false, + }; + + info!("{} font with MIME type {}", if is_response_valid { "Loading" } else { "Ignoring" }, - metadata.content_type); + meta_result.map(|ref meta| format!("{:?}", meta.content_type)) + .unwrap_or(format!("<Network Error>"))); *response_valid.lock().unwrap() = is_response_valid; } ResponseAction::DataAvailable(new_bytes) => { diff --git a/components/gfx/lib.rs b/components/gfx/lib.rs index f60575cd625..1eecec8e321 100644 --- a/components/gfx/lib.rs +++ b/components/gfx/lib.rs @@ -23,6 +23,7 @@ extern crate alloc; extern crate app_units; extern crate azure; +#[allow(unused_extern_crates)] #[macro_use] extern crate bitflags; @@ -49,6 +50,7 @@ extern crate harfbuzz_sys as harfbuzz; extern crate heapsize; extern crate ipc_channel; extern crate layers; +#[allow(unused_extern_crates)] #[macro_use] extern crate lazy_static; extern crate libc; diff --git a/components/gfx/paint_thread.rs b/components/gfx/paint_thread.rs index 76c21eed484..5b8de18b7c4 100644 --- a/components/gfx/paint_thread.rs +++ b/components/gfx/paint_thread.rs @@ -15,12 +15,11 @@ use euclid::rect::Rect; use euclid::size::Size2D; use font_cache_thread::FontCacheThread; use font_context::FontContext; -use gfx_traits::PaintMsg as ConstellationMsg; use gfx_traits::{Epoch, FrameTreeId, LayerId, LayerKind, LayerProperties, PaintListener}; use ipc_channel::ipc::IpcSender; use layers::layers::{BufferRequest, LayerBuffer, LayerBufferSet}; use layers::platform::surface::{NativeDisplay, NativeSurface}; -use msg::constellation_msg::{ConstellationChan, Failure, PipelineId}; +use msg::constellation_msg::{ConstellationChan, PanicMsg, PipelineId}; use paint_context::PaintContext; use profile_traits::mem::{self, ReportsChan}; use profile_traits::time; @@ -394,14 +393,13 @@ impl<C> PaintThread<C> where C: PaintListener + Send + 'static { layout_to_paint_port: Receiver<LayoutToPaintMsg>, chrome_to_paint_port: Receiver<ChromeToPaintMsg>, compositor: C, - constellation_chan: ConstellationChan<ConstellationMsg>, + panic_chan: ConstellationChan<PanicMsg>, font_cache_thread: FontCacheThread, - failure_msg: Failure, time_profiler_chan: time::ProfilerChan, mem_profiler_chan: mem::ProfilerChan, shutdown_chan: IpcSender<()>) { - let ConstellationChan(c) = constellation_chan.clone(); - thread::spawn_named_with_send_on_failure(format!("PaintThread {:?}", id), + let ConstellationChan(c) = panic_chan.clone(); + thread::spawn_named_with_send_on_panic(format!("PaintThread {:?}", id), thread_state::PAINT, move || { { @@ -441,7 +439,7 @@ impl<C> PaintThread<C> where C: PaintListener + Send + 'static { debug!("paint_thread: shutdown_chan send"); shutdown_chan.send(()).unwrap(); - }, failure_msg, c); + }, Some(id), c); } #[allow(unsafe_code)] diff --git a/components/gfx/text/glyph.rs b/components/gfx/text/glyph.rs index 9c41bd23f2c..b1d6222f29d 100644 --- a/components/gfx/text/glyph.rs +++ b/components/gfx/text/glyph.rs @@ -469,9 +469,9 @@ impl<'a> GlyphStore { character: char, data: &GlyphData) { let glyph_is_compressible = is_simple_glyph_id(data.id) && - is_simple_advance(data.advance) - && data.offset == Point2D::zero() - && data.cluster_start; // others are stored in detail buffer + is_simple_advance(data.advance) && + data.offset == Point2D::zero() && + data.cluster_start; // others are stored in detail buffer debug_assert!(data.ligature_start); // can't compress ligature continuation glyphs. debug_assert!(i < self.char_len()); diff --git a/components/gfx/text/shaping/harfbuzz.rs b/components/gfx/text/shaping/harfbuzz.rs index 495b6af6525..5af3dfcb08c 100644 --- a/components/gfx/text/shaping/harfbuzz.rs +++ b/components/gfx/text/shaping/harfbuzz.rs @@ -412,8 +412,8 @@ impl Shaper { let mut covered_byte_span = char_byte_span.clone(); // extend, clipping at end of text range. - while covered_byte_span.end() < byte_max - && byte_to_glyph[covered_byte_span.end()] == NO_GLYPH { + while covered_byte_span.end() < byte_max && + byte_to_glyph[covered_byte_span.end()] == NO_GLYPH { let range = text.char_range_at(covered_byte_span.end()); drop(range.ch); covered_byte_span.extend_to(range.next); diff --git a/components/gfx_traits/Cargo.toml b/components/gfx_traits/Cargo.toml index d341ac03823..c6a99dbe218 100644 --- a/components/gfx_traits/Cargo.toml +++ b/components/gfx_traits/Cargo.toml @@ -22,9 +22,6 @@ path = "../msg" [dependencies.plugins] path = "../plugins" -[dependencies.util] -path = "../util" - [dependencies] euclid = {version = "0.6.5", features = ["plugins"]} heapsize = "0.3.0" diff --git a/components/gfx_traits/lib.rs b/components/gfx_traits/lib.rs index e75700c379c..64474d496bf 100644 --- a/components/gfx_traits/lib.rs +++ b/components/gfx_traits/lib.rs @@ -16,7 +16,6 @@ extern crate heapsize; extern crate layers; extern crate msg; extern crate serde; -extern crate util; pub mod color; mod paint_listener; @@ -25,21 +24,9 @@ pub use paint_listener::PaintListener; use azure::azure_hl::Color; use euclid::Matrix4D; use euclid::rect::Rect; -use msg::constellation_msg::{Failure, PipelineId}; +use msg::constellation_msg::{PipelineId}; use std::fmt::{self, Debug, Formatter}; -/// Messages from the paint task to the constellation. -#[derive(Deserialize, Serialize)] -pub enum PaintMsg { - Failure(Failure), -} - -impl From<Failure> for PaintMsg { - fn from(failure: Failure) -> PaintMsg { - PaintMsg::Failure(failure) - } -} - #[derive(Clone, Copy, Debug, PartialEq)] pub enum LayerKind { NoTransform, diff --git a/components/layout/Cargo.toml b/components/layout/Cargo.toml index 35ca6cd1173..dc1ac2f1bf4 100644 --- a/components/layout/Cargo.toml +++ b/components/layout/Cargo.toml @@ -72,7 +72,6 @@ libc = "0.2" log = "0.3.5" rustc-serialize = "0.3" selectors = {version = "0.5.1", features = ["heap_size"]} -serde = "0.7" serde_json = "0.7" serde_macros = "0.7" smallvec = "0.1" @@ -80,4 +79,4 @@ string_cache = {version = "0.2.12", features = ["heap_size"]} time = "0.1" unicode-bidi = "0.2" unicode-script = { version = "0.1", features = ["harfbuzz"] } -url = {version = "0.5.7", features = ["heap_size"]} +url = {version = "1.0.0", features = ["heap_size"]} diff --git a/components/layout/construct.rs b/components/layout/construct.rs index ee961942300..cc34642466a 100644 --- a/components/layout/construct.rs +++ b/components/layout/construct.rs @@ -619,18 +619,20 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> // List of absolute descendants, in tree order. let mut abs_descendants = AbsoluteDescendants::new(); - for kid in node.children() { - if kid.get_pseudo_element_type() != PseudoElementType::Normal { - self.process(&kid); - } + if !node.is_replaced_content() { + for kid in node.children() { + if kid.get_pseudo_element_type() != PseudoElementType::Normal { + self.process(&kid); + } - self.build_block_flow_using_construction_result_of_child( - &mut flow, - &mut consecutive_siblings, - node, - kid, - &mut inline_fragment_accumulator, - &mut abs_descendants); + self.build_block_flow_using_construction_result_of_child( + &mut flow, + &mut consecutive_siblings, + node, + kid, + &mut inline_fragment_accumulator, + &mut abs_descendants); + } } // Perform a final flush of any inline fragments that we were gathering up to handle {ib} @@ -683,7 +685,7 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> HTMLElementTypeId::HTMLInputElement))) || node.type_id() == Some(NodeTypeId::Element(ElementTypeId::HTMLElement( HTMLElementTypeId::HTMLTextAreaElement))); - if node.get_pseudo_element_type().is_before_or_after() || + if node.get_pseudo_element_type().is_replaced_content() || node_is_input_or_text_area { // A TextArea's text contents are displayed through the input text // box, so don't construct them. @@ -1659,7 +1661,6 @@ impl<ConcreteThreadSafeLayoutNode> NodeUtils for ConcreteThreadSafeLayoutNode where ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode { fn is_replaced_content(&self) -> bool { match self.type_id() { - None | Some(NodeTypeId::CharacterData(_)) | Some(NodeTypeId::DocumentType) | Some(NodeTypeId::DocumentFragment) | @@ -1673,6 +1674,7 @@ impl<ConcreteThreadSafeLayoutNode> NodeUtils for ConcreteThreadSafeLayoutNode Some(NodeTypeId::Element(ElementTypeId::HTMLElement( HTMLElementTypeId::HTMLObjectElement))) => self.has_object_data(), Some(NodeTypeId::Element(_)) => false, + None => self.get_pseudo_element_type().is_replaced_content(), } } diff --git a/components/layout/display_list_builder.rs b/components/layout/display_list_builder.rs index 3bc3d101f06..fb2847e9d77 100644 --- a/components/layout/display_list_builder.rs +++ b/components/layout/display_list_builder.rs @@ -1247,6 +1247,9 @@ impl FragmentDisplayListBuilding for Fragment { let height = canvas_fragment_info.replaced_image_fragment_info .computed_block_size.map_or(0, |h| h.to_px() as usize); if width > 0 && height > 0 { + let computed_width = canvas_fragment_info.canvas_inline_size().to_px(); + let computed_height = canvas_fragment_info.canvas_block_size().to_px(); + let layer_id = self.layer_id(); let canvas_data = match canvas_fragment_info.ipc_renderer { Some(ref ipc_renderer) => { @@ -1257,7 +1260,10 @@ impl FragmentDisplayListBuilding for Fragment { receiver.recv().unwrap() }, None => CanvasData::Pixels(CanvasPixelData { - image_data: IpcSharedMemory::from_byte(0xFFu8, width * height * 4), + image_data: IpcSharedMemory::from_byte(0xFFu8, + (computed_width * + computed_height * 4) + as usize), image_key: None, }), }; @@ -1274,8 +1280,8 @@ impl FragmentDisplayListBuilding for Fragment { base: base, image_data: Some(Arc::new(canvas_data.image_data)), webrender_image: WebRenderImageInfo { - width: width as u32, - height: height as u32, + width: computed_width as u32, + height: computed_height as u32, format: PixelFormat::RGBA8, key: canvas_data.image_key, }, @@ -1319,8 +1325,9 @@ impl FragmentDisplayListBuilding for Fragment { scroll_policy: ScrollPolicy, mode: StackingContextCreationMode) -> Box<StackingContext> { + let use_webrender = opts::get().use_webrender; let border_box = match mode { - StackingContextCreationMode::InnerScrollWrapper => { + StackingContextCreationMode::InnerScrollWrapper if !use_webrender => { Rect::new(Point2D::zero(), base_flow.overflow.scroll.size) } _ => { @@ -1333,9 +1340,12 @@ impl FragmentDisplayListBuilding for Fragment { } }; let overflow = match mode { - StackingContextCreationMode::InnerScrollWrapper => { + StackingContextCreationMode::InnerScrollWrapper if !use_webrender => { Rect::new(Point2D::zero(), base_flow.overflow.paint.size) } + StackingContextCreationMode::InnerScrollWrapper if use_webrender => { + Rect::new(Point2D::zero(), base_flow.overflow.scroll.size) + } StackingContextCreationMode::OuterScrollWrapper => { Rect::new(Point2D::zero(), border_box.size) } diff --git a/components/layout/incremental.rs b/components/layout/incremental.rs index affb4f42c70..fb73e8b6d87 100644 --- a/components/layout/incremental.rs +++ b/components/layout/incremental.rs @@ -218,7 +218,9 @@ pub fn compute_damage(old: Option<&Arc<ServoComputedValues>>, new: &ServoCompute get_inheritedtable.border_collapse, get_inheritedtable.border_spacing, get_column.column_gap, - get_position.flex_direction + get_position.flex_direction, + get_position.flex_basis, + get_position.order ]) || add_if_not_equal!(old, new, damage, [ REPAINT, STORE_OVERFLOW, REFLOW_OUT_OF_FLOW ], [ get_position.top, get_position.left, diff --git a/components/layout/layout_thread.rs b/components/layout/layout_thread.rs index d226188f698..64779f8e031 100644 --- a/components/layout/layout_thread.rs +++ b/components/layout/layout_thread.rs @@ -37,7 +37,7 @@ use ipc_channel::router::ROUTER; use layout_debug; use layout_traits::LayoutThreadFactory; use log; -use msg::constellation_msg::{ConstellationChan, ConvertPipelineIdToWebRender, Failure, PipelineId}; +use msg::constellation_msg::{ConstellationChan, ConvertPipelineIdToWebRender, PanicMsg, PipelineId}; use net_traits::image_cache_thread::{ImageCacheChan, ImageCacheResult, ImageCacheThread}; use net_traits::image_cache_thread::{UsePlaceholder}; use parallel; @@ -45,10 +45,11 @@ use profile_traits::mem::{self, Report, ReportKind, ReportsChan}; use profile_traits::time::{TimerMetadataFrameType, TimerMetadataReflowType}; use profile_traits::time::{self, TimerMetadata, profile}; use query::{LayoutRPCImpl, process_content_box_request, process_content_boxes_request}; -use query::{process_node_geometry_request, process_node_scroll_area_request, process_offset_parent_query}; -use query::{process_resolved_style_request, process_margin_style_query}; +use query::{process_node_geometry_request, process_node_layer_id_request, process_node_scroll_area_request}; +use query::{process_node_overflow_request, process_resolved_style_request, process_margin_style_query}; +use query::{process_offset_parent_query}; use script::dom::node::OpaqueStyleAndLayoutData; -use script::layout_interface::{LayoutRPC, OffsetParentResponse, MarginStyleResponse}; +use script::layout_interface::{LayoutRPC, OffsetParentResponse, NodeOverflowResponse, MarginStyleResponse}; use script::layout_interface::{Msg, NewLayoutThreadInfo, Reflow, ReflowQueryType}; use script::layout_interface::{ScriptLayoutChan, ScriptReflow}; use script::reporter::CSSErrorReporter; @@ -117,9 +118,14 @@ pub struct LayoutThreadData { /// A queued response for the client {top, left, width, height} of a node in pixels. pub client_rect_response: Rect<i32>, + pub layer_id_response: Option<LayerId>, + /// A queued response for the node at a given point pub hit_test_response: (Option<DisplayItemMetadata>, bool), + /// A pair of overflow property in x and y + pub overflow_response: NodeOverflowResponse, + /// A queued response for the scroll {top, left, width, height} of a node in pixels. pub scroll_area_response: Rect<i32>, @@ -249,7 +255,7 @@ impl LayoutThreadFactory for LayoutThread { chan: OpaqueScriptLayoutChannel, pipeline_port: IpcReceiver<LayoutControlMsg>, constellation_chan: ConstellationChan<ConstellationMsg>, - failure_msg: Failure, + panic_chan: ConstellationChan<PanicMsg>, script_chan: IpcSender<ConstellationControlMsg>, paint_chan: OptionalIpcSender<LayoutToPaintMsg>, image_cache_thread: ImageCacheThread, @@ -259,8 +265,8 @@ impl LayoutThreadFactory for LayoutThread { shutdown_chan: IpcSender<()>, content_process_shutdown_chan: IpcSender<()>, webrender_api_sender: Option<webrender_traits::RenderApiSender>) { - let ConstellationChan(con_chan) = constellation_chan.clone(); - thread::spawn_named_with_send_on_failure(format!("LayoutThread {:?}", id), + let ConstellationChan(fail_chan) = panic_chan.clone(); + thread::spawn_named_with_send_on_panic(format!("LayoutThread {:?}", id), thread_state::LAYOUT, move || { { // Ensures layout thread is destroyed before we send shutdown message @@ -286,7 +292,7 @@ impl LayoutThreadFactory for LayoutThread { } let _ = shutdown_chan.send(()); let _ = content_process_shutdown_chan.send(()); - }, failure_msg, con_chan); + }, Some(id), fail_chan); } } @@ -463,8 +469,10 @@ impl LayoutThread { content_box_response: Rect::zero(), content_boxes_response: Vec::new(), client_rect_response: Rect::zero(), + layer_id_response: None, hit_test_response: (None, false), scroll_area_response: Rect::zero(), + overflow_response: NodeOverflowResponse(None), resolved_style_response: None, offset_parent_response: OffsetParentResponse::empty(), margin_style_response: MarginStyleResponse::empty(), @@ -732,7 +740,7 @@ impl LayoutThread { info.layout_pair, info.pipeline_port, info.constellation_chan, - info.failure, + info.panic_chan, info.script_chan.clone(), info.paint_chan.to::<LayoutToPaintMsg>(), self.image_cache_thread.clone(), @@ -949,8 +957,8 @@ impl LayoutThread { let pipeline_id = self.id.to_webrender(); // TODO(gw) For now only create a root scrolling layer! - let root_scroll_layer_id = webrender_traits::ScrollLayerId::new(pipeline_id, 0); let mut frame_builder = WebRenderFrameBuilder::new(pipeline_id); + let root_scroll_layer_id = frame_builder.next_scroll_layer_id(); let sc_id = rw_data.display_list.as_ref().unwrap().convert_to_webrender( &mut self.webrender_api.as_mut().unwrap(), pipeline_id, @@ -994,7 +1002,7 @@ impl LayoutThread { let document = unsafe { ServoLayoutNode::new(&data.document) }; let document = document.as_document().unwrap(); - debug!("layout: received layout request for: {}", self.url.borrow().serialize()); + debug!("layout: received layout request for: {}", *self.url.borrow()); let mut rw_data = possibly_locked_rw_data.lock(); @@ -1015,9 +1023,15 @@ impl LayoutThread { ReflowQueryType::NodeGeometryQuery(_) => { rw_data.client_rect_response = Rect::zero(); }, + ReflowQueryType::NodeLayerIdQuery(_) => { + rw_data.layer_id_response = None; + }, ReflowQueryType::NodeScrollGeometryQuery(_) => { rw_data.scroll_area_response = Rect::zero(); }, + ReflowQueryType::NodeOverflowQuery(_) => { + rw_data.overflow_response = NodeOverflowResponse(None); + }, ReflowQueryType::ResolvedStyleQuery(_, _, _) => { rw_data.resolved_style_response = None; }, @@ -1034,8 +1048,7 @@ impl LayoutThread { Some(x) => x, }; - debug!("layout: received layout request for: {}", - self.url.borrow().serialize()); + debug!("layout: received layout request for: {}", *self.url.borrow()); if log_enabled!(log::LogLevel::Debug) { node.dump(); } @@ -1177,6 +1190,14 @@ impl LayoutThread { let node = unsafe { ServoLayoutNode::new(&node) }; rw_data.scroll_area_response = process_node_scroll_area_request(node, &mut root_flow); }, + ReflowQueryType::NodeOverflowQuery(node) => { + let node = unsafe { ServoLayoutNode::new(&node) }; + rw_data.overflow_response = process_node_overflow_request(node); + }, + ReflowQueryType::NodeLayerIdQuery(node) => { + let node = unsafe { ServoLayoutNode::new(&node) }; + rw_data.layer_id_response = Some(process_node_layer_id_request(node)); + }, ReflowQueryType::ResolvedStyleQuery(node, ref pseudo, ref property) => { let node = unsafe { ServoLayoutNode::new(&node) }; rw_data.resolved_style_response = @@ -1441,7 +1462,7 @@ impl LayoutThread { /// Returns profiling information which is passed to the time profiler. fn profiler_metadata(&self) -> Option<TimerMetadata> { Some(TimerMetadata { - url: self.url.borrow().serialize(), + url: self.url.borrow().to_string(), iframe: if self.is_iframe { TimerMetadataFrameType::IFrame } else { diff --git a/components/layout/lib.rs b/components/layout/lib.rs index 4f1d9abdac1..f4978023d76 100644 --- a/components/layout/lib.rs +++ b/components/layout/lib.rs @@ -21,6 +21,7 @@ extern crate app_units; extern crate azure; +#[allow(unused_extern_crates)] #[macro_use] extern crate bitflags; extern crate canvas_traits; @@ -49,7 +50,6 @@ extern crate rustc_serialize; extern crate script; extern crate script_traits; extern crate selectors; -extern crate serde; extern crate serde_json; extern crate smallvec; #[macro_use(atom, ns)] extern crate string_cache; diff --git a/components/layout/query.rs b/components/layout/query.rs index 1485e54f065..5b28acfa462 100644 --- a/components/layout/query.rs +++ b/components/layout/query.rs @@ -13,11 +13,12 @@ use flow; use flow_ref::FlowRef; use fragment::{Fragment, FragmentBorderBoxIterator, SpecificFragmentInfo}; use gfx::display_list::OpaqueNode; +use gfx_traits::{LayerId}; use layout_thread::LayoutThreadData; use msg::constellation_msg::ConstellationChan; use opaque_node::OpaqueNodeMethods; -use script::layout_interface::{ContentBoxResponse, ContentBoxesResponse, NodeGeometryResponse}; -use script::layout_interface::{HitTestResponse, LayoutRPC, OffsetParentResponse}; +use script::layout_interface::{ContentBoxResponse, NodeOverflowResponse, ContentBoxesResponse, NodeGeometryResponse}; +use script::layout_interface::{HitTestResponse, LayoutRPC, OffsetParentResponse, NodeLayerIdResponse}; use script::layout_interface::{ResolvedStyleResponse, ScriptLayoutChan, MarginStyleResponse}; use script_traits::LayoutMsg as ConstellationMsg; use script_traits::UntrustedNodeAddress; @@ -112,12 +113,23 @@ impl LayoutRPC for LayoutRPCImpl { } } + fn node_overflow(&self) -> NodeOverflowResponse { + NodeOverflowResponse(self.0.lock().unwrap().overflow_response.0) + } + fn node_scroll_area(&self) -> NodeGeometryResponse { NodeGeometryResponse { client_rect: self.0.lock().unwrap().scroll_area_response } } + fn node_layer_id(&self) -> NodeLayerIdResponse { + NodeLayerIdResponse { + layer_id: self.0.lock().unwrap().layer_id_response + .expect("layer_id is not correctly fetched, see PR #9968") + } + } + /// Retrieves the resolved value for a CSS style property. fn resolved_style(&self) -> ResolvedStyleResponse { let &LayoutRPCImpl(ref rw_data) = self; @@ -425,6 +437,7 @@ impl FragmentBorderBoxIterator for UnioningFragmentScrollAreaIterator { let bottom_padding = (border_box.size.height - bottom_border - top_border).to_px(); let top_padding = top_border.to_px(); let left_padding = left_border.to_px(); + match self.level { Some(start_level) if level <= start_level => { self.is_child = false; } Some(_) => { @@ -517,6 +530,11 @@ pub fn process_node_geometry_request<N: LayoutNode>(requested_node: N, layout_ro iterator.client_rect } +pub fn process_node_layer_id_request<N: LayoutNode>(requested_node: N) -> LayerId { + let layout_node = requested_node.to_threadsafe(); + layout_node.layer_id() +} + pub fn process_node_scroll_area_request< N: LayoutNode>(requested_node: N, layout_root: &mut FlowRef) -> Rect<i32> { let mut iterator = UnioningFragmentScrollAreaIterator::new(requested_node.opaque()); @@ -691,6 +709,14 @@ pub fn process_offset_parent_query<N: LayoutNode>(requested_node: N, layout_root } } +pub fn process_node_overflow_request<N: LayoutNode>(requested_node: N) -> NodeOverflowResponse { + let layout_node = requested_node.to_threadsafe(); + let style = &*layout_node.style(); + let style_box = style.get_box(); + + NodeOverflowResponse(Some((Point2D::new(style_box.overflow_x, style_box.overflow_y.0)))) +} + pub fn process_margin_style_query<N: LayoutNode>(requested_node: N) -> MarginStyleResponse { let layout_node = requested_node.to_threadsafe(); diff --git a/components/layout/traversal.rs b/components/layout/traversal.rs index 00732f852ee..1fe5388549e 100644 --- a/components/layout/traversal.rs +++ b/components/layout/traversal.rs @@ -194,9 +194,9 @@ impl<'a> PostorderFlowTraversal for AssignBSizes<'a> { #[inline] fn should_process(&self, flow: &mut Flow) -> bool { let base = flow::base(flow); - base.restyle_damage.intersects(REFLOW_OUT_OF_FLOW | REFLOW) + base.restyle_damage.intersects(REFLOW_OUT_OF_FLOW | REFLOW) && // The fragmentation countainer is responsible for calling Flow::fragment recursively - && !base.flags.contains(CAN_BE_FRAGMENTED) + !base.flags.contains(CAN_BE_FRAGMENTED) } } diff --git a/components/layout/webrender_helpers.rs b/components/layout/webrender_helpers.rs index 1c7dc11785c..c3b28f8ecc1 100644 --- a/components/layout/webrender_helpers.rs +++ b/components/layout/webrender_helpers.rs @@ -268,11 +268,16 @@ impl WebRenderStackingContextConverter for StackingContext { } if child.context_type == StackingContextType::Real { + let scroll_layer_id_for_children = if self.scrolls_overflow_area { + scroll_layer_id + } else { + None + }; let stacking_context_id = child.convert_to_webrender(traversal, api, pipeline_id, epoch, - None, + scroll_layer_id_for_children, scroll_policy, frame_builder); builder.push_stacking_context(stacking_context_id); @@ -299,7 +304,7 @@ impl WebRenderStackingContextConverter for StackingContext { api: &mut webrender_traits::RenderApi, pipeline_id: webrender_traits::PipelineId, epoch: webrender_traits::Epoch, - scroll_layer_id: Option<webrender_traits::ScrollLayerId>, + mut scroll_layer_id: Option<webrender_traits::ScrollLayerId>, mut scroll_policy: ScrollPolicy, frame_builder: &mut WebRenderFrameBuilder) -> webrender_traits::StackingContextId { @@ -324,7 +329,13 @@ impl WebRenderStackingContextConverter for StackingContext { self.blend_mode.to_blend_mode(), self.filters.to_filter_ops(), &mut frame_builder.auxiliary_lists_builder); + let mut builder = webrender_traits::DisplayListBuilder::new(); + + if self.scrolls_overflow_area { + scroll_layer_id = Some(frame_builder.next_scroll_layer_id()); + } + self.convert_children_to_webrender(traversal, api, pipeline_id, @@ -502,7 +513,8 @@ pub struct WebRenderFrameBuilder { pub stacking_contexts: Vec<(StackingContextId, webrender_traits::StackingContext)>, pub display_lists: Vec<(DisplayListId, webrender_traits::BuiltDisplayList)>, pub auxiliary_lists_builder: AuxiliaryListsBuilder, - pub root_pipeline_id: PipelineId + pub root_pipeline_id: PipelineId, + pub next_scroll_layer_id: usize, } impl WebRenderFrameBuilder { @@ -512,6 +524,7 @@ impl WebRenderFrameBuilder { display_lists: vec![], auxiliary_lists_builder: AuxiliaryListsBuilder::new(), root_pipeline_id: root_pipeline_id, + next_scroll_layer_id: 0, } } @@ -538,5 +551,12 @@ impl WebRenderFrameBuilder { self.display_lists.push((id, display_list)); id } + + pub fn next_scroll_layer_id(&mut self) -> webrender_traits::ScrollLayerId { + let scroll_layer_id = self.next_scroll_layer_id; + self.next_scroll_layer_id += 1; + webrender_traits::ScrollLayerId::new(self.root_pipeline_id, scroll_layer_id) + } + } diff --git a/components/layout/wrapper.rs b/components/layout/wrapper.rs index e76af843ea0..00c77631707 100644 --- a/components/layout/wrapper.rs +++ b/components/layout/wrapper.rs @@ -34,6 +34,7 @@ use core::nonzero::NonZero; use data::{LayoutDataFlags, PrivateLayoutData}; use gfx::display_list::OpaqueNode; use gfx::text::glyph::CharIndex; +use gfx_traits::{LayerId, LayerType}; use incremental::RestyleDamage; use msg::constellation_msg::PipelineId; use opaque_node::OpaqueNodeMethods; @@ -629,7 +630,7 @@ impl<T> PseudoElementType<T> { } } - pub fn is_before_or_after(&self) -> bool { + pub fn is_replaced_content(&self) -> bool { match *self { PseudoElementType::Before(_) | PseudoElementType::After(_) => true, _ => false, @@ -851,6 +852,21 @@ pub trait ThreadSafeLayoutNode : Clone + Copy + Sized + PartialEq { fn iframe_pipeline_id(&self) -> PipelineId; fn get_colspan(&self) -> u32; + + fn layer_id(&self) -> LayerId { + let layer_type = match self.get_pseudo_element_type() { + PseudoElementType::Normal => LayerType::FragmentBody, + PseudoElementType::Before(_) => LayerType::BeforePseudoContent, + PseudoElementType::After(_) => LayerType::AfterPseudoContent, + PseudoElementType::DetailsSummary(_) => LayerType::FragmentBody, + PseudoElementType::DetailsContent(_) => LayerType::FragmentBody, + }; + LayerId::new_of_type(layer_type, self.opaque().id() as usize) + } + + fn layer_id_for_overflow_scroll(&self) -> LayerId { + LayerId::new_of_type(LayerType::OverflowScroll, self.opaque().id() as usize) + } } // This trait is only public so that it can be implemented by the gecko wrapper. @@ -1025,7 +1041,7 @@ impl<'ln> ThreadSafeLayoutNode for ServoThreadSafeLayoutNode<'ln> { } fn text_content(&self) -> TextContent { - if self.pseudo.is_before_or_after() { + if self.pseudo.is_replaced_content() { let data = &self.borrow_layout_data().unwrap().style_data; let style = if self.pseudo.is_before() { diff --git a/components/layout_traits/Cargo.toml b/components/layout_traits/Cargo.toml index ada3ad39b18..0b064f07618 100644 --- a/components/layout_traits/Cargo.toml +++ b/components/layout_traits/Cargo.toml @@ -35,4 +35,4 @@ git = "https://github.com/servo/webrender_traits" [dependencies] serde = "0.7" serde_macros = "0.7" -url = {version = "0.5.7", features = ["heap_size"]} +url = {version = "1.0.0", features = ["heap_size"]} diff --git a/components/layout_traits/lib.rs b/components/layout_traits/lib.rs index f06dc14392d..61f9618f421 100644 --- a/components/layout_traits/lib.rs +++ b/components/layout_traits/lib.rs @@ -26,7 +26,7 @@ extern crate webrender_traits; use gfx::font_cache_thread::FontCacheThread; use gfx::paint_thread::LayoutToPaintMsg; use ipc_channel::ipc::{IpcReceiver, IpcSender}; -use msg::constellation_msg::{ConstellationChan, Failure, PipelineId}; +use msg::constellation_msg::{ConstellationChan, PanicMsg, PipelineId}; use net_traits::image_cache_thread::ImageCacheThread; use profile_traits::{mem, time}; use script_traits::LayoutMsg as ConstellationMsg; @@ -49,7 +49,7 @@ pub trait LayoutThreadFactory { chan: OpaqueScriptLayoutChannel, pipeline_port: IpcReceiver<LayoutControlMsg>, constellation_chan: ConstellationChan<ConstellationMsg>, - failure_msg: Failure, + panic_chan: ConstellationChan<PanicMsg>, script_chan: IpcSender<ConstellationControlMsg>, layout_to_paint_chan: OptionalIpcSender<LayoutToPaintMsg>, image_cache_thread: ImageCacheThread, diff --git a/components/msg/Cargo.toml b/components/msg/Cargo.toml index 9017d5dbba5..f44f461d94a 100644 --- a/components/msg/Cargo.toml +++ b/components/msg/Cargo.toml @@ -30,8 +30,8 @@ cssparser = {version = "0.5.4", features = ["heap_size", "serde-serialization"]} euclid = {version = "0.6.4", features = ["plugins"]} heapsize = "0.3.0" heapsize_plugin = "0.1.2" -hyper = { version = "0.8", features = [ "serde-serialization" ] } +hyper = { version = "0.9", features = [ "serde-serialization" ] } rustc-serialize = "0.3.4" serde = "0.7" serde_macros = "0.7" -url = {version = "0.5.7", features = ["heap_size"]} +url = {version = "1.0.0", features = ["heap_size"]} diff --git a/components/msg/constellation_msg.rs b/components/msg/constellation_msg.rs index c9b8d0acd88..8fa5b8bba9b 100644 --- a/components/msg/constellation_msg.rs +++ b/components/msg/constellation_msg.rs @@ -16,7 +16,6 @@ use std::cell::Cell; use std::fmt; use url::Url; use util::geometry::{PagePx, ViewportPx}; -use util::thread::AddFailureDetails; use webdriver_msg::{LoadStatus, WebDriverScriptCommand}; use webrender_traits; @@ -36,29 +35,7 @@ impl<T: Serialize + Deserialize> Clone for ConstellationChan<T> { } } -// We pass this info to various threads, so it lives in a separate, cloneable struct. -#[derive(Clone, Deserialize, Serialize, Debug)] -pub struct Failure { - pub pipeline_id: PipelineId, - pub parent_info: Option<(PipelineId, SubpageId)>, - pub panic_message: Option<String>, -} - -impl Failure { - pub fn new(pipeline_id: PipelineId, parent_info: Option<(PipelineId, SubpageId)>) -> Failure { - Failure { - pipeline_id: pipeline_id, - parent_info: parent_info, - panic_message: None, - } - } -} - -impl AddFailureDetails for Failure { - fn add_panic_message(&mut self, message: String) { - self.panic_message = Some(message); - } -} +pub type PanicMsg = (Option<PipelineId>, String); #[derive(Copy, Clone, Deserialize, Serialize, HeapSizeOf)] pub struct WindowSizeData { @@ -73,6 +50,12 @@ pub struct WindowSizeData { pub device_pixel_ratio: ScaleFactor<ViewportPx, DevicePixel, f32>, } +#[derive(Deserialize, Eq, PartialEq, Serialize, Copy, Clone, HeapSizeOf)] +pub enum WindowSizeType { + Initial, + Resize, +} + #[derive(PartialEq, Eq, Copy, Clone, Debug, Deserialize, Serialize)] pub enum KeyState { Pressed, @@ -263,15 +246,19 @@ pub struct LoadData { pub method: Method, pub headers: Headers, pub data: Option<Vec<u8>>, + pub referrer_policy: Option<ReferrerPolicy>, + pub referrer_url: Option<Url>, } impl LoadData { - pub fn new(url: Url) -> LoadData { + pub fn new(url: Url, referrer_policy: Option<ReferrerPolicy>, referrer_url: Option<Url>) -> LoadData { LoadData { url: url, method: Method::Get, headers: Headers::new(), data: None, + referrer_policy: referrer_policy, + referrer_url: referrer_url, } } } @@ -402,3 +389,15 @@ impl ConvertPipelineIdFromWebRender for webrender_traits::PipelineId { } } } + +/// [Policies](https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-states) +/// for providing a referrer header for a request +#[derive(HeapSizeOf, Clone, Deserialize, Serialize)] +pub enum ReferrerPolicy { + NoReferrer, + NoRefWhenDowngrade, + OriginOnly, + OriginWhenCrossOrigin, + UnsafeUrl, +} + diff --git a/components/msg/lib.rs b/components/msg/lib.rs index 0f2a16228a1..bd97c3a33da 100644 --- a/components/msg/lib.rs +++ b/components/msg/lib.rs @@ -7,6 +7,7 @@ #![deny(unsafe_code)] +#[allow(unused_extern_crates)] #[macro_use] extern crate bitflags; extern crate euclid; diff --git a/components/net/Cargo.toml b/components/net/Cargo.toml index 5d1a100ecdb..5fb3978a9c1 100644 --- a/components/net/Cargo.toml +++ b/components/net/Cargo.toml @@ -33,11 +33,12 @@ git = "https://github.com/servo/ipc-channel" git = "https://github.com/servo/webrender_traits" [dependencies] -cookie = "0.2" +cookie = { version = "0.2.4", features = [ "serialize-rustc" ] } flate2 = "0.2.0" -hyper = { version = "0.8", features = [ "serde-serialization" ] } +hyper = { version = "0.9", features = [ "serde-serialization" ] } immeta = "0.3.1" log = "0.3.5" +matches = "0.1" mime = "0.2.0" mime_guess = "1.6.0" openssl = "0.7.6" @@ -45,9 +46,9 @@ rustc-serialize = "0.3" threadpool = "1.0" time = "0.1.17" unicase = "1.4.0" -url = {version = "0.5.7", features = ["heap_size"]} +url = {version = "1.0.0", features = ["heap_size", "rustc-serialize"]} uuid = { version = "0.2", features = ["v4"] } -websocket = "0.16.1" +websocket = "0.17" [target.'cfg(any(target_os = "macos", target_os = "linux"))'.dependencies] tinyfiledialogs = {git = "https://github.com/jdm/tinyfiledialogs"} diff --git a/components/net/about_loader.rs b/components/net/about_loader.rs index 5fbaaa686f6..56b4f5d28a5 100644 --- a/components/net/about_loader.rs +++ b/components/net/about_loader.rs @@ -9,19 +9,25 @@ use hyper::mime::{Mime, SubLevel, TopLevel}; use mime_classifier::MIMEClassifier; use net_traits::ProgressMsg::Done; use net_traits::response::HttpsState; -use net_traits::{LoadConsumer, LoadData, Metadata}; +use net_traits::{LoadConsumer, LoadData, Metadata, NetworkError}; use resource_thread::{CancellationListener, send_error, start_sending_sniffed_opt}; use std::sync::Arc; use url::Url; use util::resource_files::resources_dir_path; +fn url_from_non_relative_scheme(load_data: &mut LoadData, filename: &str) { + let mut path = resources_dir_path(); + path.push(filename); + assert!(path.exists()); + load_data.url = Url::from_file_path(&*path).unwrap(); +} + pub fn factory(mut load_data: LoadData, start_chan: LoadConsumer, classifier: Arc<MIMEClassifier>, cancel_listener: CancellationListener) { let url = load_data.url.clone(); - let non_relative_scheme_data = url.non_relative_scheme_data().unwrap(); - match non_relative_scheme_data { + match url.path() { "blank" => { let metadata = Metadata { final_url: load_data.url, @@ -41,15 +47,11 @@ pub fn factory(mut load_data: LoadData, return } "crash" => panic!("Loading the about:crash URL."), - "failure" | "not-found" => { - let mut path = resources_dir_path(); - let file_name = non_relative_scheme_data.to_owned() + ".html"; - path.push(&file_name); - assert!(path.exists()); - load_data.url = Url::from_file_path(&*path).unwrap(); - } + "failure" | "not-found" => + url_from_non_relative_scheme(&mut load_data, &(url.path().to_owned() + ".html")), + "sslfail" => url_from_non_relative_scheme(&mut load_data, "badcert.html"), _ => { - send_error(load_data.url, "Unknown about: URL.".to_owned(), start_chan); + send_error(load_data.url, NetworkError::Internal("Unknown about: URL.".to_owned()), start_chan); return } }; diff --git a/components/net/chrome_loader.rs b/components/net/chrome_loader.rs new file mode 100644 index 00000000000..544e9a64f4a --- /dev/null +++ b/components/net/chrome_loader.rs @@ -0,0 +1,53 @@ +/* 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/. */ + +use file_loader; +use mime_classifier::MIMEClassifier; +use net_traits::{LoadConsumer, LoadData, NetworkError}; +use resource_thread::{CancellationListener, send_error}; +use std::fs::canonicalize; +use std::sync::Arc; +use url::Url; +use url::percent_encoding::percent_decode; +use util::resource_files::resources_dir_path; + +pub fn resolve_chrome_url(url: &Url) -> Result<Url, ()> { + assert_eq!(url.scheme(), "chrome"); + if url.host_str() != Some("resources") { + return Err(()) + } + let resources = canonicalize(resources_dir_path()) + .expect("Error canonicalizing path to the resources directory"); + let mut path = resources.clone(); + for segment in url.path_segments().unwrap() { + match percent_decode(segment.as_bytes()).decode_utf8() { + // Check ".." to prevent access to files outside of the resources directory. + Ok(segment) => path.push(&*segment), + _ => return Err(()) + } + } + match canonicalize(path) { + Ok(ref path) if path.starts_with(&resources) && path.exists() => { + Ok(Url::from_file_path(path).unwrap()) + } + _ => Err(()) + } +} + +pub fn factory(mut load_data: LoadData, + start_chan: LoadConsumer, + classifier: Arc<MIMEClassifier>, + cancel_listener: CancellationListener) { + let file_url = match resolve_chrome_url(&load_data.url) { + Ok(url) => url, + Err(_) => { + send_error(load_data.url, + NetworkError::Internal("Invalid chrome URL.".to_owned()), + start_chan); + return; + } + }; + load_data.url = file_url; + file_loader::factory(load_data, start_chan, classifier, cancel_listener) +} diff --git a/components/net/cookie.rs b/components/net/cookie.rs index 2f555767b11..e85f0b41397 100644 --- a/components/net/cookie.rs +++ b/components/net/cookie.rs @@ -16,7 +16,7 @@ use url::Url; /// A stored cookie that wraps the definition in cookie-rs. This is used to implement /// various behaviours defined in the spec that rely on an associated request URL, /// which cookie-rs and hyper's header parsing do not support. -#[derive(Clone, Debug)] +#[derive(Clone, Debug, RustcDecodable, RustcEncodable)] pub struct Cookie { pub cookie: cookie_rs::Cookie, pub host_only: bool, @@ -39,7 +39,7 @@ impl Cookie { _ => (false, None) }; - let url_host = request.host().map_or("".to_owned(), |host| host.serialize()); + let url_host = request.host_str().unwrap_or("").to_owned(); // Step 4 let mut domain = cookie.domain.clone().unwrap_or("".to_owned()); @@ -66,10 +66,8 @@ impl Cookie { // Step 7 let mut path = cookie.path.unwrap_or("".to_owned()); - if path.is_empty() || path.as_bytes()[0] != b'/' { - let url_path = request.serialize_path(); - let url_path = url_path.as_ref().map(|path| &**path); - path = Cookie::default_path(url_path.unwrap_or("")).to_owned(); + if path.chars().next() != Some('/') { + path = Cookie::default_path(request.path()).to_owned(); } cookie.path = Some(path); @@ -96,7 +94,7 @@ impl Cookie { // http://tools.ietf.org/html/rfc6265#section-5.1.4 pub fn default_path(request_path: &str) -> &str { // Step 2 - if request_path.is_empty() || !request_path.starts_with("/") { + if request_path.chars().next() != Some('/') { return "/"; } @@ -135,10 +133,10 @@ impl Cookie { if string == domain_string { return true; } - if string.ends_with(domain_string) - && string.as_bytes()[string.len()-domain_string.len()-1] == b'.' - && string.parse::<Ipv4Addr>().is_err() - && string.parse::<Ipv6Addr>().is_err() { + if string.ends_with(domain_string) && + string.as_bytes()[string.len()-domain_string.len()-1] == b'.' && + string.parse::<Ipv4Addr>().is_err() && + string.parse::<Ipv6Addr>().is_err() { return true; } false @@ -146,26 +144,26 @@ impl Cookie { // http://tools.ietf.org/html/rfc6265#section-5.4 step 1 pub fn appropriate_for_url(&self, url: &Url, source: CookieSource) -> bool { - let domain = url.host().map(|host| host.serialize()); + let domain = url.host_str(); if self.host_only { - if self.cookie.domain != domain { + if self.cookie.domain.as_ref().map(String::as_str) != domain { return false; } } else { - if let (Some(ref domain), &Some(ref cookie_domain)) = (domain, &self.cookie.domain) { + if let (Some(domain), &Some(ref cookie_domain)) = (domain, &self.cookie.domain) { if !Cookie::domain_match(domain, cookie_domain) { return false; } } } - if let (Some(ref path), &Some(ref cookie_path)) = (url.serialize_path(), &self.cookie.path) { - if !Cookie::path_match(path, cookie_path) { + if let Some(ref cookie_path) = self.cookie.path { + if !Cookie::path_match(url.path(), cookie_path) { return false; } } - if self.cookie.secure && url.scheme != "https" { + if self.cookie.secure && url.scheme() != "https" { return false; } if self.cookie.httponly && source == CookieSource::NonHTTP { diff --git a/components/net/cookie_storage.rs b/components/net/cookie_storage.rs index 4179d3ceda7..092cdd4882f 100644 --- a/components/net/cookie_storage.rs +++ b/components/net/cookie_storage.rs @@ -7,16 +7,20 @@ use cookie::Cookie; use net_traits::CookieSource; +use rustc_serialize::{Encodable, Encoder}; use std::cmp::Ordering; use url::Url; +#[derive(Clone, RustcDecodable, RustcEncodable)] pub struct CookieStorage { + version: u32, cookies: Vec<Cookie> } impl CookieStorage { pub fn new() -> CookieStorage { CookieStorage { + version: 1, cookies: Vec::new() } } diff --git a/components/net/data_loader.rs b/components/net/data_loader.rs index 50452302627..4e331747c21 100644 --- a/components/net/data_loader.rs +++ b/components/net/data_loader.rs @@ -6,13 +6,12 @@ use hyper::mime::{Mime, TopLevel, SubLevel, Attr, Value}; use mime_classifier::MIMEClassifier; use net_traits::LoadConsumer; use net_traits::ProgressMsg::{Payload, Done}; -use net_traits::{LoadData, Metadata}; +use net_traits::{LoadData, Metadata, NetworkError}; use resource_thread::{CancellationListener, send_error, start_sending_sniffed_opt}; use rustc_serialize::base64::FromBase64; use std::sync::Arc; -use url::SchemeData; -use url::Url; use url::percent_encoding::percent_decode; +use url::{Position, Url}; pub fn factory(load_data: LoadData, senders: LoadConsumer, @@ -33,58 +32,42 @@ pub enum DecodeError { pub type DecodeData = (Mime, Vec<u8>); pub fn decode(url: &Url) -> Result<DecodeData, DecodeError> { - assert!(&*url.scheme == "data"); + assert!(url.scheme() == "data"); // Split out content type and data. - let mut scheme_data = match url.scheme_data { - SchemeData::NonRelative(ref scheme_data) => scheme_data.clone(), - _ => panic!("Expected a non-relative scheme URL."), - }; - match url.query { - Some(ref query) => { - scheme_data.push_str("?"); - scheme_data.push_str(query); - }, - None => () - } - let parts: Vec<&str> = scheme_data.splitn(2, ',').collect(); + let parts: Vec<&str> = url[Position::BeforePath..Position::AfterQuery].splitn(2, ',').collect(); if parts.len() != 2 { return Err(DecodeError::InvalidDataUri); } // ";base64" must come at the end of the content type, per RFC 2397. // rust-http will fail to parse it because there's no =value part. - let mut is_base64 = false; - let mut ct_str = parts[0].to_owned(); - if ct_str.ends_with(";base64") { - is_base64 = true; - let end_index = ct_str.len() - 7; - ct_str.truncate(end_index); - } - if ct_str.starts_with(";charset=") { - ct_str = format!("text/plain{}", ct_str); + let mut ct_str = parts[0]; + let is_base64 = ct_str.ends_with(";base64"); + if is_base64 { + ct_str = &ct_str[..ct_str.len() - ";base64".len()]; } + let ct_str = if ct_str.starts_with(";charset=") { + format!("text/plain{}", ct_str) + } else { + ct_str.to_owned() + }; - // Parse the content type using rust-http. - // FIXME: this can go into an infinite loop! (rust-http #25) - let mut content_type: Option<Mime> = ct_str.parse().ok(); - if content_type == None { - content_type = Some(Mime(TopLevel::Text, SubLevel::Plain, - vec!((Attr::Charset, Value::Ext("US-ASCII".to_owned()))))); - } + let content_type = ct_str.parse().unwrap_or_else(|_| { + Mime(TopLevel::Text, SubLevel::Plain, + vec![(Attr::Charset, Value::Ext("US-ASCII".to_owned()))]) + }); - let bytes = percent_decode(parts[1].as_bytes()); - let bytes = if is_base64 { + let mut bytes = percent_decode(parts[1].as_bytes()).collect::<Vec<_>>(); + if is_base64 { // FIXME(#2909): It’s unclear what to do with non-alphabet characters, // but Acid 3 apparently depends on spaces being ignored. - let bytes = bytes.into_iter().filter(|&b| b != ' ' as u8).collect::<Vec<u8>>(); + bytes = bytes.into_iter().filter(|&b| b != ' ' as u8).collect::<Vec<u8>>(); match bytes.from_base64() { Err(..) => return Err(DecodeError::NonBase64DataUri), - Ok(data) => data, + Ok(data) => bytes = data, } - } else { - bytes - }; - Ok((content_type.unwrap(), bytes)) + } + Ok((content_type, bytes)) } pub fn load(load_data: LoadData, @@ -110,7 +93,9 @@ pub fn load(load_data: LoadData, let _ = chan.send(Done(Ok(()))); } }, - Err(DecodeError::InvalidDataUri) => send_error(url, "invalid data uri".to_owned(), start_chan), - Err(DecodeError::NonBase64DataUri) => send_error(url, "non-base64 data uri".to_owned(), start_chan), + Err(DecodeError::InvalidDataUri) => + send_error(url, NetworkError::Internal("invalid data uri".to_owned()), start_chan), + Err(DecodeError::NonBase64DataUri) => + send_error(url, NetworkError::Internal("non-base64 data uri".to_owned()), start_chan), } } diff --git a/components/net/fetch/methods.rs b/components/net/fetch/methods.rs index 76140b1245f..479c9bc9951 100644 --- a/components/net/fetch/methods.rs +++ b/components/net/fetch/methods.rs @@ -26,8 +26,7 @@ use std::iter::FromIterator; use std::rc::Rc; use std::thread; use unicase::UniCase; -use url::idna::domain_to_ascii; -use url::{Origin as UrlOrigin, OpaqueOrigin, Url, UrlParser, whatwg_scheme_type_mapper}; +use url::{Origin as UrlOrigin, Url}; use util::thread::spawn_named; pub fn fetch_async(request: Request, listener: Box<AsyncFetchListener + Send>) { @@ -115,7 +114,7 @@ fn main_fetch(request: Rc<Request>, cors_flag: bool, recursive_flag: bool) -> Re // Step 2 if request.local_urls_only { - match &*request.current_url().scheme { + match request.current_url().scheme() { "about" | "blob" | "data" | "filesystem" => (), // Ok, the URL is local. _ => response = Some(Response::network_error()) } @@ -153,8 +152,8 @@ fn main_fetch(request: Rc<Request>, cors_flag: bool, recursive_flag: bool) -> Re }; if (same_origin && !cors_flag ) || - (current_url.scheme == "data" && request.same_origin_data.get()) || - current_url.scheme == "about" || + (current_url.scheme() == "data" && request.same_origin_data.get()) || + current_url.scheme() == "about" || request.mode == RequestMode::Navigate { basic_fetch(request.clone()) @@ -166,7 +165,7 @@ fn main_fetch(request: Rc<Request>, cors_flag: bool, recursive_flag: bool) -> Re request.response_tainting.set(ResponseTainting::Opaque); basic_fetch(request.clone()) - } else if current_url.scheme != "http" && current_url.scheme != "https" { + } else if !matches!(current_url.scheme(), "http" | "https") { Response::network_error() } else if request.use_cors_preflight || @@ -253,10 +252,7 @@ fn main_fetch(request: Rc<Request>, cors_flag: bool, recursive_flag: bool) -> Re } // Step 17 - if request.body.borrow().is_some() && match &*request.current_url().scheme { - "http" | "https" => true, - _ => false } - { + if request.body.borrow().is_some() && matches!(request.current_url().scheme(), "http" | "https") { // TODO queue a fetch task on request to process end-of-file } @@ -287,20 +283,14 @@ fn main_fetch(request: Rc<Request>, cors_flag: bool, recursive_flag: bool) -> Re fn basic_fetch(request: Rc<Request>) -> Response { let url = request.current_url(); - let scheme = url.scheme.clone(); - match &*scheme { + match url.scheme() { - "about" => { - match url.non_relative_scheme_data() { - Some(s) if &*s == "blank" => { - let mut response = Response::new(); - response.headers.set(ContentType(mime!(Text / Html; Charset = Utf8))); - *response.body.lock().unwrap() = ResponseBody::Done(vec![]); - response - }, - _ => Response::network_error() - } + "about" if url.path() == "blank" => { + let mut response = Response::new(); + response.headers.set(ContentType(mime!(Text / Html; Charset = Utf8))); + *response.body.lock().unwrap() = ResponseBody::Done(vec![]); + response }, "http" | "https" => { @@ -535,7 +525,7 @@ fn http_redirect_fetch(request: Rc<Request>, // Step 5 let response_url = response.actual_response().url.as_ref().unwrap(); - let location_url = UrlParser::new().base_url(response_url).parse(&*location); + let location_url = response_url.join(&*location); // Step 6 let location_url = match location_url { @@ -573,7 +563,7 @@ fn http_redirect_fetch(request: Rc<Request>, // Step 12 if cors_flag && !same_origin { - *request.origin.borrow_mut() = Origin::Origin(UrlOrigin::UID(OpaqueOrigin::new())); + *request.origin.borrow_mut() = Origin::Origin(UrlOrigin::new_opaque()); } // Step 13 @@ -632,7 +622,7 @@ fn http_network_or_cache_fetch(request: Rc<Request>, Referer::NoReferer => http_request.headers.borrow_mut().set(RefererHeader("".to_owned())), Referer::RefererUrl(ref http_request_referer) => - http_request.headers.borrow_mut().set(RefererHeader(http_request_referer.serialize())), + http_request.headers.borrow_mut().set(RefererHeader(http_request_referer.to_string())), Referer::Client => // it should be impossible for referer to be anything else during fetching // https://fetch.spec.whatwg.org/#concept-request-referrer @@ -702,9 +692,9 @@ fn http_network_or_cache_fetch(request: Rc<Request>, let current_url = http_request.current_url(); - authorization_value = if includes_credentials(¤t_url) { + authorization_value = if has_credentials(¤t_url) { Some(Basic { - username: current_url.username().unwrap_or("").to_owned(), + username: current_url.username().to_owned(), password: current_url.password().map(str::to_owned) }) } else { @@ -1059,13 +1049,8 @@ fn cors_check(request: Rc<Request>, response: &Response) -> Result<(), ()> { _ => return Err(()) }; - // strings are already utf-8 encoded, so there's no need to re-encode origin for this step - match ascii_serialise_origin(&request.origin.borrow()) { - Ok(request_origin) => { - if request_origin != origin { - return Err(()); - } - }, + match *request.origin.borrow() { + Origin::Origin(ref o) if o.ascii_serialization() == origin => {}, _ => return Err(()) } @@ -1086,39 +1071,6 @@ fn cors_check(request: Rc<Request>, response: &Response) -> Result<(), ()> { Err(()) } -/// [ASCII serialisation of an origin](https://html.spec.whatwg.org/multipage/#ascii-serialisation-of-an-origin) -fn ascii_serialise_origin(origin: &Origin) -> Result<String, ()> { - - // Step 6 - match *origin { - - // Step 1 - Origin::Origin(UrlOrigin::UID(_)) => Ok("null".to_owned()), - - // Step 2 - Origin::Origin(UrlOrigin::Tuple(ref scheme, ref host, ref port)) => { - - // Step 3 - // this step is handled by the format!()s later in the function - - // Step 4 - // TODO throw a SecurityError in a meaningful way - // let host = host.as_str(); - let host = try!(domain_to_ascii(host.serialize().as_str()).or(Err(()))); - - // Step 5 - let default_port = whatwg_scheme_type_mapper(scheme).default_port(); - - if Some(*port) == default_port { - Ok(format!("{}://{}", scheme, host)) - } else { - Ok(format!("{}://{}{}", scheme, host, port)) - } - } - _ => Err(()) - } -} - fn global_user_agent() -> String { // TODO have a better useragent string const USER_AGENT_STRING: &'static str = "Servo"; @@ -1126,7 +1078,7 @@ fn global_user_agent() -> String { } fn has_credentials(url: &Url) -> bool { - !url.username().unwrap_or("").is_empty() || url.password().is_some() + !url.username().is_empty() || url.password().is_some() } fn is_no_store_cache(headers: &Headers) -> bool { @@ -1156,19 +1108,6 @@ fn is_simple_method(m: &Method) -> bool { } } -fn includes_credentials(url: &Url) -> bool { - - if url.password().is_some() { - return true - } - - if let Some(name) = url.username() { - return name.len() > 0 - } - - false -} - fn response_needs_revalidation(_response: &Response) -> bool { // TODO this function false diff --git a/components/net/file_loader.rs b/components/net/file_loader.rs index db87cb33375..300d5826edd 100644 --- a/components/net/file_loader.rs +++ b/components/net/file_loader.rs @@ -6,7 +6,7 @@ use about_loader; use mime_classifier::MIMEClassifier; use mime_guess::guess_mime_type; use net_traits::ProgressMsg::{Done, Payload}; -use net_traits::{LoadConsumer, LoadData, Metadata}; +use net_traits::{LoadConsumer, LoadData, Metadata, NetworkError}; use resource_thread::{CancellationListener, ProgressSender}; use resource_thread::{send_error, start_sending_sniffed_opt}; use std::borrow::ToOwned; @@ -44,17 +44,14 @@ fn read_block(reader: &mut File) -> Result<ReadStatus, String> { fn read_all(reader: &mut File, progress_chan: &ProgressSender, cancel_listener: &CancellationListener) -> Result<LoadResult, String> { - loop { - if cancel_listener.is_cancelled() { - let _ = progress_chan.send(Done(Err("load cancelled".to_owned()))); - return Ok(LoadResult::Cancelled); - } - + while !cancel_listener.is_cancelled() { match try!(read_block(reader)) { ReadStatus::Partial(buf) => progress_chan.send(Payload(buf)).unwrap(), ReadStatus::EOF => return Ok(LoadResult::Finished), } } + let _ = progress_chan.send(Done(Err(NetworkError::Internal("load cancelled".to_owned())))); + Ok(LoadResult::Cancelled) } fn get_progress_chan(load_data: LoadData, file_path: PathBuf, @@ -70,12 +67,12 @@ pub fn factory(load_data: LoadData, senders: LoadConsumer, classifier: Arc<MIMEClassifier>, cancel_listener: CancellationListener) { - assert!(&*load_data.url.scheme == "file"); + assert!(load_data.url.scheme() == "file"); spawn_named("file_loader".to_owned(), move || { let file_path = match load_data.url.to_file_path() { Ok(file_path) => file_path, Err(_) => { - send_error(load_data.url, "Could not parse path".to_owned(), senders); + send_error(load_data.url, NetworkError::Internal("Could not parse path".to_owned()), senders); return; }, }; @@ -87,7 +84,7 @@ pub fn factory(load_data: LoadData, // http://doc.rust-lang.org/std/fs/struct.OpenOptions.html#method.open // but, we'll go for a "file not found!" let url = Url::parse("about:not-found").unwrap(); - let load_data_404 = LoadData::new(load_data.context, url, None); + let load_data_404 = LoadData::new(load_data.context, url, None, None, None); about_loader::factory(load_data_404, senders, classifier, cancel_listener); return; } @@ -95,7 +92,7 @@ pub fn factory(load_data: LoadData, if cancel_listener.is_cancelled() { if let Ok(progress_chan) = get_progress_chan(load_data, file_path, senders, classifier, &[]) { - let _ = progress_chan.send(Done(Err("load cancelled".to_owned()))); + let _ = progress_chan.send(Done(Err(NetworkError::Internal("load cancelled".to_owned())))); } return; } @@ -119,7 +116,7 @@ pub fn factory(load_data: LoadData, } } Err(e) => { - send_error(load_data.url, e, senders); + send_error(load_data.url, NetworkError::Internal(e), senders); } } }); diff --git a/components/net/hsts.rs b/components/net/hsts.rs index 8bbecb86eb1..b64b797c754 100644 --- a/components/net/hsts.rs +++ b/components/net/hsts.rs @@ -122,13 +122,11 @@ impl HstsList { } pub fn secure_url(url: &Url) -> Url { - if &*url.scheme == "http" { + if url.scheme() == "http" { let mut secure_url = url.clone(); - secure_url.scheme = "https".to_owned(); - secure_url.relative_scheme_data_mut() - .map(|scheme_data| { - scheme_data.default_port = Some(443); - }); + secure_url.set_scheme("https").unwrap(); + // .set_port(Some(443)) would set the port to None, + // and should only be done when it was already None. secure_url } else { url.clone() diff --git a/components/net/http_loader.rs b/components/net/http_loader.rs index 5473a83fce5..fedc3196397 100644 --- a/components/net/http_loader.rs +++ b/components/net/http_loader.rs @@ -8,12 +8,11 @@ use cookie; use cookie_storage::CookieStorage; use devtools_traits::{ChromeToDevtoolsControlMsg, DevtoolsControlMsg, HttpRequest as DevtoolsHttpRequest}; use devtools_traits::{HttpResponse as DevtoolsHttpResponse, NetworkEvent}; -use file_loader; use flate2::read::{DeflateDecoder, GzDecoder}; use hsts::{HstsEntry, HstsList, secure_url}; use hyper::Error as HttpError; use hyper::client::{Pool, Request, Response}; -use hyper::header::{Accept, AcceptEncoding, ContentLength, ContentType, Host}; +use hyper::header::{Accept, AcceptEncoding, ContentLength, ContentType, Host, Referer}; use hyper::header::{Authorization, Basic}; use hyper::header::{ContentEncoding, Encoding, Header, Headers, Quality, QualityItem}; use hyper::header::{Location, SetCookie, StrictTransportSecurity, UserAgent, qitem}; @@ -24,18 +23,20 @@ use hyper::net::{Fresh, HttpsConnector, Openssl}; use hyper::status::{StatusClass, StatusCode}; use log; use mime_classifier::MIMEClassifier; -use msg::constellation_msg::{PipelineId}; +use msg::constellation_msg::{PipelineId, ReferrerPolicy}; use net_traits::ProgressMsg::{Done, Payload}; use net_traits::hosts::replace_hosts; use net_traits::response::HttpsState; -use net_traits::{CookieSource, IncludeSubdomains, LoadConsumer, LoadContext, LoadData, Metadata}; +use net_traits::{CookieSource, IncludeSubdomains, LoadConsumer, LoadContext, LoadData}; +use net_traits::{Metadata, NetworkError}; use openssl::ssl::error::{SslError, OpensslError}; use openssl::ssl::{SSL_OP_NO_SSLV2, SSL_OP_NO_SSLV3, SSL_VERIFY_PEER, SslContext, SslMethod}; -use resource_thread::{CancellationListener, send_error, start_sending_sniffed_opt, AuthCacheEntry}; +use resource_thread::{CancellationListener, send_error, start_sending_sniffed_opt, AuthCache, AuthCacheEntry}; use std::borrow::ToOwned; use std::boxed::FnBox; -use std::collections::{HashMap, HashSet}; +use std::collections::HashSet; use std::error::Error; +use std::fmt; use std::io::{self, Read, Write}; use std::sync::mpsc::Sender; use std::sync::{Arc, RwLock}; @@ -43,7 +44,7 @@ use time; use time::Tm; #[cfg(any(target_os = "macos", target_os = "linux"))] use tinyfiledialogs; -use url::Url; +use url::{Url, Position}; use util::prefs; use util::resource_files::resources_dir_path; use util::thread::spawn_named; @@ -89,7 +90,7 @@ pub fn factory(user_agent: String, Arc<MIMEClassifier>, CancellationListener) + Send> { box move |load_data: LoadData, senders, classifier, cancel_listener| { - spawn_named(format!("http_loader for {}", load_data.url.serialize()), move || { + spawn_named(format!("http_loader for {}", load_data.url), move || { load_for_consumer(load_data, senders, classifier, @@ -120,15 +121,10 @@ pub fn read_block<R: Read>(reader: &mut R) -> Result<ReadResult, ()> { } } -fn inner_url(url: &Url) -> Url { - let inner_url = url.non_relative_scheme_data().unwrap(); - Url::parse(inner_url).unwrap() -} - pub struct HttpState { pub hsts_list: Arc<RwLock<HstsList>>, pub cookie_jar: Arc<RwLock<CookieStorage>>, - pub auth_cache: Arc<RwLock<HashMap<Url, AuthCacheEntry>>>, + pub auth_cache: Arc<RwLock<AuthCache>>, } impl HttpState { @@ -136,7 +132,7 @@ impl HttpState { HttpState { hsts_list: Arc::new(RwLock::new(HstsList::new())), cookie_jar: Arc::new(RwLock::new(CookieStorage::new())), - auth_cache: Arc::new(RwLock::new(HashMap::new())), + auth_cache: Arc::new(RwLock::new(AuthCache::new())), } } } @@ -158,32 +154,15 @@ fn load_for_consumer(load_data: LoadData, match load(&load_data, &ui_provider, &http_state, devtools_chan, &factory, user_agent, &cancel_listener) { - Err(LoadError::UnsupportedScheme(url)) => { - let s = format!("{} request, but we don't support that scheme", &*url.scheme); - send_error(url, s, start_chan) - } - Err(LoadError::Connection(url, e)) => { - send_error(url, e, start_chan) - } - Err(LoadError::MaxRedirects(url, _)) => { - send_error(url, "too many redirects".to_owned(), start_chan) - } - Err(LoadError::Cors(url, msg)) | - Err(LoadError::Cancelled(url, msg)) | - Err(LoadError::InvalidRedirect(url, msg)) | - Err(LoadError::Decoding(url, msg)) => { - send_error(url, msg, start_chan) - } - Err(LoadError::Ssl(url, msg)) => { - info!("ssl validation error {}, '{}'", url.serialize(), msg); - - let mut image = resources_dir_path(); - image.push("badcert.html"); - let load_data = LoadData::new(load_data.context, Url::from_file_path(&*image).unwrap(), None); - - file_loader::factory(load_data, start_chan, classifier, cancel_listener) + Err(error) => { + match error.error { + LoadErrorType::ConnectionAborted { .. } => unreachable!(), + LoadErrorType::Ssl { .. } => send_error(error.url.clone(), + NetworkError::SslValidation(error.url), + start_chan), + _ => send_error(error.url, NetworkError::Internal(error.error.description().to_owned()), start_chan) + } } - Err(LoadError::ConnectionAborted(_)) => unreachable!(), Ok(mut load_response) => { let metadata = load_response.metadata.clone(); send_data(load_data.context, &mut load_response, start_chan, metadata, classifier, &cancel_listener) @@ -268,20 +247,16 @@ impl HttpRequestFactory for NetworkHttpRequestFactory { let error: &(Error + Send + 'static) = &**error; if let Some(&SslError::OpenSslErrors(ref errors)) = error.downcast_ref::<SslError>() { if errors.iter().any(is_cert_verify_error) { - return Err( - LoadError::Ssl(url, format!("ssl error: {:?} {:?}", - error.description(), - error.cause()))); + let msg = format!("ssl error: {:?} {:?}", error.description(), error.cause()); + return Err(LoadError::new(url, LoadErrorType::Ssl { reason: msg })); } } } let mut request = match connection { Ok(req) => req, - - Err(e) => { - return Err(LoadError::Connection(url, e.description().to_owned())) - } + Err(e) => return Err( + LoadError::new(url, LoadErrorType::Connection { reason: e.description().to_owned() })), }; *request.headers_mut() = headers; @@ -306,21 +281,22 @@ impl HttpRequest for WrappedHttpRequest { let url = self.request.url.clone(); let mut request_writer = match self.request.start() { Ok(streaming) => streaming, - Err(e) => return Err(LoadError::Connection(url, e.description().to_owned())) + Err(e) => return Err(LoadError::new(url, LoadErrorType::Connection { reason: e.description().to_owned() })), }; if let Some(ref data) = *body { if let Err(e) = request_writer.write_all(&data) { - return Err(LoadError::Connection(url, e.description().to_owned())) + return Err(LoadError::new(url, LoadErrorType::Connection { reason: e.description().to_owned() })) } } let response = match request_writer.send() { Ok(w) => w, Err(HttpError::Io(ref io_error)) if io_error.kind() == io::ErrorKind::ConnectionAborted => { - return Err(LoadError::ConnectionAborted(io_error.description().to_owned())); + let error_type = LoadErrorType::ConnectionAborted { reason: io_error.description().to_owned() }; + return Err(LoadError::new(url, error_type)); }, - Err(e) => return Err(LoadError::Connection(url, e.description().to_owned())) + Err(e) => return Err(LoadError::new(url, LoadErrorType::Connection { reason: e.description().to_owned() })), }; Ok(WrappedHttpResponse { response: response }) @@ -328,16 +304,56 @@ impl HttpRequest for WrappedHttpRequest { } #[derive(Debug)] -pub enum LoadError { - UnsupportedScheme(Url), - Connection(Url, String), - Cors(Url, String), - Ssl(Url, String), - InvalidRedirect(Url, String), - Decoding(Url, String), - MaxRedirects(Url, u32), // u32 indicates number of redirects that occurred - ConnectionAborted(String), - Cancelled(Url, String), +pub struct LoadError { + pub url: Url, + pub error: LoadErrorType, +} + +impl LoadError { + pub fn new(url: Url, error: LoadErrorType) -> LoadError { + LoadError { + url: url, + error: error, + } + } +} + +#[derive(Eq, PartialEq, Debug)] +pub enum LoadErrorType { + Cancelled, + Connection { reason: String }, + ConnectionAborted { reason: String }, + // Preflight fetch inconsistent with main fetch + CorsPreflightFetchInconsistent, + Decoding { reason: String }, + InvalidRedirect { reason: String }, + MaxRedirects(u32), // u32 indicates number of redirects that occurred + RedirectLoop, + Ssl { reason: String }, + UnsupportedScheme { scheme: String }, +} + +impl fmt::Display for LoadErrorType { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "{}", self.description()) + } +} + +impl Error for LoadErrorType { + fn description(&self) -> &str { + match *self { + LoadErrorType::Cancelled => "load cancelled", + LoadErrorType::Connection { ref reason } => reason, + LoadErrorType::ConnectionAborted { ref reason } => reason, + LoadErrorType::CorsPreflightFetchInconsistent => "preflight fetch inconsistent with main fetch", + LoadErrorType::Decoding { ref reason } => reason, + LoadErrorType::InvalidRedirect { ref reason } => reason, + LoadErrorType::MaxRedirects(_) => "too many redirects", + LoadErrorType::RedirectLoop => "redirect loop", + LoadErrorType::Ssl { ref reason } => reason, + LoadErrorType::UnsupportedScheme { .. } => "unsupported url scheme", + } + } } fn set_default_accept_encoding(headers: &mut Headers) { @@ -364,6 +380,49 @@ fn set_default_accept(headers: &mut Headers) { } } +/// https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-state-no-referrer-when-downgrade +fn no_ref_when_downgrade_header(referrer_url: Url, url: Url) -> Option<Url> { + if referrer_url.scheme() == "https" && url.scheme() != "https" { + return None; + } + return strip_url(referrer_url, false); +} + +/// https://w3c.github.io/webappsec-referrer-policy/#strip-url +fn strip_url(mut referrer_url: Url, origin_only: bool) -> Option<Url> { + if referrer_url.scheme() == "https" || referrer_url.scheme() == "http" { + referrer_url.set_username("").unwrap(); + referrer_url.set_password(None).unwrap(); + referrer_url.set_fragment(None); + if origin_only { + referrer_url.set_path(""); + referrer_url.set_query(None); + } + return Some(referrer_url); + } + return None; +} + +/// https://w3c.github.io/webappsec-referrer-policy/#determine-requests-referrer +fn determine_request_referrer(headers: &mut Headers, + referrer_policy: Option<ReferrerPolicy>, + referrer_url: Option<Url>, + url: Url) -> Option<Url> { + //TODO - algorithm step 2 not addressed + assert!(!headers.has::<Referer>()); + if let Some(ref_url) = referrer_url { + let cross_origin = ref_url.origin() != url.origin(); + return match referrer_policy { + Some(ReferrerPolicy::NoReferrer) => None, + Some(ReferrerPolicy::OriginOnly) => strip_url(ref_url, true), + Some(ReferrerPolicy::UnsafeUrl) => strip_url(ref_url, false), + Some(ReferrerPolicy::OriginWhenCrossOrigin) => strip_url(ref_url, cross_origin), + Some(ReferrerPolicy::NoRefWhenDowngrade) | None => no_ref_when_downgrade_header(ref_url, url), + }; + } + return None; +} + pub fn set_request_cookies(url: Url, headers: &mut Headers, cookie_jar: &Arc<RwLock<CookieStorage>>) { let mut cookie_jar = cookie_jar.write().unwrap(); if let Some(cookie_list) = cookie_jar.cookies_for_url(&url, CookieSource::HTTP) { @@ -402,7 +461,7 @@ fn set_cookies_from_response(url: Url, response: &HttpResponse, cookie_jar: &Arc } fn update_sts_list_from_response(url: &Url, response: &HttpResponse, hsts_list: &Arc<RwLock<HstsList>>) { - if url.scheme != "https" { + if url.scheme() != "https" { return; } @@ -456,12 +515,8 @@ impl<R: HttpResponse> StreamedResponse<R> { Some(Encoding::Gzip) => { let result = GzDecoder::new(response); match result { - Ok(response_decoding) => { - Ok(StreamedResponse::new(m, Decoder::Gzip(response_decoding))) - } - Err(err) => { - Err(LoadError::Decoding(m.final_url, err.to_string())) - } + Ok(response_decoding) => Ok(StreamedResponse::new(m, Decoder::Gzip(response_decoding))), + Err(err) => Err(LoadError::new(m.final_url, LoadErrorType::Decoding { reason: err.to_string() })), } } Some(Encoding::Deflate) => { @@ -529,12 +584,12 @@ pub fn modify_request_headers(headers: &mut Headers, url: &Url, user_agent: &str, cookie_jar: &Arc<RwLock<CookieStorage>>, - auth_cache: &Arc<RwLock<HashMap<Url, AuthCacheEntry>>>, + auth_cache: &Arc<RwLock<AuthCache>>, load_data: &LoadData) { // Ensure that the host header is set from the original url let host = Host { - hostname: url.serialize_host().unwrap(), - port: url.port_or_default() + hostname: url.host_str().unwrap().to_owned(), + port: url.port_or_known_default() }; headers.set(host); @@ -551,6 +606,13 @@ pub fn modify_request_headers(headers: &mut Headers, set_default_accept(headers); set_default_accept_encoding(headers); + if let Some(referer_val) = determine_request_referrer(headers, + load_data.referrer_policy.clone(), + load_data.referrer_url.clone(), + url.clone()) { + headers.set(Referer(referer_val.into_string())); + } + // https://fetch.spec.whatwg.org/#concept-http-network-or-cache-fetch step 11 if load_data.credentials_flag { set_request_cookies(url.clone(), headers, cookie_jar); @@ -562,13 +624,13 @@ pub fn modify_request_headers(headers: &mut Headers, fn set_auth_header(headers: &mut Headers, url: &Url, - auth_cache: &Arc<RwLock<HashMap<Url, AuthCacheEntry>>>) { + auth_cache: &Arc<RwLock<AuthCache>>) { if !headers.has::<Authorization<Basic>>() { if let Some(auth) = auth_from_url(url) { headers.set(auth); } else { - if let Some(ref auth_entry) = auth_cache.read().unwrap().get(url) { + if let Some(ref auth_entry) = auth_cache.read().unwrap().entries.get(url) { auth_from_entry(&auth_entry, headers); } } @@ -583,14 +645,14 @@ fn auth_from_entry(auth_entry: &AuthCacheEntry, headers: &mut Headers) { } fn auth_from_url(doc_url: &Url) -> Option<Authorization<Basic>> { - match doc_url.username() { - Some(username) if username != "" => { - Some(Authorization(Basic { - username: username.to_owned(), - password: Some(doc_url.password().unwrap_or("").to_owned()) - })) - }, - _ => None + let username = doc_url.username(); + if username != "" { + Some(Authorization(Basic { + username: username.to_owned(), + password: Some(doc_url.password().unwrap_or("").to_owned()) + })) + } else { + None } } @@ -670,7 +732,7 @@ pub fn obtain_response<A>(request_factory: &HttpRequestFactory<R=A>, headers.clone())); if cancel_listener.is_cancelled() { - return Err(LoadError::Cancelled(connection_url.clone(), "load cancelled".to_owned())); + return Err(LoadError::new(connection_url.clone(), LoadErrorType::Cancelled)); } let maybe_response = req.send(request_body); @@ -685,11 +747,14 @@ pub fn obtain_response<A>(request_factory: &HttpRequestFactory<R=A>, response = match maybe_response { Ok(r) => r, - Err(LoadError::ConnectionAborted(reason)) => { - debug!("connection aborted ({:?}), possibly stale, trying new connection", reason); - continue; - } - Err(e) => return Err(e), + Err(e) => { + if let LoadErrorType::ConnectionAborted { reason } = e.error { + debug!("connection aborted ({:?}), possibly stale, trying new connection", reason); + continue; + } else { + return Err(e) + } + }, }; // if no ConnectionAborted, break the loop @@ -736,40 +801,41 @@ pub fn load<A, B>(load_data: &LoadData, let mut new_auth_header: Option<Authorization<Basic>> = None; if cancel_listener.is_cancelled() { - return Err(LoadError::Cancelled(doc_url, "load cancelled".to_owned())); + return Err(LoadError::new(doc_url, LoadErrorType::Cancelled)); } // If the URL is a view-source scheme then the scheme data contains the // real URL that should be used for which the source is to be viewed. // Change our existing URL to that and keep note that we are viewing // the source rather than rendering the contents of the URL. - let viewing_source = doc_url.scheme == "view-source"; + let viewing_source = doc_url.scheme() == "view-source"; if viewing_source { - doc_url = inner_url(&load_data.url); + doc_url = Url::parse(&load_data.url[Position::BeforeUsername..]).unwrap(); } // Loop to handle redirects. loop { iters = iters + 1; - if &*doc_url.scheme == "http" && request_must_be_secured(&doc_url, &http_state.hsts_list) { + if doc_url.scheme() == "http" && request_must_be_secured(&doc_url, &http_state.hsts_list) { info!("{} is in the strict transport security list, requesting secure host", doc_url); doc_url = secure_url(&doc_url); } if iters > max_redirects { - return Err(LoadError::MaxRedirects(doc_url, iters - 1)); + return Err(LoadError::new(doc_url, LoadErrorType::MaxRedirects(iters - 1))); } - if &*doc_url.scheme != "http" && &*doc_url.scheme != "https" { - return Err(LoadError::UnsupportedScheme(doc_url)); + if !matches!(doc_url.scheme(), "http" | "https") { + let scheme = doc_url.scheme().to_owned(); + return Err(LoadError::new(doc_url, LoadErrorType::UnsupportedScheme { scheme: scheme })); } if cancel_listener.is_cancelled() { - return Err(LoadError::Cancelled(doc_url, "load cancelled".to_owned())); + return Err(LoadError::new(doc_url, LoadErrorType::Cancelled)); } - info!("requesting {}", doc_url.serialize()); + info!("requesting {}", doc_url); // Avoid automatically preserving request headers when redirects occur. // See https://bugzilla.mozilla.org/show_bug.cgi?id=401564 and @@ -822,7 +888,7 @@ pub fn load<A, B>(load_data: &LoadData, password: auth_header.password.to_owned().unwrap(), }; - http_state.auth_cache.write().unwrap().insert(doc_url.clone(), auth_entry); + http_state.auth_cache.write().unwrap().entries.insert(doc_url.clone(), auth_entry); } } @@ -832,10 +898,7 @@ pub fn load<A, B>(load_data: &LoadData, // CORS (https://fetch.spec.whatwg.org/#http-fetch, status section, point 9, 10) if let Some(ref c) = load_data.cors { if c.preflight { - return Err( - LoadError::Cors( - doc_url, - "Preflight fetch inconsistent with main fetch".to_owned())); + return Err(LoadError::new(doc_url, LoadErrorType::CorsPreflightFetchInconsistent)); } else { // XXXManishearth There are some CORS-related steps here, // but they don't seem necessary until credentials are implemented @@ -844,9 +907,8 @@ pub fn load<A, B>(load_data: &LoadData, let new_doc_url = match doc_url.join(&new_url) { Ok(u) => u, - Err(e) => { - return Err(LoadError::InvalidRedirect(doc_url, e.to_string())); - } + Err(e) => return Err( + LoadError::new(doc_url, LoadErrorType::InvalidRedirect { reason: e.to_string() })), }; // According to https://tools.ietf.org/html/rfc7231#section-6.4.2, @@ -858,7 +920,7 @@ pub fn load<A, B>(load_data: &LoadData, } if redirected_to.contains(&new_doc_url) { - return Err(LoadError::InvalidRedirect(doc_url, "redirect loop".to_owned())); + return Err(LoadError::new(doc_url, LoadErrorType::RedirectLoop)); } info!("redirecting to {}", new_doc_url); @@ -882,7 +944,7 @@ pub fn load<A, B>(load_data: &LoadData, }); metadata.headers = Some(adjusted_headers); metadata.status = Some(response.status_raw().clone()); - metadata.https_state = if doc_url.scheme == "https" { + metadata.https_state = if doc_url.scheme() == "https" { HttpsState::Modern } else { HttpsState::None @@ -921,7 +983,7 @@ fn send_data<R: Read>(context: LoadContext, loop { if cancel_listener.is_cancelled() { - let _ = progress_chan.send(Done(Err("load cancelled".to_owned()))); + let _ = progress_chan.send(Done(Err(NetworkError::Internal("load cancelled".to_owned())))); return; } diff --git a/components/net/image_cache_thread.rs b/components/net/image_cache_thread.rs index 91a0cf0dc32..3ca281761d4 100644 --- a/components/net/image_cache_thread.rs +++ b/components/net/image_cache_thread.rs @@ -10,7 +10,7 @@ use net_traits::image_cache_thread::ImageResponder; use net_traits::image_cache_thread::{ImageCacheChan, ImageCacheCommand, ImageCacheThread, ImageState}; use net_traits::image_cache_thread::{ImageCacheResult, ImageOrMetadataAvailable, ImageResponse, UsePlaceholder}; use net_traits::{AsyncResponseTarget, ControlMsg, LoadConsumer, LoadData, ResourceThread}; -use net_traits::{ResponseAction, LoadContext}; +use net_traits::{ResponseAction, LoadContext, NetworkError}; use std::borrow::ToOwned; use std::collections::HashMap; use std::collections::hash_map::Entry::{Occupied, Vacant}; @@ -44,7 +44,7 @@ struct PendingLoad { metadata: Option<ImageMetadata>, // Once loading is complete, the result of the operation. - result: Option<Result<(), String>>, + result: Option<Result<(), NetworkError>>, listeners: Vec<ImageListener>, // The url being loaded. Do not forget that this may be several Mb @@ -394,6 +394,9 @@ impl ImageCache { let result = self.get_image_or_meta_if_available(url, use_placeholder); consumer.send(result).unwrap(); } + ImageCacheCommand::StoreDecodeImage(url, image_vector) => { + self.store_decode_image(url, image_vector); + } }; None @@ -517,7 +520,7 @@ impl ImageCache { CacheResult::Miss => { // A new load request! Request the load from // the resource thread. - let load_data = LoadData::new(LoadContext::Image, (*ref_url).clone(), None); + let load_data = LoadData::new(LoadContext::Image, (*ref_url).clone(), None, None, None); let (action_sender, action_receiver) = ipc::channel().unwrap(); let response_target = AsyncResponseTarget { sender: action_sender, @@ -588,6 +591,23 @@ impl ImageCache { } } } + + fn store_decode_image(&mut self, + ref_url: Url, + loaded_bytes: Vec<u8>) { + let (cache_result, load_key, _) = self.pending_loads.get_cached(Arc::new(ref_url)); + assert!(cache_result == CacheResult::Miss); + let action = ResponseAction::DataAvailable(loaded_bytes); + let _ = self.progress_sender.send(ResourceLoadInfo { + action: action, + key: load_key, + }); + let action = ResponseAction::ResponseComplete(Ok(())); + let _ = self.progress_sender.send(ResourceLoadInfo { + action: action, + key: load_key, + }); + } } /// Create a new image cache. diff --git a/components/net/lib.rs b/components/net/lib.rs index a784485f887..90ffd0e0926 100644 --- a/components/net/lib.rs +++ b/components/net/lib.rs @@ -18,8 +18,8 @@ extern crate flate2; extern crate hyper; extern crate immeta; extern crate ipc_channel; -#[macro_use] -extern crate log; +#[macro_use] extern crate log; +#[macro_use] extern crate matches; #[macro_use] extern crate mime; extern crate mime_guess; @@ -39,6 +39,7 @@ extern crate webrender_traits; extern crate websocket; pub mod about_loader; +pub mod chrome_loader; pub mod cookie; pub mod cookie_storage; pub mod data_loader; diff --git a/components/net/resource_thread.rs b/components/net/resource_thread.rs index bb839176b14..622ac054085 100644 --- a/components/net/resource_thread.rs +++ b/components/net/resource_thread.rs @@ -3,8 +3,8 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ //! A thread that takes a URL and streams back the binary data. - use about_loader; +use chrome_loader; use cookie; use cookie_storage::CookieStorage; use data_loader; @@ -21,14 +21,21 @@ use net_traits::LoadContext; use net_traits::ProgressMsg::Done; use net_traits::{AsyncResponseTarget, Metadata, ProgressMsg, ResourceThread, ResponseAction}; use net_traits::{ControlMsg, CookieSource, LoadConsumer, LoadData, LoadResponse, ResourceId}; -use net_traits::{WebSocketCommunicate, WebSocketConnectData}; +use net_traits::{NetworkError, WebSocketCommunicate, WebSocketConnectData}; +use rustc_serialize::json; +use rustc_serialize::{Decodable, Encodable}; use std::borrow::ToOwned; use std::boxed::FnBox; use std::cell::Cell; use std::collections::HashMap; +use std::error::Error; +use std::fs::File; +use std::io::prelude::*; +use std::path::Path; use std::sync::mpsc::{Receiver, Sender, channel}; use std::sync::{Arc, RwLock}; use url::Url; +use util::opts; use util::prefs; use util::thread::spawn_named; use websocket_loader; @@ -55,11 +62,11 @@ impl ProgressSender { } } -pub fn send_error(url: Url, err: String, start_chan: LoadConsumer) { +pub fn send_error(url: Url, err: NetworkError, start_chan: LoadConsumer) { let mut metadata: Metadata = Metadata::default(url); metadata.status = None; - if let Ok(p) = start_sending_opt(start_chan, metadata) { + if let Ok(p) = start_sending_opt(start_chan, metadata, Some(err.clone())) { p.send(Done(Err(err))).unwrap(); } } @@ -107,16 +114,19 @@ pub fn start_sending_sniffed_opt(start_chan: LoadConsumer, mut metadata: Metadat metadata.content_type = Some(ContentType(Mime(mime_tp, mime_sb, vec![]))); } - start_sending_opt(start_chan, metadata) + start_sending_opt(start_chan, metadata, None) } /// For use by loaders in responding to a Load message. -fn start_sending_opt(start_chan: LoadConsumer, metadata: Metadata) -> Result<ProgressSender, ()> { +/// It takes an optional NetworkError, so that we can extract the SSL Validation errors +/// and take it to the HTML parser +fn start_sending_opt(start_chan: LoadConsumer, metadata: Metadata, + network_error: Option<NetworkError>) -> Result<ProgressSender, ()> { match start_chan { LoadConsumer::Channel(start_chan) => { let (progress_chan, progress_port) = ipc::channel().unwrap(); let result = start_chan.send(LoadResponse { - metadata: metadata, + metadata: metadata, progress_port: progress_port, }); match result { @@ -125,7 +135,13 @@ fn start_sending_opt(start_chan: LoadConsumer, metadata: Metadata) -> Result<Pro } } LoadConsumer::Listener(target) => { - target.invoke_with_listener(ResponseAction::HeadersAvailable(metadata)); + match network_error { + Some(NetworkError::SslValidation(url)) => { + let error = NetworkError::SslValidation(url); + target.invoke_with_listener(ResponseAction::HeadersAvailable(Err(error))); + } + _ => target.invoke_with_listener(ResponseAction::HeadersAvailable(Ok(metadata))), + } Ok(ProgressSender::Listener(target)) } } @@ -133,7 +149,7 @@ fn start_sending_opt(start_chan: LoadConsumer, metadata: Metadata) -> Result<Pro /// Create a ResourceThread pub fn new_resource_thread(user_agent: String, - devtools_chan: Option<Sender<DevtoolsControlMsg>>) -> ResourceThread { + devtools_chan: Option<Sender<DevtoolsControlMsg>>) -> ResourceThread { let hsts_preload = HstsList::from_servo_preload(); let (setup_chan, setup_port) = ipc::channel().unwrap(); let setup_chan_clone = setup_chan.clone(); @@ -180,12 +196,82 @@ impl ResourceChannelManager { ControlMsg::Synchronize(sender) => { let _ = sender.send(()); } - ControlMsg::Exit => break, + ControlMsg::Exit => { + if let Some(ref profile_dir) = opts::get().profile_dir { + match self.resource_manager.auth_cache.read() { + Ok(auth_cache) => write_json_to_file(&*auth_cache, profile_dir, "auth_cache.json"), + Err(_) => warn!("Error writing auth cache to disk"), + } + match self.resource_manager.cookie_jar.read() { + Ok(jar) => write_json_to_file(&*jar, profile_dir, "cookie_jar.json"), + Err(_) => warn!("Error writing cookie jar to disk"), + } + match self.resource_manager.hsts_list.read() { + Ok(hsts) => write_json_to_file(&*hsts, profile_dir, "hsts_list.json"), + Err(_) => warn!("Error writing hsts list to disk"), + } + } + break; + } + } } } } +pub fn read_json_from_file<T: Decodable>(data: &mut T, profile_dir: &str, filename: &str) { + + let path = Path::new(profile_dir).join(filename); + let display = path.display(); + + let mut file = match File::open(&path) { + Err(why) => { + warn!("couldn't open {}: {}", display, Error::description(&why)); + return; + }, + Ok(file) => file, + }; + + let mut string_buffer: String = String::new(); + match file.read_to_string(&mut string_buffer) { + Err(why) => { + panic!("couldn't read from {}: {}", display, + Error::description(&why)) + }, + Ok(_) => println!("successfully read from {}", display), + } + + match json::decode(&string_buffer) { + Ok(decoded_buffer) => *data = decoded_buffer, + Err(why) => warn!("Could not decode buffer{}", why), + } +} + +pub fn write_json_to_file<T: Encodable>(data: &T, profile_dir: &str, filename: &str) { + let json_encoded: String; + match json::encode(&data) { + Ok(d) => json_encoded = d, + Err(_) => return, + } + let path = Path::new(profile_dir).join(filename); + let display = path.display(); + + let mut file = match File::create(&path) { + Err(why) => panic!("couldn't create {}: {}", + display, + Error::description(&why)), + Ok(file) => file, + }; + + match file.write_all(json_encoded.as_bytes()) { + Err(why) => { + panic!("couldn't write to {}: {}", display, + Error::description(&why)) + }, + Ok(_) => println!("successfully wrote to {}", display), + } +} + /// The optional resources required by the `CancellationListener` pub struct CancellableResource { /// The receiver which receives a message on load cancellation @@ -227,17 +313,15 @@ impl CancellationListener { } pub fn is_cancelled(&self) -> bool { - match self.cancel_resource { - Some(ref resource) => { - match resource.cancel_receiver.try_recv() { - Ok(_) => { - self.cancel_status.set(true); - true - }, - Err(_) => self.cancel_status.get(), - } - }, - None => false, // channel doesn't exist! + let resource = match self.cancel_resource { + Some(ref resource) => resource, + None => return false, // channel doesn't exist! + }; + if resource.cancel_receiver.try_recv().is_ok() { + self.cancel_status.set(true); + true + } else { + self.cancel_status.get() } } } @@ -251,15 +335,32 @@ impl Drop for CancellationListener { } } +#[derive(RustcDecodable, RustcEncodable, Clone)] pub struct AuthCacheEntry { pub user_name: String, pub password: String, } +impl AuthCache { + + pub fn new() -> AuthCache { + AuthCache { + version: 1, + entries: HashMap::new() + } + } +} + +#[derive(RustcDecodable, RustcEncodable, Clone)] +pub struct AuthCache { + pub version: u32, + pub entries: HashMap<Url, AuthCacheEntry>, +} + pub struct ResourceManager { user_agent: String, cookie_jar: Arc<RwLock<CookieStorage>>, - auth_cache: Arc<RwLock<HashMap<Url, AuthCacheEntry>>>, + auth_cache: Arc<RwLock<AuthCache>>, mime_classifier: Arc<MIMEClassifier>, devtools_chan: Option<Sender<DevtoolsControlMsg>>, hsts_list: Arc<RwLock<HstsList>>, @@ -270,12 +371,19 @@ pub struct ResourceManager { impl ResourceManager { pub fn new(user_agent: String, - hsts_list: HstsList, + mut hsts_list: HstsList, devtools_channel: Option<Sender<DevtoolsControlMsg>>) -> ResourceManager { + let mut auth_cache = AuthCache::new(); + let mut cookie_jar = CookieStorage::new(); + if let Some(ref profile_dir) = opts::get().profile_dir { + read_json_from_file(&mut auth_cache, profile_dir, "auth_cache.json"); + read_json_from_file(&mut hsts_list, profile_dir, "hsts_list.json"); + read_json_from_file(&mut cookie_jar, profile_dir, "cookie_jar.json"); + } ResourceManager { user_agent: user_agent, - cookie_jar: Arc::new(RwLock::new(CookieStorage::new())), - auth_cache: Arc::new(RwLock::new(HashMap::new())), + cookie_jar: Arc::new(RwLock::new(cookie_jar)), + auth_cache: Arc::new(RwLock::new(auth_cache)), mime_classifier: Arc::new(MIMEClassifier::new()), devtools_chan: devtools_channel, hsts_list: Arc::new(RwLock::new(hsts_list)), @@ -324,7 +432,8 @@ impl ResourceManager { }); let cancel_listener = CancellationListener::new(cancel_resource); - let loader = match &*load_data.url.scheme { + let loader = match load_data.url.scheme() { + "chrome" => from_factory(chrome_loader::factory), "file" => from_factory(file_loader::factory), "http" | "https" | "view-source" => { let http_state = HttpState { @@ -340,12 +449,12 @@ impl ResourceManager { "data" => from_factory(data_loader::factory), "about" => from_factory(about_loader::factory), _ => { - debug!("resource_thread: no loader for scheme {}", load_data.url.scheme); - send_error(load_data.url, "no loader for scheme".to_owned(), consumer); + debug!("resource_thread: no loader for scheme {}", load_data.url.scheme()); + send_error(load_data.url, NetworkError::Internal("no loader for scheme".to_owned()), consumer); return } }; - debug!("resource_thread: loading url: {}", load_data.url.serialize()); + debug!("resource_thread: loading url: {}", load_data.url); loader.call_box((load_data, consumer, diff --git a/components/net/storage_thread.rs b/components/net/storage_thread.rs index 746cce7963c..49c65c96e19 100644 --- a/components/net/storage_thread.rs +++ b/components/net/storage_thread.rs @@ -4,10 +4,12 @@ use ipc_channel::ipc::{self, IpcReceiver, IpcSender}; use net_traits::storage_thread::{StorageThread, StorageThreadMsg, StorageType}; +use resource_thread; use std::borrow::ToOwned; use std::collections::BTreeMap; use std::collections::HashMap; use url::Url; +use util::opts; use util::thread::spawn_named; const QUOTA_SIZE_LIMIT: usize = 5 * 1024 * 1024; @@ -35,10 +37,14 @@ struct StorageManager { impl StorageManager { fn new(port: IpcReceiver<StorageThreadMsg>) -> StorageManager { + let mut local_data = HashMap::new(); + if let Some(ref profile_dir) = opts::get().profile_dir { + resource_thread::read_json_from_file(&mut local_data, profile_dir, "local_data.json"); + } StorageManager { port: port, session_data: HashMap::new(), - local_data: HashMap::new(), + local_data: local_data, } } } @@ -69,6 +75,9 @@ impl StorageManager { self.clear(sender, url, storage_type) } StorageThreadMsg::Exit => { + if let Some(ref profile_dir) = opts::get().profile_dir { + resource_thread::write_json_to_file(&self.local_data, profile_dir, "local_data.json"); + } break } } @@ -216,15 +225,6 @@ impl StorageManager { } fn origin_as_string(&self, url: Url) -> String { - let mut origin = "".to_owned(); - origin.push_str(&url.scheme); - origin.push_str("://"); - url.domain().map(|domain| origin.push_str(&domain)); - url.port().map(|port| { - origin.push_str(":"); - origin.push_str(&port.to_string()); - }); - origin.push_str("/"); - origin + url.origin().ascii_serialization() } } diff --git a/components/net/websocket_loader.rs b/components/net/websocket_loader.rs index 64408d3e9cf..24f68f12684 100644 --- a/components/net/websocket_loader.rs +++ b/components/net/websocket_loader.rs @@ -32,8 +32,8 @@ fn establish_a_websocket_connection(resource_url: &Url, net_url: (Host, String, -> WebSocketResult<(Headers, Sender<WebSocketStream>, Receiver<WebSocketStream>)> { let host = Host { - hostname: resource_url.serialize_host().unwrap(), - port: resource_url.port_or_default() + hostname: resource_url.host_str().unwrap().to_owned(), + port: resource_url.port_or_known_default(), }; let mut request = try!(Client::connect(net_url)); diff --git a/components/net_traits/Cargo.toml b/components/net_traits/Cargo.toml index d8cdd4213f0..835c282e3fe 100644 --- a/components/net_traits/Cargo.toml +++ b/components/net_traits/Cargo.toml @@ -23,11 +23,11 @@ path = "../plugins" [dependencies] heapsize = "0.3.0" heapsize_plugin = "0.1.2" -hyper = { version = "0.8", features = [ "serde-serialization" ] } +hyper = { version = "0.9", features = [ "serde-serialization" ] } image = "0.9" lazy_static = "0.1.15" log = "0.3.5" serde = "0.7" serde_macros = "0.7" -url = {version = "0.5.7", features = ["heap_size"]} -websocket = "0.16.1" +url = {version = "1.0.0", features = ["heap_size"]} +websocket = "0.17" diff --git a/components/net_traits/hosts.rs b/components/net_traits/hosts.rs index 25e4ba32091..dc06d94529b 100644 --- a/components/net_traits/hosts.rs +++ b/components/net_traits/hosts.rs @@ -8,14 +8,14 @@ use std::collections::HashMap; use std::env; use std::fs::File; use std::io::{BufReader, Read}; -use std::net::{Ipv4Addr, Ipv6Addr}; +use std::net::IpAddr; use url::Url; lazy_static! { - static ref HOST_TABLE: Option<HashMap<String, String>> = create_host_table(); + static ref HOST_TABLE: Option<HashMap<String, IpAddr>> = create_host_table(); } -fn create_host_table() -> Option<HashMap<String, String>> { +fn create_host_table() -> Option<HashMap<String, IpAddr>> { //TODO: handle bad file path let path = match env::var("HOST_FILE") { Ok(host_file_path) => host_file_path, @@ -36,21 +36,18 @@ fn create_host_table() -> Option<HashMap<String, String>> { return Some(parse_hostsfile(&lines)); } -pub fn parse_hostsfile(hostsfile_content: &str) -> HashMap<String, String> { +pub fn parse_hostsfile(hostsfile_content: &str) -> HashMap<String, IpAddr> { let mut host_table = HashMap::new(); for line in hostsfile_content.split('\n') { let ip_host: Vec<&str> = line.trim().split(|c: char| c == ' ' || c == '\t').collect(); if ip_host.len() > 1 { - if ip_host[0].parse::<Ipv4Addr>().is_err() && ip_host[0].parse::<Ipv6Addr>().is_err() { - continue - } - let address = ip_host[0].to_owned(); - - for token in ip_host.iter().skip(1) { - if token.as_bytes()[0] == b'#' { - break; + if let Ok(address) = ip_host[0].parse::<IpAddr>() { + for token in ip_host.iter().skip(1) { + if token.as_bytes()[0] == b'#' { + break; + } + host_table.insert((*token).to_owned(), address); } - host_table.insert((*token).to_owned(), address.clone()); } } } @@ -63,12 +60,11 @@ pub fn replace_hosts(url: &Url) -> Url { }) } -pub fn host_replacement(host_table: &HashMap<String, String>, +pub fn host_replacement(host_table: &HashMap<String, IpAddr>, url: &Url) -> Url { - url.domain().and_then(|domain| - host_table.get(domain).map(|ip| { - let mut net_url = url.clone(); - *net_url.domain_mut().unwrap() = ip.clone(); - net_url - })).unwrap_or(url.clone()) + url.domain().and_then(|domain| host_table.get(domain).map(|ip| { + let mut new_url = url.clone(); + new_url.set_ip_host(*ip).unwrap(); + new_url + })).unwrap_or_else(|| url.clone()) } diff --git a/components/net_traits/image_cache_thread.rs b/components/net_traits/image_cache_thread.rs index 0011cab8e9f..4b17cce7309 100644 --- a/components/net_traits/image_cache_thread.rs +++ b/components/net_traits/image_cache_thread.rs @@ -92,6 +92,10 @@ pub enum ImageCacheCommand { /// state and but its metadata has been made available, it will be sent as a response. GetImageOrMetadataIfAvailable(Url, UsePlaceholder, IpcSender<Result<ImageOrMetadataAvailable, ImageState>>), + /// Instruct the cache to store this data as a newly-complete network request and continue + /// decoding the result into pixel data + StoreDecodeImage(Url, Vec<u8>), + /// Clients must wait for a response before shutting down the ResourceThread Exit(IpcSender<()>), } @@ -157,6 +161,14 @@ impl ImageCacheThread { receiver.recv().unwrap() } + /// Decode the given image bytes and cache the result for the given URL. + pub fn store_complete_image_bytes(&self, + url: Url, + image_data: Vec<u8>) { + let msg = ImageCacheCommand::StoreDecodeImage(url, image_data); + self.chan.send(msg).unwrap(); + } + /// Shutdown the image cache thread. pub fn exit(&self) { let (response_chan, response_port) = ipc::channel().unwrap(); @@ -164,4 +176,3 @@ impl ImageCacheThread { response_port.recv().unwrap(); } } - diff --git a/components/net_traits/lib.rs b/components/net_traits/lib.rs index 819d0a80335..4fea45a3a43 100644 --- a/components/net_traits/lib.rs +++ b/components/net_traits/lib.rs @@ -17,6 +17,7 @@ extern crate heapsize; extern crate hyper; extern crate image as piston_image; extern crate ipc_channel; +#[allow(unused_extern_crates)] #[macro_use] extern crate lazy_static; #[macro_use] @@ -32,7 +33,7 @@ use hyper::http::RawStatus; use hyper::method::Method; use hyper::mime::{Attr, Mime}; use ipc_channel::ipc::{self, IpcReceiver, IpcSender}; -use msg::constellation_msg::{PipelineId}; +use msg::constellation_msg::{PipelineId, ReferrerPolicy}; use serde::{Deserializer, Serializer}; use std::sync::mpsc::Sender; use std::thread; @@ -87,10 +88,18 @@ pub struct LoadData { // https://fetch.spec.whatwg.org/#concept-http-fetch step 4.3 pub credentials_flag: bool, pub context: LoadContext, + /// The policy and referring URL for the originator of this request + pub referrer_policy: Option<ReferrerPolicy>, + pub referrer_url: Option<Url>, + } impl LoadData { - pub fn new(context: LoadContext, url: Url, id: Option<PipelineId>) -> LoadData { + pub fn new(context: LoadContext, + url: Url, + id: Option<PipelineId>, + referrer_policy: Option<ReferrerPolicy>, + referrer_url: Option<Url>) -> LoadData { LoadData { url: url, method: Method::Get, @@ -100,7 +109,9 @@ impl LoadData { cors: None, pipeline_id: id, credentials_flag: true, - context: context + context: context, + referrer_policy: referrer_policy, + referrer_url: referrer_url } } } @@ -113,13 +124,13 @@ pub trait AsyncFetchListener { /// A listener for asynchronous network events. Cancelling the underlying request is unsupported. pub trait AsyncResponseListener { /// The response headers for a request have been received. - fn headers_available(&mut self, metadata: Metadata); + fn headers_available(&mut self, metadata: Result<Metadata, NetworkError>); /// A portion of the response body has been received. This data is unavailable after /// this method returned, and must be stored accordingly. fn data_available(&mut self, payload: Vec<u8>); /// The response is complete. If the provided status is an Err value, there is no guarantee /// that the response body was completely read. - fn response_complete(&mut self, status: Result<(), String>); + fn response_complete(&mut self, status: Result<(), NetworkError>); } /// Data for passing between threads/processes to indicate a particular action to @@ -127,11 +138,11 @@ pub trait AsyncResponseListener { #[derive(Deserialize, Serialize)] pub enum ResponseAction { /// Invoke headers_available - HeadersAvailable(Metadata), + HeadersAvailable(Result<Metadata, NetworkError>), /// Invoke data_available DataAvailable(Vec<u8>), /// Invoke response_complete - ResponseComplete(Result<(), String>) + ResponseComplete(Result<(), NetworkError>) } impl ResponseAction { @@ -234,6 +245,8 @@ pub struct PendingAsyncLoad { pipeline: Option<PipelineId>, guard: PendingLoadGuard, context: LoadContext, + referrer_policy: Option<ReferrerPolicy>, + referrer_url: Option<Url>, } struct PendingLoadGuard { @@ -255,21 +268,28 @@ impl Drop for PendingLoadGuard { } impl PendingAsyncLoad { - pub fn new(context: LoadContext, resource_thread: ResourceThread, url: Url, pipeline: Option<PipelineId>) + pub fn new(context: LoadContext, + resource_thread: ResourceThread, + url: Url, + pipeline: Option<PipelineId>, + referrer_policy: Option<ReferrerPolicy>, + referrer_url: Option<Url>) -> PendingAsyncLoad { PendingAsyncLoad { resource_thread: resource_thread, url: url, pipeline: pipeline, guard: PendingLoadGuard { loaded: false, }, - context: context + context: context, + referrer_policy: referrer_policy, + referrer_url: referrer_url } } /// Initiate the network request associated with this pending load, using the provided target. pub fn load_async(mut self, listener: AsyncResponseTarget) { self.guard.neuter(); - let load_data = LoadData::new(self.context, self.url, self.pipeline); + let load_data = LoadData::new(self.context, self.url, self.pipeline, self.referrer_policy, self.referrer_url); let consumer = LoadConsumer::Listener(listener); self.resource_thread.send(ControlMsg::Load(load_data, consumer, None)).unwrap(); } @@ -376,7 +396,7 @@ pub enum ProgressMsg { /// Binary data - there may be multiple of these Payload(Vec<u8>), /// Indicates loading is complete, either successfully or not - Done(Result<(), String>) + Done(Result<(), NetworkError>), } /// Convenience function for synchronously loading a whole resource. @@ -384,9 +404,9 @@ pub fn load_whole_resource(context: LoadContext, resource_thread: &ResourceThread, url: Url, pipeline_id: Option<PipelineId>) - -> Result<(Metadata, Vec<u8>), String> { + -> Result<(Metadata, Vec<u8>), NetworkError> { let (start_chan, start_port) = ipc::channel().unwrap(); - resource_thread.send(ControlMsg::Load(LoadData::new(context, url, pipeline_id), + resource_thread.send(ControlMsg::Load(LoadData::new(context, url, pipeline_id, None, None), LoadConsumer::Channel(start_chan), None)).unwrap(); let response = start_port.recv().unwrap(); @@ -413,3 +433,13 @@ pub enum ConstellationMsg { /// Queries whether a pipeline or its ancestors are private IsPrivate(PipelineId, Sender<bool>), } + +/// Network errors that have to be exported out of the loaders +#[derive(Clone, PartialEq, Eq, Debug, Deserialize, Serialize, HeapSizeOf)] +pub enum NetworkError { + /// Could be any of the internal errors, like unsupported scheme, load + /// cancellation, connection errors, etc. + Internal(String), + /// SSL validation error that has to be handled in the HTML parser + SslValidation(Url), +} diff --git a/components/net_traits/request.rs b/components/net_traits/request.rs index 5c0f7ec2200..e02529263c5 100644 --- a/components/net_traits/request.rs +++ b/components/net_traits/request.rs @@ -241,7 +241,7 @@ impl Request { } pub fn current_url_string(&self) -> String { - self.url_list.borrow().last().unwrap().serialize() + self.url_list.borrow().last().unwrap().to_string() } pub fn is_navigation_request(&self) -> bool { diff --git a/components/plugins/lib.rs b/components/plugins/lib.rs index a2babd3bfab..9ee553145a5 100644 --- a/components/plugins/lib.rs +++ b/components/plugins/lib.rs @@ -39,7 +39,7 @@ pub mod lints; /// Autogenerates implementations of Reflectable on DOM structs pub mod reflector; /// Utilities for writing plugins -pub mod utils; +mod utils; #[plugin_registrar] pub fn plugin_registrar(reg: &mut Registry) { @@ -63,5 +63,5 @@ fn register_clippy(reg: &mut Registry) { ::clippy::plugin_registrar(reg); } #[cfg(not(feature = "clippy"))] -fn register_clippy(reg: &mut Registry) { +fn register_clippy(_reg: &mut Registry) { } diff --git a/components/plugins/lints/transmute_type.rs b/components/plugins/lints/transmute_type.rs index 8f9f4d7ce6b..ef2806f5f2f 100644 --- a/components/plugins/lints/transmute_type.rs +++ b/components/plugins/lints/transmute_type.rs @@ -28,8 +28,8 @@ impl LateLintPass for TransmutePass { match expr.node { hir::ExprPath(_, ref path) => { if path.segments.last() - .map_or(false, |ref segment| segment.identifier.name.as_str() == "transmute") - && args.len() == 1 { + .map_or(false, |ref segment| segment.identifier.name.as_str() == "transmute") && + args.len() == 1 { let tcx = cx.tcx; cx.span_lint(TRANSMUTE_TYPE_LINT, ex.span, &format!("Transmute to {:?} from {:?} detected", diff --git a/components/plugins/utils.rs b/components/plugins/utils.rs index b514e967d5b..3b96bedd0f1 100644 --- a/components/plugins/utils.rs +++ b/components/plugins/utils.rs @@ -3,7 +3,6 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use rustc::hir::def_id::DefId; -use rustc::hir::map as ast_map; use rustc::hir::{self, def}; use rustc::lint::{LateContext, LintContext}; use syntax::ast; @@ -73,30 +72,6 @@ pub fn match_lang_did(cx: &LateContext, did: DefId, value: &str) -> bool { }) } -// Determines if a block is in an unsafe context so that an unhelpful -// lint can be aborted. -pub fn unsafe_context(map: &ast_map::Map, id: ast::NodeId) -> bool { - match map.find(map.get_parent(id)) { - Some(ast_map::NodeImplItem(itm)) => { - match itm.node { - hir::ImplItemKind::Method(ref sig, _) => sig.unsafety == hir::Unsafety::Unsafe, - _ => false - } - }, - Some(ast_map::NodeItem(itm)) => { - match itm.node { - hir::ItemFn(_, style, _, _, _, _) => match style { - hir::Unsafety::Unsafe => true, - _ => false, - }, - _ => false, - } - } - _ => false // There are probably a couple of other unsafe cases we don't care to lint, those will need - // to be added. - } -} - /// check if a DefId's path matches the given absolute type path /// usage e.g. with /// `match_def_path(cx, id, &["core", "option", "Option"])` diff --git a/components/profile/lib.rs b/components/profile/lib.rs index 53b7fa0ae2b..5885d85588d 100644 --- a/components/profile/lib.rs +++ b/components/profile/lib.rs @@ -10,6 +10,7 @@ #![deny(unsafe_code)] +#[allow(unused_extern_crates)] #[cfg(not(target_os = "windows"))] extern crate alloc_jemalloc; extern crate hbs_pow; diff --git a/components/range/Cargo.toml b/components/range/Cargo.toml index d9f958149ef..3ac67f10338 100644 --- a/components/range/Cargo.toml +++ b/components/range/Cargo.toml @@ -12,7 +12,7 @@ path = "lib.rs" [dependencies] heapsize = "0.3.0" heapsize_plugin = "0.1.2" -num = "0.1.24" +num-traits = "0.1.32" rustc-serialize = "0.3" serde = "0.7" serde_macros = "0.7" diff --git a/components/range/lib.rs b/components/range/lib.rs index b598f638d09..d32909c0808 100644 --- a/components/range/lib.rs +++ b/components/range/lib.rs @@ -13,7 +13,7 @@ #![deny(unsafe_code)] extern crate heapsize; -extern crate num as num_lib; +extern crate num_traits; extern crate rustc_serialize; extern crate serde; @@ -43,7 +43,7 @@ impl Int for isize { #[inline] fn max_value() -> isize { ::std::isize::MAX } #[inline] - fn from_usize(n: usize) -> Option<isize> { num_lib::NumCast::from(n) } + fn from_usize(n: usize) -> Option<isize> { num_traits::NumCast::from(n) } } impl Int for usize { #[inline] diff --git a/components/script/Cargo.toml b/components/script/Cargo.toml index 9fda41e036f..de8f2ce0f35 100644 --- a/components/script/Cargo.toml +++ b/components/script/Cargo.toml @@ -74,11 +74,11 @@ fnv = "1.0" heapsize = "0.3.0" heapsize_plugin = "0.1.2" html5ever = {version = "0.5.1", features = ["heap_size", "unstable"]} -hyper = { version = "0.8", features = [ "serde-serialization" ] } +hyper = { version = "0.9", features = [ "serde-serialization" ] } image = "0.9" libc = "0.2" log = "0.3.5" -num = "0.1.24" +num-traits = "0.1.32" offscreen_gl_context = "0.1.2" rand = "0.3" phf = "0.7.13" @@ -94,6 +94,6 @@ smallvec = "0.1" string_cache = {version = "0.2.12", features = ["heap_size", "unstable"]} time = "0.1.12" unicase = "1.0" -url = {version = "0.5.7", features = ["heap_size"]} +url = {version = "1.0.0", features = ["heap_size"]} uuid = { version = "0.2", features = ["v4"] } -websocket = "0.16.1" +websocket = "0.17" diff --git a/components/script/cors.rs b/components/script/cors.rs index da8c3db68ca..7635f2b5738 100644 --- a/components/script/cors.rs +++ b/components/script/cors.rs @@ -18,7 +18,7 @@ use hyper::header::{HeaderView, Headers}; use hyper::method::Method; use hyper::mime::{Mime, SubLevel, TopLevel}; use hyper::status::StatusClass::Success; -use net_traits::{AsyncResponseListener, Metadata, ResponseAction}; +use net_traits::{AsyncResponseListener, Metadata, NetworkError, ResponseAction}; use network_listener::{NetworkListener, PreInvoke}; use script_runtime::ScriptChan; use std::ascii::AsciiExt; @@ -26,7 +26,7 @@ use std::borrow::ToOwned; use std::sync::{Arc, Mutex}; use time::{self, Timespec, now}; use unicase::UniCase; -use url::{SchemeData, Url}; +use url::Url; use util::thread::spawn_named; /// Interface for network listeners concerned with CORS checks. Proper network requests @@ -67,14 +67,13 @@ impl CORSRequest { headers: Headers, same_origin_data_url_flag: bool) -> Result<Option<CORSRequest>, ()> { - if referer.scheme == destination.scheme && referer.host() == destination.host() && - referer.port() == destination.port() { + if referer.origin() == destination.origin() { return Ok(None); // Not cross-origin, proceed with a normal fetch } - match &*destination.scheme { + match destination.scheme() { // As per (https://fetch.spec.whatwg.org/#main-fetch 5.1.9), about URLs can be fetched // the same as a basic request. - "about" if destination.path() == Some(&["blank".to_owned()]) => Ok(None), + "about" if destination.path() == "blank" => Ok(None), // As per (https://fetch.spec.whatwg.org/#main-fetch 5.1.9), data URLs can be fetched // the same as a basic request if the request's method is GET and the // same-origin data-URL flag is set. @@ -98,11 +97,9 @@ impl CORSRequest { method: Method, headers: Headers) -> CORSRequest { - if let SchemeData::Relative(ref mut data) = referer.scheme_data { - data.path = vec![]; - } - referer.fragment = None; - referer.query = None; + referer.set_fragment(None); + referer.set_query(None); + referer.set_path(""); CORSRequest { origin: referer, destination: destination, @@ -124,13 +121,15 @@ impl CORSRequest { // This is shoe-horning the CORSReponse stuff into the rest of the async network // framework right now. It would be worth redesigning http_fetch to do this properly. impl AsyncResponseListener for CORSContext { - fn headers_available(&mut self, _metadata: Metadata) { + fn headers_available(&mut self, _metadata: Result<Metadata, NetworkError>) { + } fn data_available(&mut self, _payload: Vec<u8>) { + } - fn response_complete(&mut self, _status: Result<(), String>) { + fn response_complete(&mut self, _status: Result<(), NetworkError>) { let response = self.response.take().unwrap(); self.listener.response_available(response); } @@ -402,8 +401,10 @@ impl CORSCache { self.cleanup(); // Credentials are not yet implemented here self.0.iter_mut().find(|e| { - e.origin.scheme == request.origin.scheme && e.origin.host() == request.origin.host() && - e.origin.port() == request.origin.port() && e.url == request.destination && + e.origin.scheme() == request.origin.scheme() && + e.origin.host_str() == request.origin.host_str() && + e.origin.port() == request.origin.port() && + e.url == request.destination && e.header_or_method.match_header(header_name) }) } @@ -428,8 +429,10 @@ impl CORSCache { self.cleanup(); // Credentials are not yet implemented here self.0.iter_mut().find(|e| { - e.origin.scheme == request.origin.scheme && e.origin.host() == request.origin.host() && - e.origin.port() == request.origin.port() && e.url == request.destination && + e.origin.scheme() == request.origin.scheme() && + e.origin.host_str() == request.origin.host_str() && + e.origin.port() == request.origin.port() && + e.url == request.destination && e.header_or_method.match_method(method) }) } @@ -482,7 +485,7 @@ fn is_simple_method(m: &Method) -> bool { pub fn allow_cross_origin_request(req: &CORSRequest, headers: &Headers) -> bool { match headers.get::<AccessControlAllowOrigin>() { Some(&AccessControlAllowOrigin::Any) => true, // Not always true, depends on credentials mode - Some(&AccessControlAllowOrigin::Value(ref url)) => req.origin.serialize() == *url, + Some(&AccessControlAllowOrigin::Value(ref url)) => req.origin.as_str() == *url, Some(&AccessControlAllowOrigin::Null) | None => false, } diff --git a/components/script/document_loader.rs b/components/script/document_loader.rs index b702c6b30ed..5c835226a22 100644 --- a/components/script/document_loader.rs +++ b/components/script/document_loader.rs @@ -127,16 +127,21 @@ impl DocumentLoader { /// Create a new pending network request, which can be initiated at some point in /// the future. - pub fn prepare_async_load(&mut self, load: LoadType) -> PendingAsyncLoad { + pub fn prepare_async_load(&mut self, load: LoadType, referrer: &Document) -> PendingAsyncLoad { let context = load.to_load_context(); let url = load.url().clone(); self.add_blocking_load(load); - PendingAsyncLoad::new(context, (*self.resource_thread).clone(), url, self.pipeline) + PendingAsyncLoad::new(context, + (*self.resource_thread).clone(), + url, + self.pipeline, + referrer.get_referrer_policy(), + Some(referrer.url().clone())) } /// Create and initiate a new network request. - pub fn load_async(&mut self, load: LoadType, listener: AsyncResponseTarget) { - let pending = self.prepare_async_load(load); + pub fn load_async(&mut self, load: LoadType, listener: AsyncResponseTarget, referrer: &Document) { + let pending = self.prepare_async_load(load, referrer); pending.load_async(listener) } diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py index 74dff1cce9f..1ef2e0a4eb9 100644 --- a/components/script/dom/bindings/codegen/CodegenRust.py +++ b/components/script/dom/bindings/codegen/CodegenRust.py @@ -1897,20 +1897,24 @@ class CGInterfaceObjectJSClass(CGThing): def define(self): if self.descriptor.interface.ctor(): - constructor = CONSTRUCT_HOOK_NAME + constructorBehavior = "InterfaceConstructorBehavior::call(%s)" % CONSTRUCT_HOOK_NAME else: - constructor = "throwing_constructor" + constructorBehavior = "InterfaceConstructorBehavior::throw()" name = self.descriptor.interface.identifier.name args = { - "constructor": constructor, + "constructorBehavior": constructorBehavior, "id": name, "representation": str_to_const_array("function %s() {\\n [native code]\\n}" % name), "depth": self.descriptor.prototypeDepth } return """\ -static InterfaceObjectClass: NonCallbackInterfaceObjectClass = - NonCallbackInterfaceObjectClass::new(%(constructor)s, %(representation)s, - PrototypeList::ID::%(id)s, %(depth)s); +static InterfaceObjectClass: NonCallbackInterfaceObjectClass = unsafe { + NonCallbackInterfaceObjectClass::new( + %(constructorBehavior)s, + %(representation)s, + PrototypeList::ID::%(id)s, + %(depth)s) +}; """ % args @@ -2449,10 +2453,8 @@ if <*mut JSObject>::needs_post_barrier(prototype.ptr) { if self.descriptor.interface.hasInterfaceObject(): properties["name"] = str_to_const_array(name) if self.descriptor.interface.ctor(): - properties["constructor"] = CONSTRUCT_HOOK_NAME properties["length"] = methodLength(self.descriptor.interface.ctor()) else: - properties["constructor"] = "throwing_constructor" properties["length"] = 0 if self.descriptor.interface.parent: parentName = toBindingNamespace(self.descriptor.getParentName()) @@ -5400,9 +5402,9 @@ class CGBindingRoot(CGThing): 'js::rust::{GCMethods, define_methods, define_properties}', 'dom::bindings', 'dom::bindings::global::{GlobalRef, global_root_from_object, global_root_from_reflector}', - 'dom::bindings::interface::{NonCallbackInterfaceObjectClass, create_callback_interface_object}', - 'dom::bindings::interface::{create_interface_prototype_object, create_named_constructors}', - 'dom::bindings::interface::{create_noncallback_interface_object}', + 'dom::bindings::interface::{InterfaceConstructorBehavior, NonCallbackInterfaceObjectClass}', + 'dom::bindings::interface::{create_callback_interface_object, create_interface_prototype_object}', + 'dom::bindings::interface::{create_named_constructors, create_noncallback_interface_object}', 'dom::bindings::interface::{ConstantSpec, NonNullJSNative}', 'dom::bindings::interface::ConstantVal::{IntVal, UintVal}', 'dom::bindings::js::{JS, Root, RootedReference}', @@ -5416,8 +5418,7 @@ class CGBindingRoot(CGThing): 'dom::bindings::utils::{generic_method, generic_setter, get_array_index_from_id}', 'dom::bindings::utils::{get_dictionary_property, get_property_on_prototype}', 'dom::bindings::utils::{get_proto_or_iface_array, has_property_on_prototype}', - 'dom::bindings::utils::{is_platform_object, resolve_global, set_dictionary_property}', - 'dom::bindings::utils::{throwing_constructor, trace_global}', + 'dom::bindings::utils::{is_platform_object, resolve_global, set_dictionary_property, trace_global}', 'dom::bindings::trace::{JSTraceable, RootedTraceable}', 'dom::bindings::callback::{CallbackContainer,CallbackInterface,CallbackFunction}', 'dom::bindings::callback::{CallSetup,ExceptionHandling}', diff --git a/components/script/dom/bindings/conversions.rs b/components/script/dom/bindings/conversions.rs index 6db0d08af4d..baeb0a1f92b 100644 --- a/components/script/dom/bindings/conversions.rs +++ b/components/script/dom/bindings/conversions.rs @@ -53,7 +53,7 @@ use js::jsapi::{Type}; use js::jsval::{ObjectValue, StringValue}; use js::rust::ToString; use libc; -use num::Float; +use num_traits::Float; use std::{ptr, mem, slice}; pub use util::non_geckolib::{StringificationBehavior, jsstring_to_str}; use util::str::DOMString; @@ -253,12 +253,12 @@ pub unsafe fn get_dom_class(obj: *mut JSObject) -> Result<&'static DOMClass, ()> let clasp = JS_GetClass(obj); if is_dom_class(&*clasp) { - debug!("plain old dom object"); + trace!("plain old dom object"); let domjsclass: *const DOMJSClass = clasp as *const DOMJSClass; return Ok(&(&*domjsclass).dom_class); } if is_dom_proxy(obj) { - debug!("proxy dom object"); + trace!("proxy dom object"); let dom_class: *const DOMClass = GetProxyHandlerExtra(obj) as *const DOMClass; return Ok(&*dom_class); } diff --git a/components/script/dom/bindings/interface.rs b/components/script/dom/bindings/interface.rs index 7db3c6e17c4..f41941f08b0 100644 --- a/components/script/dom/bindings/interface.rs +++ b/components/script/dom/bindings/interface.rs @@ -7,10 +7,11 @@ use dom::bindings::codegen::PrototypeList; use dom::bindings::conversions::get_dom_class; use dom::bindings::utils::get_proto_or_iface_array; +use js::error::throw_type_error; use js::glue::UncheckedUnwrapObject; use js::jsapi::{Class, ClassExtension, ClassSpec, GetGlobalForObjectCrossCompartment}; use js::jsapi::{HandleObject, HandleValue, JSClass, JSContext, JSFunctionSpec}; -use js::jsapi::{JSPropertySpec, JSString, JS_DefineProperty1, JS_DefineProperty2}; +use js::jsapi::{JSNative, JSPropertySpec, JSString, JS_DefineProperty1, JS_DefineProperty2}; use js::jsapi::{JS_DefineProperty4, JS_GetClass, JS_GetFunctionObject, JS_GetPrototype}; use js::jsapi::{JS_InternString, JS_LinkConstructorAndPrototype, JS_NewFunction, JS_NewObject}; use js::jsapi::{JS_NewObjectWithUniqueType, JS_NewStringCopyZ, JS_DefineProperty}; @@ -93,10 +94,6 @@ unsafe extern "C" fn fun_to_string_hook(cx: *mut JSContext, ret } -/// A constructor class hook. -pub type ConstructorClassHook = - unsafe extern "C" fn(cx: *mut JSContext, argc: u32, vp: *mut Value) -> bool; - /// The class of a non-callback interface object. #[derive(Copy, Clone)] pub struct NonCallbackInterfaceObjectClass { @@ -114,8 +111,8 @@ unsafe impl Sync for NonCallbackInterfaceObjectClass {} impl NonCallbackInterfaceObjectClass { /// Create a new `NonCallbackInterfaceObjectClass` structure. - pub const fn new( - constructor: ConstructorClassHook, + pub const unsafe fn new( + constructor_behavior: InterfaceConstructorBehavior, string_rep: &'static [u8], proto_id: PrototypeList::ID, proto_depth: u16) @@ -132,8 +129,8 @@ impl NonCallbackInterfaceObjectClass { resolve: None, convert: None, finalize: None, - call: Some(constructor), - construct: Some(constructor), + call: constructor_behavior.call, + construct: constructor_behavior.construct, hasInstance: Some(has_instance_hook), trace: None, spec: ClassSpec { @@ -183,6 +180,34 @@ impl NonCallbackInterfaceObjectClass { } } +/// A constructor class hook. +pub type ConstructorClassHook = + unsafe extern "C" fn(cx: *mut JSContext, argc: u32, vp: *mut Value) -> bool; + +/// The constructor behavior of a non-callback interface object. +pub struct InterfaceConstructorBehavior { + call: JSNative, + construct: JSNative, +} + +impl InterfaceConstructorBehavior { + /// An interface constructor that unconditionally throws a type error. + pub const fn throw() -> InterfaceConstructorBehavior { + InterfaceConstructorBehavior { + call: Some(invalid_constructor), + construct: Some(invalid_constructor), + } + } + + /// An interface constructor that calls a native Rust function. + pub const fn call(hook: ConstructorClassHook) -> InterfaceConstructorBehavior { + InterfaceConstructorBehavior { + call: Some(non_new_constructor), + construct: Some(hook), + } + } +} + /// Create and define the interface object of a callback interface. pub unsafe fn create_callback_interface_object( cx: *mut JSContext, @@ -380,3 +405,21 @@ unsafe fn define_on_global_object( 0, None, None)); } + +unsafe extern "C" fn invalid_constructor( + cx: *mut JSContext, + _argc: libc::c_uint, + _vp: *mut JSVal) + -> bool { + throw_type_error(cx, "Illegal constructor."); + false +} + +unsafe extern "C" fn non_new_constructor( + cx: *mut JSContext, + _argc: libc::c_uint, + _vp: *mut JSVal) + -> bool { + throw_type_error(cx, "This constructor needs to be called with `new`."); + false +} diff --git a/components/script/dom/bindings/num.rs b/components/script/dom/bindings/num.rs index 972f90389d1..fde24d08421 100644 --- a/components/script/dom/bindings/num.rs +++ b/components/script/dom/bindings/num.rs @@ -4,7 +4,7 @@ //! The `Finite<T>` struct. -use num::Float; +use num_traits::Float; use std::ops::Deref; /// Encapsulates the IDL restricted float type. diff --git a/components/script/dom/bindings/trace.rs b/components/script/dom/bindings/trace.rs index 50c3fbf682f..7cbfc19ac44 100644 --- a/components/script/dom/bindings/trace.rs +++ b/components/script/dom/bindings/trace.rs @@ -56,12 +56,12 @@ use js::rust::Runtime; use layout_interface::{LayoutChan, LayoutRPC}; use libc; use msg::constellation_msg::ConstellationChan; -use msg::constellation_msg::{PipelineId, SubpageId, WindowSizeData}; -use net_traits::Metadata; +use msg::constellation_msg::{PipelineId, SubpageId, WindowSizeData, WindowSizeType, ReferrerPolicy}; use net_traits::image::base::{Image, ImageMetadata}; use net_traits::image_cache_thread::{ImageCacheChan, ImageCacheThread}; use net_traits::response::HttpsState; use net_traits::storage_thread::StorageType; +use net_traits::{Metadata, NetworkError}; use offscreen_gl_context::GLLimits; use profile_traits::mem::ProfilerChan as MemProfilerChan; use profile_traits::time::ProfilerChan as TimeProfilerChan; @@ -287,13 +287,14 @@ no_jsmanaged_fields!(Size2D<T>); no_jsmanaged_fields!(Arc<T>); no_jsmanaged_fields!(Image, ImageMetadata, ImageCacheChan, ImageCacheThread); no_jsmanaged_fields!(Metadata); +no_jsmanaged_fields!(NetworkError); no_jsmanaged_fields!(Atom, Namespace, QualName); no_jsmanaged_fields!(Trusted<T: Reflectable>); no_jsmanaged_fields!(PropertyDeclarationBlock); no_jsmanaged_fields!(HashSet<T>); // These three are interdependent, if you plan to put jsmanaged data // in one of these make sure it is propagated properly to containing structs -no_jsmanaged_fields!(SubpageId, WindowSizeData, PipelineId); +no_jsmanaged_fields!(SubpageId, WindowSizeData, WindowSizeType, PipelineId); no_jsmanaged_fields!(TimerEventId, TimerSource); no_jsmanaged_fields!(WorkerId); no_jsmanaged_fields!(QuirksMode); @@ -324,6 +325,7 @@ no_jsmanaged_fields!(ElementSnapshot); no_jsmanaged_fields!(HttpsState); no_jsmanaged_fields!(SharedRt); no_jsmanaged_fields!(TouchpadPressurePhase); +no_jsmanaged_fields!(ReferrerPolicy); impl JSTraceable for ConstellationChan<ScriptMsg> { #[inline] diff --git a/components/script/dom/bindings/utils.rs b/components/script/dom/bindings/utils.rs index 2b4e5ee5ae0..9302bb40a09 100644 --- a/components/script/dom/bindings/utils.rs +++ b/components/script/dom/bindings/utils.rs @@ -16,7 +16,6 @@ use dom::browsingcontext; use dom::window; use heapsize::HeapSizeOf; use js; -use js::error::throw_type_error; use js::glue::{CallJitGetterOp, CallJitMethodOp, CallJitSetterOp, IsWrapper}; use js::glue::{GetCrossCompartmentWrapper, WrapperNew}; use js::glue::{RUST_FUNCTION_VALUE_TO_JITINFO, RUST_JSID_IS_INT, RUST_JSID_IS_STRING}; @@ -35,7 +34,7 @@ use js::jsval::{JSVal}; use js::jsval::{PrivateValue, UndefinedValue}; use js::rust::{GCMethods, ToString}; use js::{JS_CALLEE}; -use libc::{self, c_uint}; +use libc; use std::default::Default; use std::ffi::CString; use std::os::raw::c_void; @@ -123,16 +122,6 @@ pub fn get_proto_or_iface_array(global: *mut JSObject) -> *mut ProtoOrIfaceArray } } -/// A throwing constructor, for those interfaces that have neither -/// `NoInterfaceObject` nor `Constructor`. -pub unsafe extern "C" fn throwing_constructor(cx: *mut JSContext, - _argc: c_uint, - _vp: *mut JSVal) - -> bool { - throw_type_error(cx, "Illegal constructor."); - false -} - /// An array of *mut JSObject of size PROTO_OR_IFACE_LENGTH. pub type ProtoOrIfaceArray = [*mut JSObject; PROTO_OR_IFACE_LENGTH]; diff --git a/components/script/dom/blob.rs b/components/script/dom/blob.rs index 9c23b8f6da0..49fc47e8a68 100644 --- a/components/script/dom/blob.rs +++ b/components/script/dom/blob.rs @@ -12,7 +12,7 @@ use dom::bindings::reflector::{Reflectable, Reflector, reflect_dom_object}; use dom::bindings::trace::JSTraceable; use encoding::all::UTF_8; use encoding::types::{EncoderTrap, Encoding}; -use num::ToPrimitive; +use num_traits::ToPrimitive; use std::ascii::AsciiExt; use std::borrow::ToOwned; use std::cell::Cell; @@ -117,29 +117,28 @@ impl Blob { } // https://w3c.github.io/FileAPI/#constructorBlob - pub fn Constructor(global: GlobalRef) -> Fallible<Root<Blob>> { - Ok(Blob::new(global, Vec::new(), "")) - } - - // https://w3c.github.io/FileAPI/#constructorBlob - pub fn Constructor_(global: GlobalRef, - blobParts: Vec<BlobOrString>, - blobPropertyBag: &BlobBinding::BlobPropertyBag) - -> Fallible<Root<Blob>> { + pub fn Constructor(global: GlobalRef, + blobParts: Option<Vec<BlobOrString>>, + blobPropertyBag: &BlobBinding::BlobPropertyBag) + -> Fallible<Root<Blob>> { // TODO: accept other blobParts types - ArrayBuffer or ArrayBufferView - let bytes: Vec<u8> = blobParts.iter() - .flat_map(|bPart| { - match bPart { - &BlobOrString::String(ref s) => { - UTF_8.encode(s, EncoderTrap::Replace).unwrap() - }, - &BlobOrString::Blob(ref b) => { - b.get_data().get_bytes().to_vec() - }, - } - }) - .collect(); + let bytes: Vec<u8> = match blobParts { + None => Vec::new(), + Some(blobs) => { + blobs.iter().flat_map(|bPart| { + match bPart { + &BlobOrString::String(ref s) => { + UTF_8.encode(s, EncoderTrap::Replace).unwrap() + }, + &BlobOrString::Blob(ref b) => { + b.get_data().get_bytes().to_vec() + }, + } + }) + .collect() + } + }; let typeString = if is_ascii_printable(&blobPropertyBag.type_) { &*blobPropertyBag.type_ } else { diff --git a/components/script/dom/canvasrenderingcontext2d.rs b/components/script/dom/canvasrenderingcontext2d.rs index 492b98f0edf..36c042b4d75 100644 --- a/components/script/dom/canvasrenderingcontext2d.rs +++ b/components/script/dom/canvasrenderingcontext2d.rs @@ -39,7 +39,7 @@ use euclid::size::Size2D; use ipc_channel::ipc::{self, IpcSender}; use net_traits::image::base::PixelFormat; use net_traits::image_cache_thread::ImageResponse; -use num::{Float, ToPrimitive}; +use num_traits::{Float, ToPrimitive}; use script_traits::ScriptMsg as ConstellationMsg; use std::cell::Cell; use std::str::FromStr; @@ -486,11 +486,29 @@ impl CanvasRenderingContext2D { match color { Ok(CSSColor::RGBA(rgba)) => Ok(rgba), Ok(CSSColor::CurrentColor) => { + // TODO: https://github.com/whatwg/html/issues/1099 + // Reconsider how to calculate currentColor in a display:none canvas + // TODO: will need to check that the context bitmap mode is fixed // once we implement CanvasProxy let window = window_from_node(&*self.canvas); + let style = window.GetComputedStyle(&*self.canvas.upcast(), None); - self.parse_color(&style.GetPropertyValue(DOMString::from("color"))) + + let element_not_rendered = + !self.canvas.upcast::<Node>().is_in_doc() || + style.GetPropertyValue(DOMString::from("display")) == "none"; + + if element_not_rendered { + Ok(RGBA { + red: 0.0, + green: 0.0, + blue: 0.0, + alpha: 1.0, + }) + } else { + self.parse_color(&style.GetPropertyValue(DOMString::from("color"))) + } }, _ => Err(()) } diff --git a/components/script/dom/dedicatedworkerglobalscope.rs b/components/script/dom/dedicatedworkerglobalscope.rs index 1b2d18b18b3..bd8d1bdfd2d 100644 --- a/components/script/dom/dedicatedworkerglobalscope.rs +++ b/components/script/dom/dedicatedworkerglobalscope.rs @@ -218,7 +218,7 @@ impl DedicatedWorkerGlobalScope { parent_sender: Box<ScriptChan + Send>, own_sender: Sender<(TrustedWorkerAddress, WorkerScriptMsg)>, receiver: Receiver<(TrustedWorkerAddress, WorkerScriptMsg)>) { - let serialized_worker_url = worker_url.serialize(); + let serialized_worker_url = worker_url.to_string(); spawn_named(format!("WebWorker for {}", serialized_worker_url), move || { thread_state::initialize(SCRIPT | IN_WORKER); @@ -240,7 +240,7 @@ impl DedicatedWorkerGlobalScope { } }; - let runtime = new_rt_and_cx(); + let runtime = unsafe { new_rt_and_cx() }; *main_thread_rt.lock().unwrap() = Some(SharedRt::new(&runtime)); let (devtools_mpsc_chan, devtools_mpsc_port) = channel(); diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index d87e80b7acc..7d25e484aa3 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -68,8 +68,10 @@ use dom::node::{self, CloneChildrenFlag, Node, NodeDamage, window_from_node}; use dom::nodeiterator::NodeIterator; use dom::nodelist::NodeList; use dom::processinginstruction::ProcessingInstruction; +use dom::progressevent::ProgressEvent; use dom::range::Range; use dom::servohtmlparser::{ParserRoot, ParserRef, MutNullableParserField}; +use dom::storageevent::StorageEvent; use dom::stylesheetlist::StyleSheetList; use dom::text::Text; use dom::touch::Touch; @@ -77,6 +79,7 @@ use dom::touchevent::TouchEvent; use dom::touchlist::TouchList; use dom::treewalker::TreeWalker; use dom::uievent::UIEvent; +use dom::webglcontextevent::WebGLContextEvent; use dom::window::{ReflowReason, Window}; use encoding::EncodingRef; use encoding::all::UTF_8; @@ -88,12 +91,12 @@ use js::jsapi::{JSContext, JSObject, JSRuntime}; use layout_interface::{LayoutChan, Msg, ReflowQueryType}; use msg::constellation_msg::{ALT, CONTROL, SHIFT, SUPER}; use msg::constellation_msg::{ConstellationChan, Key, KeyModifiers, KeyState}; -use msg::constellation_msg::{PipelineId, SubpageId}; +use msg::constellation_msg::{PipelineId, ReferrerPolicy, SubpageId}; use net_traits::ControlMsg::{GetCookiesForUrl, SetCookiesForUrl}; use net_traits::CookieSource::NonHTTP; use net_traits::response::HttpsState; use net_traits::{AsyncResponseTarget, PendingAsyncLoad}; -use num::ToPrimitive; +use num_traits::ToPrimitive; use origin::Origin; use script_runtime::ScriptChan; use script_thread::{MainThreadScriptChan, MainThreadScriptMsg, Runnable}; @@ -226,6 +229,8 @@ pub struct Document { touchpad_pressure_phase: Cell<TouchpadPressurePhase>, /// The document's origin. origin: Origin, + /// https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-states + referrer_policy: Option<ReferrerPolicy>, } #[derive(JSTraceable, HeapSizeOf)] @@ -515,7 +520,7 @@ impl Document { self.GetDocumentElement() } else { // Step 3 & 4 - String::from_utf8(percent_decode(fragid.as_bytes())).ok() + percent_decode(fragid.as_bytes()).decode_utf8().ok() // Step 5 .and_then(|decoded_fragid| self.get_element_by_id(&Atom::from(decoded_fragid))) // Step 6 @@ -1326,12 +1331,12 @@ impl Document { pub fn prepare_async_load(&self, load: LoadType) -> PendingAsyncLoad { let mut loader = self.loader.borrow_mut(); - loader.prepare_async_load(load) + loader.prepare_async_load(load, self) } pub fn load_async(&self, load: LoadType, listener: AsyncResponseTarget) { let mut loader = self.loader.borrow_mut(); - loader.load_async(load, listener) + loader.load_async(load, listener, self) } pub fn finish_load(&self, load: LoadType) { @@ -1585,7 +1590,7 @@ impl LayoutDocumentHelpers for LayoutJS<Document> { /// https://url.spec.whatwg.org/#network-scheme fn url_has_network_scheme(url: &Url) -> bool { - match &*url.scheme { + match url.scheme() { "ftp" | "http" | "https" => true, _ => false, } @@ -1684,6 +1689,8 @@ impl Document { https_state: Cell::new(HttpsState::None), touchpad_pressure_phase: Cell::new(TouchpadPressurePhase::BeforeClick), origin: origin, + //TODO - setting this for now so no Referer header set + referrer_policy: Some(ReferrerPolicy::NoReferrer), } } @@ -1812,6 +1819,11 @@ impl Document { snapshot.attrs = Some(attrs); } } + + //TODO - for now, returns no-referrer for all until reading in the value + pub fn get_referrer_policy(&self) -> Option<ReferrerPolicy> { + return self.referrer_policy.clone(); + } } @@ -1844,7 +1856,7 @@ impl DocumentMethods for Document { // https://dom.spec.whatwg.org/#dom-document-url fn URL(&self) -> DOMString { - DOMString::from(self.url().serialize()) + DOMString::from(self.url().as_str()) } // https://html.spec.whatwg.org/multipage/#dom-document-activeelement @@ -1886,7 +1898,7 @@ impl DocumentMethods for Document { if let Some(host) = self.origin.host() { // Step 4. - DOMString::from(host.serialize()) + DOMString::from(host.to_string()) } else { // Step 3. DOMString::new() @@ -2154,9 +2166,9 @@ impl DocumentMethods for Document { Ok(Root::upcast(MouseEvent::new_uninitialized(&self.window))), "customevent" => Ok(Root::upcast(CustomEvent::new_uninitialized(GlobalRef::Window(&self.window)))), - "htmlevents" | "events" | "event" => + "htmlevents" | "events" | "event" | "svgevents" => Ok(Event::new_uninitialized(GlobalRef::Window(&self.window))), - "keyboardevent" | "keyevents" => + "keyboardevent" => Ok(Root::upcast(KeyboardEvent::new_uninitialized(&self.window))), "messageevent" => Ok(Root::upcast(MessageEvent::new_uninitialized(GlobalRef::Window(&self.window)))), @@ -2168,6 +2180,12 @@ impl DocumentMethods for Document { &TouchList::new(&self.window, &[]), ) )), + "webglcontextevent" => + Ok(Root::upcast(WebGLContextEvent::new_uninitialized(GlobalRef::Window(&self.window)))), + "storageevent" => + Ok(Root::upcast(StorageEvent::new_uninitialized(&self.window, self.URL()))), + "progressevent" => + Ok(Root::upcast(ProgressEvent::new_uninitialized(&self.window))), _ => Err(Error::NotSupported), } diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index e14e1af0d97..d5151dc7dfd 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -19,6 +19,8 @@ use dom::bindings::codegen::Bindings::EventBinding::EventMethods; use dom::bindings::codegen::Bindings::HTMLInputElementBinding::HTMLInputElementMethods; use dom::bindings::codegen::Bindings::HTMLTemplateElementBinding::HTMLTemplateElementMethods; use dom::bindings::codegen::Bindings::NodeBinding::NodeMethods; +use dom::bindings::codegen::Bindings::WindowBinding::WindowMethods; +use dom::bindings::codegen::Bindings::WindowBinding::{ScrollBehavior, ScrollToOptions}; use dom::bindings::codegen::UnionTypes::NodeOrString; use dom::bindings::error::{Error, ErrorResult, Fallible}; use dom::bindings::global::GlobalRef; @@ -39,6 +41,7 @@ use dom::htmlanchorelement::HTMLAnchorElement; use dom::htmlbodyelement::{HTMLBodyElement, HTMLBodyElementLayoutHelpers}; use dom::htmlbuttonelement::HTMLButtonElement; use dom::htmlcollection::HTMLCollection; +use dom::htmlelement::HTMLElement; use dom::htmlfieldsetelement::HTMLFieldSetElement; use dom::htmlfontelement::{HTMLFontElement, HTMLFontElementLayoutHelpers}; use dom::htmlhrelement::{HTMLHRElement, HTMLHRLayoutHelpers}; @@ -86,7 +89,7 @@ use string_cache::{Atom, Namespace, QualName}; use style::element_state::*; use style::error_reporting::ParseErrorReporter; use style::properties::DeclaredValue; -use style::properties::longhands::{self, background_image, border_spacing, font_family, font_size}; +use style::properties::longhands::{self, background_image, border_spacing, font_family, overflow_x, font_size}; use style::properties::{PropertyDeclaration, PropertyDeclarationBlock, parse_style_attribute}; use style::selector_impl::{NonTSPseudoClass, ServoSelectorImpl}; use style::values::CSSFloat; @@ -164,6 +167,35 @@ impl Element { document, ElementBinding::Wrap) } + + // https://drafts.csswg.org/cssom-view/#css-layout-box + // Elements that have a computed value of the display property + // that is table-column or table-column-group + // FIXME: Currently, it is assumed to be true always + fn has_css_layout_box(&self) -> bool { + true + } + + // https://drafts.csswg.org/cssom-view/#potentially-scrollable + fn potentially_scrollable(&self) -> bool { + self.has_css_layout_box() && + !self.overflow_x_is_visible() && + !self.overflow_y_is_visible() + } + + // used value of overflow-x is "visible" + fn overflow_x_is_visible(&self) -> bool { + let window = window_from_node(self); + let overflow_pair = window.overflow_query(self.upcast::<Node>().to_trusted_node_address()); + overflow_pair.x == overflow_x::computed_value::T::visible + } + + // used value of overflow-y is "visible" + fn overflow_y_is_visible(&self) -> bool { + let window = window_from_node(self); + let overflow_pair = window.overflow_query(self.upcast::<Node>().to_trusted_node_address()); + overflow_pair.y != overflow_x::computed_value::T::visible + } } #[allow(unsafe_code)] @@ -1081,7 +1113,7 @@ impl Element { // https://html.spec.whatwg.org/multipage/#reflect // XXXManishearth this doesn't handle `javascript:` urls properly match base.join(&url) { - Ok(parsed) => DOMString::from(parsed.serialize()), + Ok(parsed) => DOMString::from(parsed.into_string()), Err(_) => DOMString::from(""), } } @@ -1196,6 +1228,49 @@ impl Element { _ => Err(Error::Syntax) } } + + // https://drafts.csswg.org/cssom-view/#dom-element-scroll + pub fn scroll(&self, x_: f64, y_: f64, behavior: ScrollBehavior) { + + // Step 1.2 or 2.3 + let x = if x_.is_finite() { x_ } else { 0.0f64 }; + let y = if y_.is_finite() { y_ } else { 0.0f64 }; + + let node = self.upcast::<Node>(); + + // Step 3 + let doc = node.owner_doc(); + + // Step 4 + if !doc.is_fully_active() { + return; + } + + // Step 5 + let win = doc.DefaultView(); + + // Step 7 + if *self.root_element() == *self { + if doc.quirks_mode() != Quirks { + win.scroll(x, y, behavior); + } + + return; + } + + // Step 9 + if doc.GetBody().r() == self.downcast::<HTMLElement>() && + doc.quirks_mode() == Quirks && + !self.potentially_scrollable() { + win.scroll(x, y, behavior); + return; + } + + // Step 10 (TODO) + + // Step 11 + win.scroll_node(node.to_trusted_node_address(), x, y, behavior); + } } impl ElementMethods for Element { @@ -1260,6 +1335,11 @@ impl ElementMethods for Element { self.attr_list.or_init(|| NamedNodeMap::new(&window_from_node(self), self)) } + // https://dom.spec.whatwg.org/#dom-element-hasattributes + fn HasAttributes(&self) -> bool { + !self.attrs.borrow().is_empty() + } + // https://dom.spec.whatwg.org/#dom-element-getattributenames fn GetAttributeNames(&self) -> Vec<DOMString> { self.attrs.borrow().iter().map(|attr| attr.Name()).collect() @@ -1452,6 +1532,220 @@ impl ElementMethods for Element { rect.size.height.to_f64_px()) } + // https://drafts.csswg.org/cssom-view/#dom-element-scroll + fn Scroll(&self, options: &ScrollToOptions) { + // Step 1 + let left = options.left.unwrap_or(self.ScrollLeft()); + let top = options.top.unwrap_or(self.ScrollTop()); + self.scroll(left, top, options.parent.behavior); + } + + // https://drafts.csswg.org/cssom-view/#dom-element-scroll + fn Scroll_(&self, x: f64, y: f64) { + self.scroll(x, y, ScrollBehavior::Auto); + } + + // https://drafts.csswg.org/cssom-view/#dom-element-scrollto + fn ScrollTo(&self, options: &ScrollToOptions) { + self.Scroll(options); + } + + // https://drafts.csswg.org/cssom-view/#dom-element-scrollto + fn ScrollTo_(&self, x: f64, y: f64) { + self.Scroll_(x, y); + } + + // https://drafts.csswg.org/cssom-view/#dom-element-scrollby + fn ScrollBy(&self, options: &ScrollToOptions) { + // Step 2 + let delta_left = options.left.unwrap_or(0.0f64); + let delta_top = options.top.unwrap_or(0.0f64); + let left = self.ScrollLeft(); + let top = self.ScrollTop(); + self.scroll(left + delta_left, top + delta_top, + options.parent.behavior); + } + + // https://drafts.csswg.org/cssom-view/#dom-element-scrollby + fn ScrollBy_(&self, x: f64, y: f64) { + let left = self.ScrollLeft(); + let top = self.ScrollTop(); + self.scroll(left + x, top + y, ScrollBehavior::Auto); + } + + // https://drafts.csswg.org/cssom-view/#dom-element-scrolltop + fn ScrollTop(&self) -> f64 { + let node = self.upcast::<Node>(); + + // Step 1 + let doc = node.owner_doc(); + + // Step 2 + if !doc.is_fully_active() { + return 0.0; + } + + // Step 3 + let win = doc.DefaultView(); + + // Step 5 + if *self.root_element() == *self { + if doc.quirks_mode() == Quirks { + return 0.0; + } + + // Step 6 + return win.ScrollY() as f64; + } + + // Step 7 + if doc.GetBody().r() == self.downcast::<HTMLElement>() && + doc.quirks_mode() == Quirks && + !self.potentially_scrollable() { + return win.ScrollY() as f64; + } + + + // Step 8 + if !self.has_css_layout_box() { + return 0.0; + } + + // Step 9 + let point = node.scroll_offset(); + return point.y.abs() as f64; + } + + // https://drafts.csswg.org/cssom-view/#dom-element-scrolltop + fn SetScrollTop(&self, y_: f64) { + let behavior = ScrollBehavior::Auto; + + // Step 1, 2 + let y = if y_.is_finite() { y_ } else { 0.0f64 }; + + let node = self.upcast::<Node>(); + + // Step 3 + let doc = node.owner_doc(); + + // Step 4 + if !doc.is_fully_active() { + return; + } + + // Step 5 + let win = doc.DefaultView(); + + // Step 7 + if *self.root_element() == *self { + if doc.quirks_mode() != Quirks { + win.scroll(win.ScrollX() as f64, y, behavior); + } + + return; + } + + // Step 9 + if doc.GetBody().r() == self.downcast::<HTMLElement>() && + doc.quirks_mode() == Quirks && + !self.potentially_scrollable() { + win.scroll(win.ScrollX() as f64, y, behavior); + return; + } + + // Step 10 (TODO) + + // Step 11 + win.scroll_node(node.to_trusted_node_address(), self.ScrollLeft(), y, behavior); + } + + // https://drafts.csswg.org/cssom-view/#dom-element-scrolltop + fn ScrollLeft(&self) -> f64 { + let node = self.upcast::<Node>(); + + // Step 1 + let doc = node.owner_doc(); + + // Step 2 + if !doc.is_fully_active() { + return 0.0; + } + + // Step 3 + let win = doc.DefaultView(); + + // Step 5 + if *self.root_element() == *self { + if doc.quirks_mode() != Quirks { + // Step 6 + return win.ScrollX() as f64; + } + + return 0.0; + } + + // Step 7 + if doc.GetBody().r() == self.downcast::<HTMLElement>() && + doc.quirks_mode() == Quirks && + !self.potentially_scrollable() { + return win.ScrollX() as f64; + } + + + // Step 8 + if !self.has_css_layout_box() { + return 0.0; + } + + // Step 9 + let point = node.scroll_offset(); + return point.x.abs() as f64; + } + + // https://drafts.csswg.org/cssom-view/#dom-element-scrollleft + fn SetScrollLeft(&self, x_: f64) { + let behavior = ScrollBehavior::Auto; + + // Step 1, 2 + let x = if x_.is_finite() { x_ } else { 0.0f64 }; + + let node = self.upcast::<Node>(); + + // Step 3 + let doc = node.owner_doc(); + + // Step 4 + if !doc.is_fully_active() { + return; + } + + // Step 5 + let win = doc.DefaultView(); + + // Step 7 + if *self.root_element() == *self { + if doc.quirks_mode() == Quirks { + return; + } + + win.scroll(x, win.ScrollY() as f64, behavior); + return; + } + + // Step 9 + if doc.GetBody().r() == self.downcast::<HTMLElement>() && + doc.quirks_mode() == Quirks && + !self.potentially_scrollable() { + win.scroll(x, win.ScrollY() as f64, behavior); + return; + } + + // Step 10 (TODO) + + // Step 11 + win.scroll_node(node.to_trusted_node_address(), x, self.ScrollTop(), behavior); + } + // https://drafts.csswg.org/cssom-view/#dom-element-scrollwidth fn ScrollWidth(&self) -> i32 { self.upcast::<Node>().scroll_area().size.width diff --git a/components/script/dom/eventsource.rs b/components/script/dom/eventsource.rs index e340e888377..40103e30f76 100644 --- a/components/script/dom/eventsource.rs +++ b/components/script/dom/eventsource.rs @@ -82,7 +82,7 @@ impl EventSourceMethods for EventSource { // https://html.spec.whatwg.org/multipage/#dom-eventsource-url fn Url(&self) -> DOMString { - DOMString::from(self.url.serialize()) + DOMString::from(self.url.as_str()) } // https://html.spec.whatwg.org/multipage/#dom-eventsource-withcredentials diff --git a/components/script/dom/eventtarget.rs b/components/script/dom/eventtarget.rs index 409fdbd436d..0b8325cf30d 100644 --- a/components/script/dom/eventtarget.rs +++ b/components/script/dom/eventtarget.rs @@ -397,7 +397,7 @@ impl EventTarget { // Step 1.6 let window = document.window(); - let url_serialized = CString::new(handler.url.serialize()).unwrap(); + let url_serialized = CString::new(handler.url.to_string()).unwrap(); let name = CString::new(&**ty).unwrap(); static mut ARG_NAMES: [*const c_char; 1] = [b"event\0" as *const u8 as *const c_char]; diff --git a/components/script/dom/htmlanchorelement.rs b/components/script/dom/htmlanchorelement.rs index 16f47315b76..43ff211dfce 100644 --- a/components/script/dom/htmlanchorelement.rs +++ b/components/script/dom/htmlanchorelement.rs @@ -25,10 +25,10 @@ use dom::mouseevent::MouseEvent; use dom::node::{Node, document_from_node, window_from_node}; use dom::urlhelper::UrlHelper; use dom::virtualmethods::VirtualMethods; -use num::ToPrimitive; +use num_traits::ToPrimitive; use std::default::Default; use string_cache::Atom; -use url::{Url, UrlParser}; +use url::Url; use util::str::DOMString; #[dom_struct] @@ -63,9 +63,7 @@ impl HTMLAnchorElement { let attribute = self.upcast::<Element>().get_attribute(&ns!(), &atom!("href")); *self.url.borrow_mut() = attribute.and_then(|attribute| { let document = document_from_node(self); - let mut parser = UrlParser::new(); - parser.base_url(document.url()); - parser.parse(&attribute.value()).ok() + document.url().join(&attribute.value()).ok() }); } @@ -74,8 +72,7 @@ impl HTMLAnchorElement { // Step 1. match *self.url.borrow() { None => return, - Some(ref url) if url.scheme == "blob" && - url.non_relative_scheme_data().is_some() => return, + Some(ref url) if url.scheme() == "blob" && url.cannot_be_a_base() => return, _ => (), } @@ -86,7 +83,7 @@ impl HTMLAnchorElement { // https://html.spec.whatwg.org/multipage/#update-href fn update_href(&self) { self.upcast::<Element>().set_string_attribute(&atom!("href"), - self.url.borrow().as_ref().unwrap().serialize().into()); + self.url.borrow().as_ref().unwrap().as_str().into()); } } @@ -167,7 +164,7 @@ impl HTMLAnchorElementMethods for HTMLAnchorElement { // Step 3. if let Some(url) = self.url.borrow_mut().as_mut() { - if url.scheme == "javascript" { return; } + if url.scheme() == "javascript" { return; } // Steps 4-5. UrlHelper::SetHash(url, value); // Step 6. @@ -201,7 +198,7 @@ impl HTMLAnchorElementMethods for HTMLAnchorElement { // Step 3. if let Some(url) = self.url.borrow_mut().as_mut() { - if url.non_relative_scheme_data().is_some() { + if url.cannot_be_a_base() { return; } // Step 4. @@ -233,7 +230,7 @@ impl HTMLAnchorElementMethods for HTMLAnchorElement { // Step 3. if let Some(url) = self.url.borrow_mut().as_mut() { - if url.non_relative_scheme_data().is_some() { + if url.cannot_be_a_base() { return; } // Step 4. @@ -258,7 +255,7 @@ impl HTMLAnchorElementMethods for HTMLAnchorElement { } }, // Step 5. - Some(ref url) => url.serialize(), + Some(ref url) => url.as_str().to_owned(), }) } @@ -289,7 +286,7 @@ impl HTMLAnchorElementMethods for HTMLAnchorElement { // Step 3. if let Some(url) = self.url.borrow_mut().as_mut() { - if url.host().is_none() || url.non_relative_scheme_data().is_some() { + if url.host().is_none() || url.cannot_be_a_base() { return; } // Step 4. @@ -319,7 +316,7 @@ impl HTMLAnchorElementMethods for HTMLAnchorElement { // Step 3. if let Some(url) = self.url.borrow_mut().as_mut() { - if url.non_relative_scheme_data().is_some() { return; } + if url.cannot_be_a_base() { return; } // Step 5. UrlHelper::SetPathname(url, value); // Step 6. @@ -348,8 +345,8 @@ impl HTMLAnchorElementMethods for HTMLAnchorElement { // Step 3. if let Some(url) = self.url.borrow_mut().as_mut() { if url.host().is_none() || - url.non_relative_scheme_data().is_some() || - url.scheme == "file" { + url.cannot_be_a_base() || + url.scheme() == "file" { return; } // Step 4. @@ -435,7 +432,7 @@ impl HTMLAnchorElementMethods for HTMLAnchorElement { // Step 3. if let Some(url) = self.url.borrow_mut().as_mut() { - if url.host().is_none() || url.non_relative_scheme_data().is_some() { + if url.host().is_none() || url.cannot_be_a_base() { return; } @@ -535,7 +532,7 @@ fn follow_hyperlink(subject: &Element, hyperlink_suffix: Option<String>) { }; // Step 7. - debug!("following hyperlink to {}", url.serialize()); + debug!("following hyperlink to {}", url); let window = document.window(); window.load_url(url); } diff --git a/components/script/dom/htmlbaseelement.rs b/components/script/dom/htmlbaseelement.rs index 241c209c7a8..7656520e283 100644 --- a/components/script/dom/htmlbaseelement.rs +++ b/components/script/dom/htmlbaseelement.rs @@ -68,7 +68,7 @@ impl HTMLBaseElementMethods for HTMLBaseElement { // Step 1. if !self.upcast::<Element>().has_attribute(&atom!("href")) { - return DOMString::from(document.base_url().serialize()); + return DOMString::from(document.base_url().as_str()); } // Step 2. @@ -81,7 +81,7 @@ impl HTMLBaseElementMethods for HTMLBaseElement { let url_record = fallback_base_url.join(&*url); // Step 5, 6. - DOMString::from(url_record.ok().map_or("".to_owned(), |record| record.serialize())) + DOMString::from(url_record.as_ref().map(|url| url.as_str()).unwrap_or("")) } // https://html.spec.whatwg.org/multipage/#dom-base-href diff --git a/components/script/dom/htmlcollection.rs b/components/script/dom/htmlcollection.rs index a7bf82ae50e..b1f1771dd07 100644 --- a/components/script/dom/htmlcollection.rs +++ b/components/script/dom/htmlcollection.rs @@ -161,8 +161,8 @@ impl HTMLCollection { } impl CollectionFilter for TagNameNSFilter { fn filter(&self, elem: &Element, _root: &Node) -> bool { - ((self.qname.ns == Namespace(atom!("*"))) || (self.qname.ns == *elem.namespace())) - && ((self.qname.local == atom!("*")) || (self.qname.local == *elem.local_name())) + ((self.qname.ns == Namespace(atom!("*"))) || (self.qname.ns == *elem.namespace())) && + ((self.qname.local == atom!("*")) || (self.qname.local == *elem.local_name())) } } let filter = TagNameNSFilter { diff --git a/components/script/dom/htmlfontelement.rs b/components/script/dom/htmlfontelement.rs index ae274411040..d898a5840b2 100644 --- a/components/script/dom/htmlfontelement.rs +++ b/components/script/dom/htmlfontelement.rs @@ -15,7 +15,7 @@ use dom::node::Node; use dom::virtualmethods::VirtualMethods; use string_cache::Atom; use style::values::specified; -use util::str::{DOMString, WHITESPACE, read_numbers}; +use util::str::{DOMString, HTML_SPACE_CHARACTERS, read_numbers}; #[dom_struct] pub struct HTMLFontElement { @@ -124,7 +124,7 @@ pub fn parse_legacy_font_size(mut input: &str) -> Option<&'static str> { // Steps 1 & 2 are not relevant // Step 3 - input = input.trim_matches(WHITESPACE); + input = input.trim_matches(HTML_SPACE_CHARACTERS); enum ParseMode { RelativePlus, diff --git a/components/script/dom/htmlformelement.rs b/components/script/dom/htmlformelement.rs index 3e7421de443..13c7a1200c6 100644 --- a/components/script/dom/htmlformelement.rs +++ b/components/script/dom/htmlformelement.rs @@ -44,7 +44,7 @@ use std::cell::Cell; use std::sync::mpsc::Sender; use string_cache::Atom; use task_source::dom_manipulation::DOMManipulationTask; -use url::form_urlencoded::serialize; +use url::form_urlencoded; use util::str::DOMString; #[derive(JSTraceable, PartialEq, Clone, Copy, HeapSizeOf)] @@ -244,8 +244,8 @@ impl HTMLFormElement { let base = doc.url(); // TODO: Handle browsing contexts // Step 4 - if submit_method_flag == SubmittedFrom::NotFromFormSubmitMethod - && !submitter.no_validate(self) + if submit_method_flag == SubmittedFrom::NotFromFormSubmitMethod && + !submitter.no_validate(self) { if self.interactive_validation().is_err() { // TODO: Implement event handlers on all form control elements @@ -269,7 +269,7 @@ impl HTMLFormElement { let mut action = submitter.action(); // Step 8 if action.is_empty() { - action = DOMString::from(base.serialize()); + action = DOMString::from(base.as_str()); } // Step 9-11 let action_components = match base.join(&action) { @@ -277,20 +277,21 @@ impl HTMLFormElement { Err(_) => return }; // Step 12-15 - let _action = action_components.serialize(); - let scheme = action_components.scheme.clone(); + let scheme = action_components.scheme().to_owned(); let enctype = submitter.enctype(); let method = submitter.method(); let _target = submitter.target(); // TODO: Handle browsing contexts, partially loaded documents (step 16-17) - let mut load_data = LoadData::new(action_components); + let mut load_data = LoadData::new(action_components, doc.get_referrer_policy(), Some(doc.url().clone())); let parsed_data = match enctype { FormEncType::UrlEncoded => { let mime: mime::Mime = "application/x-www-form-urlencoded".parse().unwrap(); load_data.headers.set(ContentType(mime)); - serialize(form_data.iter().map(|d| (&*d.name, &*d.value))) + form_urlencoded::Serializer::new(String::new()) + .extend_pairs(form_data.into_iter().map(|field| (field.name, field.value))) + .finish() } _ => "".to_owned() // TODO: Add serializers for the other encoding types }; @@ -302,7 +303,8 @@ impl HTMLFormElement { (_, FormMethod::FormDialog) => return, // Unimplemented // https://html.spec.whatwg.org/multipage/#submit-mutate-action ("http", FormMethod::FormGet) | ("https", FormMethod::FormGet) => { - load_data.url.query = Some(parsed_data); + // FIXME(SimonSapin): use url.query_pairs_mut() here. + load_data.url.set_query(Some(&*parsed_data)); self.plan_to_navigate(load_data, &win); } // https://html.spec.whatwg.org/multipage/#submit-body diff --git a/components/script/dom/htmliframeelement.rs b/components/script/dom/htmliframeelement.rs index fc339664833..a9d5471d468 100644 --- a/components/script/dom/htmliframeelement.rs +++ b/components/script/dom/htmliframeelement.rs @@ -13,7 +13,7 @@ use dom::bindings::codegen::Bindings::HTMLIFrameElementBinding; use dom::bindings::codegen::Bindings::HTMLIFrameElementBinding::HTMLIFrameElementMethods; use dom::bindings::codegen::Bindings::WindowBinding::WindowMethods; use dom::bindings::conversions::{ToJSValConvertible}; -use dom::bindings::error::{Error, ErrorResult, Fallible}; +use dom::bindings::error::{Error, ErrorResult}; use dom::bindings::global::GlobalRef; use dom::bindings::inheritance::Castable; use dom::bindings::js::{Root, LayoutJS}; diff --git a/components/script/dom/htmlimageelement.rs b/components/script/dom/htmlimageelement.rs index c0a9e960385..a02546afddc 100644 --- a/components/script/dom/htmlimageelement.rs +++ b/components/script/dom/htmlimageelement.rs @@ -316,7 +316,7 @@ impl HTMLImageElementMethods for HTMLImageElement { fn CurrentSrc(&self) -> DOMString { let ref url = self.current_request.borrow().url; match *url { - Some(ref url) => DOMString::from(url.serialize()), + Some(ref url) => DOMString::from(url.as_str()), None => DOMString::from(""), } } diff --git a/components/script/dom/htmllinkelement.rs b/components/script/dom/htmllinkelement.rs index 1b058b4c671..a971a90ecbf 100644 --- a/components/script/dom/htmllinkelement.rs +++ b/components/script/dom/htmllinkelement.rs @@ -8,7 +8,6 @@ use dom::attr::{Attr, AttrValue}; use dom::bindings::cell::DOMRefCell; use dom::bindings::codegen::Bindings::HTMLLinkElementBinding; use dom::bindings::codegen::Bindings::HTMLLinkElementBinding::HTMLLinkElementMethods; -use dom::bindings::codegen::Bindings::WindowBinding::WindowMethods; use dom::bindings::inheritance::Castable; use dom::bindings::js::{JS, MutNullableHeap, Root}; use dom::bindings::js::{RootedReference}; @@ -25,7 +24,7 @@ use ipc_channel::ipc; use ipc_channel::router::ROUTER; use layout_interface::{LayoutChan, Msg}; use msg::constellation_msg::ConstellationChan; -use net_traits::{AsyncResponseListener, AsyncResponseTarget, Metadata}; +use net_traits::{AsyncResponseListener, AsyncResponseTarget, Metadata, NetworkError}; use network_listener::{NetworkListener, PreInvoke}; use script_traits::{MozBrowserEvent, ScriptMsg as ConstellationMsg}; use std::ascii::AsciiExt; @@ -272,8 +271,8 @@ struct StylesheetContext { impl PreInvoke for StylesheetContext {} impl AsyncResponseListener for StylesheetContext { - fn headers_available(&mut self, metadata: Metadata) { - self.metadata = Some(metadata); + fn headers_available(&mut self, metadata: Result<Metadata, NetworkError>) { + self.metadata = metadata.ok(); } fn data_available(&mut self, payload: Vec<u8>) { @@ -281,9 +280,12 @@ impl AsyncResponseListener for StylesheetContext { self.data.append(&mut payload); } - fn response_complete(&mut self, _status: Result<(), String>) { + fn response_complete(&mut self, _status: Result<(), NetworkError>) { let data = mem::replace(&mut self.data, vec!()); - let metadata = self.metadata.take().unwrap(); + let metadata = match self.metadata.take() { + Some(meta) => meta, + None => return, + }; // TODO: Get the actual value. http://dev.w3.org/csswg/css-syntax/#environment-encoding let environment_encoding = UTF_8 as EncodingRef; let protocol_encoding_label = metadata.charset.as_ref().map(|s| &**s); diff --git a/components/script/dom/htmlscriptelement.rs b/components/script/dom/htmlscriptelement.rs index b5a6a473dd3..76402db7a70 100644 --- a/components/script/dom/htmlscriptelement.rs +++ b/components/script/dom/htmlscriptelement.rs @@ -33,7 +33,7 @@ use ipc_channel::ipc; use ipc_channel::router::ROUTER; use js::jsapi::RootedValue; use js::jsval::UndefinedValue; -use net_traits::{AsyncResponseListener, AsyncResponseTarget, Metadata}; +use net_traits::{AsyncResponseListener, AsyncResponseTarget, Metadata, NetworkError}; use network_listener::{NetworkListener, PreInvoke}; use script_runtime::ScriptChan; use script_thread::MainThreadScriptChan; @@ -124,7 +124,7 @@ static SCRIPT_JS_MIMES: StaticStringVec = &[ #[derive(HeapSizeOf, JSTraceable)] pub enum ScriptOrigin { Internal(DOMString, Url), - External(Result<(Metadata, Vec<u8>), String>), + External(Result<(Metadata, Vec<u8>), NetworkError>), } /// The context required for asynchronously loading an external script source. @@ -138,23 +138,25 @@ struct ScriptContext { /// The initial URL requested. url: Url, /// Indicates whether the request failed, and why - status: Result<(), String> + status: Result<(), NetworkError> } impl AsyncResponseListener for ScriptContext { - fn headers_available(&mut self, metadata: Metadata) { - let status_code = match metadata.status { - Some(RawStatus(c, _)) => c, - _ => 0 - }; + fn headers_available(&mut self, metadata: Result<Metadata, NetworkError>) { + self.metadata = metadata.ok(); + + let status_code = self.metadata.as_ref().and_then(|m| { + match m.status { + Some(RawStatus(c, _)) => Some(c), + _ => None, + } + }).unwrap_or(0); self.status = match status_code { - 0 => Err("No http status code received".to_owned()), + 0 => Err(NetworkError::Internal("No http status code received".to_owned())), 200...299 => Ok(()), // HTTP ok status codes - _ => Err(format!("HTTP error code {}", status_code)) + _ => Err(NetworkError::Internal(format!("HTTP error code {}", status_code))) }; - - self.metadata = Some(metadata); } fn data_available(&mut self, payload: Vec<u8>) { @@ -164,7 +166,7 @@ impl AsyncResponseListener for ScriptContext { } } - fn response_complete(&mut self, status: Result<(), String>) { + fn response_complete(&mut self, status: Result<(), NetworkError>) { let load = status.and(self.status.clone()).map(|_| { let data = mem::replace(&mut self.data, vec!()); let metadata = self.metadata.take().unwrap(); @@ -398,7 +400,7 @@ impl HTMLScriptElement { let (source, external, url) = match load { // Step 2.a. ScriptOrigin::External(Err(e)) => { - error!("error loading script {}", e); + error!("error loading script {:?}", e); self.dispatch_error_event(); return; } @@ -446,7 +448,7 @@ impl HTMLScriptElement { let window = window_from_node(self); let mut rval = RootedValue::new(window.get_cx(), UndefinedValue()); window.evaluate_script_on_global_with_result(&*source, - &*url.serialize(), + url.as_str(), rval.handle_mut()); // Step 2.b.7. diff --git a/components/script/dom/htmltableelement.rs b/components/script/dom/htmltableelement.rs index 4b5cd44773d..5ad77e9e8b4 100644 --- a/components/script/dom/htmltableelement.rs +++ b/components/script/dom/htmltableelement.rs @@ -132,8 +132,8 @@ impl HTMLTableElementMethods for HTMLTableElement { impl CollectionFilter for TableRowFilter { fn filter(&self, elem: &Element, root: &Node) -> bool { - elem.is::<HTMLTableRowElement>() - && (root.is_parent_of(elem.upcast()) + elem.is::<HTMLTableRowElement>() && + (root.is_parent_of(elem.upcast()) || self.sections.iter().any(|ref section| section.is_parent_of(elem.upcast()))) } } @@ -250,9 +250,9 @@ impl HTMLTableElementMethods for HTMLTableElement { struct TBodiesFilter; impl CollectionFilter for TBodiesFilter { fn filter(&self, elem: &Element, root: &Node) -> bool { - elem.is::<HTMLTableSectionElement>() - && elem.local_name() == &atom!("tbody") - && elem.upcast::<Node>().GetParentNode().r() == Some(root) + elem.is::<HTMLTableSectionElement>() && + elem.local_name() == &atom!("tbody") && + elem.upcast::<Node>().GetParentNode().r() == Some(root) } } diff --git a/components/script/dom/htmltablerowelement.rs b/components/script/dom/htmltablerowelement.rs index bb83e00b0db..2969102984d 100644 --- a/components/script/dom/htmltablerowelement.rs +++ b/components/script/dom/htmltablerowelement.rs @@ -29,8 +29,8 @@ use util::str::DOMString; struct CellsFilter; impl CollectionFilter for CellsFilter { fn filter(&self, elem: &Element, root: &Node) -> bool { - (elem.is::<HTMLTableHeaderCellElement>() || elem.is::<HTMLTableDataCellElement>()) - && elem.upcast::<Node>().GetParentNode().r() == Some(root) + (elem.is::<HTMLTableHeaderCellElement>() || elem.is::<HTMLTableDataCellElement>()) && + elem.upcast::<Node>().GetParentNode().r() == Some(root) } } diff --git a/components/script/dom/htmltablesectionelement.rs b/components/script/dom/htmltablesectionelement.rs index e51caa9f30e..fc737aed9ea 100644 --- a/components/script/dom/htmltablesectionelement.rs +++ b/components/script/dom/htmltablesectionelement.rs @@ -44,8 +44,8 @@ impl HTMLTableSectionElement { struct RowsFilter; impl CollectionFilter for RowsFilter { fn filter(&self, elem: &Element, root: &Node) -> bool { - elem.is::<HTMLTableRowElement>() - && elem.upcast::<Node>().GetParentNode().r() == Some(root) + elem.is::<HTMLTableRowElement>() && + elem.upcast::<Node>().GetParentNode().r() == Some(root) } } diff --git a/components/script/dom/macros.rs b/components/script/dom/macros.rs index d3c157cf134..fa3fd87e004 100644 --- a/components/script/dom/macros.rs +++ b/components/script/dom/macros.rs @@ -99,7 +99,7 @@ macro_rules! make_url_or_base_getter( let url = element.get_url_attribute(&atom!($htmlname)); if url.is_empty() { let window = window_from_node(self); - DOMString::from(window.get_url().serialize()) + DOMString::from(window.get_url().into_string()) } else { url } diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs index 1e71966e4e7..0f2209c00ea 100644 --- a/components/script/dom/node.rs +++ b/components/script/dom/node.rs @@ -614,6 +614,12 @@ impl Node { } } + pub fn scroll_offset(&self) -> Point2D<f32> { + let document = self.owner_doc(); + let window = document.window(); + window.scroll_offset_query(self.to_trusted_node_address()) + } + // https://dom.spec.whatwg.org/#dom-childnode-before pub fn before(&self, nodes: Vec<NodeOrString>) -> ErrorResult { // Step 1. @@ -1852,6 +1858,11 @@ impl NodeMethods for Node { } } + // https://dom.spec.whatwg.org/#dom-node-rootnode + fn RootNode(&self) -> Root<Node> { + self.inclusive_ancestors().last().unwrap() + } + // https://dom.spec.whatwg.org/#dom-node-parentnode fn GetParentNode(&self) -> Option<Root<Node>> { self.parent_node.get() @@ -2219,6 +2230,14 @@ impl NodeMethods for Node { } } + // https://dom.spec.whatwg.org/#dom-node-issamenode + fn IsSameNode(&self, otherNode: Option<&Node>) -> bool { + match otherNode { + Some(node) => self == node, + None => false, + } + } + // https://dom.spec.whatwg.org/#dom-node-comparedocumentposition fn CompareDocumentPosition(&self, other: &Node) -> u16 { if self == other { diff --git a/components/script/dom/progressevent.rs b/components/script/dom/progressevent.rs index 215bcdd3db4..4a3d3f3da7d 100644 --- a/components/script/dom/progressevent.rs +++ b/components/script/dom/progressevent.rs @@ -11,6 +11,7 @@ use dom::bindings::inheritance::Castable; use dom::bindings::js::Root; use dom::bindings::reflector::reflect_dom_object; use dom::event::{Event, EventBubbles, EventCancelable}; +use dom::window::Window; use string_cache::Atom; use util::str::DOMString; @@ -31,6 +32,11 @@ impl ProgressEvent { total: total } } + pub fn new_uninitialized(window: &Window) -> Root<ProgressEvent> { + reflect_dom_object(box ProgressEvent::new_inherited(false, 0, 0), + GlobalRef::Window(window), + ProgressEventBinding::Wrap) + } pub fn new(global: GlobalRef, type_: Atom, can_bubble: EventBubbles, cancelable: EventCancelable, length_computable: bool, loaded: u64, total: u64) -> Root<ProgressEvent> { diff --git a/components/script/dom/servohtmlparser.rs b/components/script/dom/servohtmlparser.rs index 2312ac96795..25fbff24d28 100644 --- a/components/script/dom/servohtmlparser.rs +++ b/components/script/dom/servohtmlparser.rs @@ -26,7 +26,7 @@ use hyper::header::ContentType; use hyper::mime::{Mime, SubLevel, TopLevel}; use js::jsapi::JSTracer; use msg::constellation_msg::{PipelineId, SubpageId}; -use net_traits::{AsyncResponseListener, Metadata}; +use net_traits::{AsyncResponseListener, Metadata, NetworkError}; use network_listener::PreInvoke; use parse::Parser; use script_runtime::ScriptChan; @@ -36,6 +36,7 @@ use std::cell::UnsafeCell; use std::default::Default; use std::ptr; use url::Url; +use util::resource_files::read_resource_file; #[must_root] #[derive(JSTraceable, HeapSizeOf)] @@ -239,12 +240,23 @@ impl ParserContext { } impl AsyncResponseListener for ParserContext { - fn headers_available(&mut self, metadata: Metadata) { - let content_type = metadata.content_type.clone(); - - let parser = ScriptThread::page_fetch_complete(self.id.clone(), self.subpage.clone(), - metadata); - let parser = match parser { + fn headers_available(&mut self, meta_result: Result<Metadata, NetworkError>) { + let mut is_ssl_error = false; + let metadata = match meta_result { + Ok(meta) => Some(meta), + Err(NetworkError::SslValidation(url)) => { + is_ssl_error = true; + let mut meta = Metadata::default(url); + let mime: Option<Mime> = "text/html".parse().ok(); + meta.set_content_type(mime.as_ref()); + Some(meta) + }, + Err(_) => None, + }; + let content_type = metadata.clone().and_then(|meta| meta.content_type); + let parser = match ScriptThread::page_fetch_complete(self.id.clone(), + self.subpage.clone(), + metadata) { Some(parser) => parser, None => return, }; @@ -262,8 +274,7 @@ impl AsyncResponseListener for ParserContext { match content_type { Some(ContentType(Mime(TopLevel::Image, _, _))) => { self.is_synthesized_document = true; - let page = format!("<html><body><img src='{}' /></body></html>", - self.url.serialize()); + let page = format!("<html><body><img src='{}' /></body></html>", self.url); parser.pending_input().borrow_mut().push(page); parser.parse_sync(); }, @@ -274,7 +285,15 @@ impl AsyncResponseListener for ParserContext { parser.parse_sync(); parser.set_plaintext_state(); }, - Some(ContentType(Mime(TopLevel::Text, SubLevel::Html, _))) => {}, // Handle text/html + Some(ContentType(Mime(TopLevel::Text, SubLevel::Html, _))) => { // Handle text/html + if is_ssl_error { + self.is_synthesized_document = true; + let page_bytes = read_resource_file("badcert.html").unwrap(); + let page = String::from_utf8(page_bytes).unwrap(); + parser.pending_input().borrow_mut().push(page); + parser.parse_sync(); + } + }, Some(ContentType(Mime(TopLevel::Text, SubLevel::Xml, _))) => {}, // Handle text/xml Some(ContentType(Mime(toplevel, sublevel, _))) => { if toplevel.as_str() == "application" && sublevel.as_str() == "xhtml+xml" { @@ -308,7 +327,7 @@ impl AsyncResponseListener for ParserContext { } } - fn response_complete(&mut self, status: Result<(), String>) { + fn response_complete(&mut self, status: Result<(), NetworkError>) { let parser = match self.parser.as_ref() { Some(parser) => parser.root(), None => return, @@ -316,7 +335,7 @@ impl AsyncResponseListener for ParserContext { parser.r().document().finish_load(LoadType::PageSource(self.url.clone())); if let Err(err) = status { - debug!("Failed to load page URL {}, error: {}", self.url.serialize(), err); + debug!("Failed to load page URL {}, error: {:?}", self.url, err); // TODO(Savago): we should send a notification to callers #5463. } diff --git a/components/script/dom/storage.rs b/components/script/dom/storage.rs index dae8d73e7a3..76e7c6a29f6 100644 --- a/components/script/dom/storage.rs +++ b/components/script/dom/storage.rs @@ -129,7 +129,11 @@ impl StorageMethods for Storage { let (sender, receiver) = ipc::channel().unwrap(); self.get_storage_thread().send(StorageThreadMsg::Keys(sender, self.get_url(), self.storage_type)).unwrap(); - receiver.recv().unwrap().iter().cloned().map(DOMString::from).collect() // FIXME: inefficient? + receiver.recv() + .unwrap() + .into_iter() + .map(DOMString::from) + .collect() } // check-tidy: no specs after this line diff --git a/components/script/dom/storageevent.rs b/components/script/dom/storageevent.rs index 7d1f7520c4a..e3317a34b49 100644 --- a/components/script/dom/storageevent.rs +++ b/components/script/dom/storageevent.rs @@ -12,6 +12,7 @@ use dom::bindings::js::{JS, MutNullableHeap, Root, RootedReference}; use dom::bindings::reflector::reflect_dom_object; use dom::event::{Event, EventBubbles, EventCancelable}; use dom::storage::Storage; +use dom::window::Window; use string_cache::Atom; use util::str::DOMString; @@ -42,6 +43,13 @@ impl StorageEvent { } } + pub fn new_uninitialized(window: &Window, + url: DOMString) -> Root<StorageEvent> { + reflect_dom_object(box StorageEvent::new_inherited(None, None, None, url, None), + GlobalRef::Window(window), + StorageEventBinding::Wrap) + } + pub fn new(global: GlobalRef, type_: Atom, bubbles: EventBubbles, diff --git a/components/script/dom/url.rs b/components/script/dom/url.rs index 6438e258543..f2ba7082e0f 100644 --- a/components/script/dom/url.rs +++ b/components/script/dom/url.rs @@ -13,7 +13,7 @@ use dom::urlhelper::UrlHelper; use dom::urlsearchparams::URLSearchParams; use std::borrow::ToOwned; use std::default::Default; -use url::{Host, Url, UrlParser}; +use url::{Host, Url}; use util::str::DOMString; // https://url.spec.whatwg.org/#url @@ -42,8 +42,13 @@ impl URL { global, URLBinding::Wrap) } - pub fn set_query(&self, query: String) { - self.url.borrow_mut().query = Some(query); + pub fn query_pairs(&self) -> Vec<(String, String)> { + self.url.borrow().query_pairs().into_owned().collect() + } + + pub fn set_query_pairs(&self, pairs: &[(String, String)]) { + let mut url = self.url.borrow_mut(); + url.query_pairs_mut().clear().extend_pairs(pairs); } } @@ -68,17 +73,11 @@ impl URL { } }; // Step 3. - let parsed_url = { - let mut parser = UrlParser::new(); - if let Some(parsed_base) = parsed_base.as_ref() { - parser.base_url(parsed_base); - } - match parser.parse(&url.0) { - Ok(url) => url, - Err(error) => { - // Step 4. - return Err(Error::Type(format!("could not parse URL: {}", error))); - } + let parsed_url = match Url::options().base_url(parsed_base.as_ref()).parse(&url.0) { + Ok(url) => url, + Err(error) => { + // Step 4. + return Err(Error::Type(format!("could not parse URL: {}", error))); } }; // Step 5: Skip (see step 8 below). @@ -145,6 +144,7 @@ impl URLMethods for URL { match Url::parse(&value.0) { Ok(url) => { *self.url.borrow_mut() = url; + self.search_params.set(None); // To be re-initialized in the SearchParams getter. Ok(()) }, Err(error) => { @@ -207,7 +207,7 @@ impl URLMethods for URL { fn SetSearch(&self, value: USVString) { UrlHelper::SetSearch(&mut self.url.borrow_mut(), value); if let Some(search_params) = self.search_params.get() { - search_params.set_list(self.url.borrow().query_pairs().unwrap_or_else(|| vec![])); + search_params.set_list(self.url.borrow().query_pairs().into_owned().collect()); } } diff --git a/components/script/dom/urlhelper.rs b/components/script/dom/urlhelper.rs index ab0a0c5f8c0..68e4219f996 100644 --- a/components/script/dom/urlhelper.rs +++ b/components/script/dom/urlhelper.rs @@ -4,166 +4,31 @@ use dom::bindings::str::USVString; use std::borrow::ToOwned; -use std::fmt::Write; -use url::urlutils::{UrlUtils, UrlUtilsWrapper}; -use url::{Origin, SchemeData, Url, UrlParser}; +use url::{Url, quirks}; #[derive(HeapSizeOf)] pub struct UrlHelper; impl UrlHelper { - pub fn Hash(url: &Url) -> USVString { - USVString(match url.fragment { - None => "".to_owned(), - Some(ref hash) if hash.is_empty() => "".to_owned(), - Some(ref hash) => format!("#{}", hash) - }) - } - - pub fn SetHash(url: &mut Url, value: USVString) { - url.fragment = Some(String::new()); - let mut wrapper = UrlUtilsWrapper { url: url, parser: &UrlParser::new() }; - let _ = wrapper.set_fragment(&value.0); - } - - pub fn Host(url: &Url) -> USVString { - USVString(match url.scheme_data { - SchemeData::NonRelative(..) => "".to_owned(), - SchemeData::Relative(ref scheme_data) => { - let mut host = scheme_data.host.serialize(); - if let Some(port) = scheme_data.port { - write!(host, ":{}", port).unwrap(); - } - host - }, - }) - } - - pub fn SetHost(url: &mut Url, value: USVString) { - let mut wrapper = UrlUtilsWrapper { url: url, parser: &UrlParser::new() }; - let _ = wrapper.set_host(&value.0); - } - - pub fn Origin(url: &Url) -> USVString { - USVString(match url.origin() { - Origin::UID(_) => { - // https://html.spec.whatwg.org/multipage/#unicode-serialisation-of-an-origin - // If the origin in question is not a scheme/host/port tuple, - // then return the literal string "null" and abort these steps. - "null".to_owned() - }, - Origin::Tuple(protocol, host, _) => { - let mut origin = - format!( - "{protocol}://{host}", - protocol = protocol, - host = host - ); - if let Some(port) = - // https://html.spec.whatwg.org/multipage/#unicode-serialisation-of-an-origin - // only append the port # to the serialized origin if the port is different from - // the default port for the protocol. If url.scheme_data.port is None, that - // indicates that the port is a default port - url.relative_scheme_data().and_then(|scheme| scheme.port) { - write!(origin, ":{}", port).unwrap(); - }; - origin - } - }) - } - - pub fn Hostname(url: &Url) -> USVString { - USVString(url.serialize_host().unwrap_or_else(|| "".to_owned())) - } - - pub fn SetHostname(url: &mut Url, value: USVString) { - let mut wrapper = UrlUtilsWrapper { url: url, parser: &UrlParser::new() }; - let _ = wrapper.set_host_and_port(&value.0); - } - - pub fn Href(url: &Url) -> USVString { - USVString(url.serialize()) - } - - pub fn Password(url: &Url) -> USVString { - USVString(url.password().unwrap_or("").to_owned()) - } - - pub fn SetPassword(url: &mut Url, value: USVString) { - let mut wrapper = UrlUtilsWrapper { url: url, parser: &UrlParser::new() }; - let _ = wrapper.set_password(&value.0); - } - - pub fn Pathname(url: &Url) -> USVString { - USVString(match url.scheme_data { - SchemeData::NonRelative(ref scheme_data) => scheme_data.clone(), - SchemeData::Relative(..) => url.serialize_path().unwrap() - }) - } - - pub fn SetPathname(url: &mut Url, value: USVString) { - if let Some(path) = url.path_mut() { - path.clear(); - } - let mut wrapper = UrlUtilsWrapper { url: url, parser: &UrlParser::new() }; - let _ = wrapper.set_path(&value.0); - } - - pub fn Port(url: &Url) -> USVString { - USVString(match url.port() { - None => "".to_owned(), - Some(port) => port.to_string(), - }) - } - - pub fn SetPort(url: &mut Url, value: USVString) { - let mut wrapper = UrlUtilsWrapper { url: url, parser: &UrlParser::new() }; - let _ = wrapper.set_port(&value.0); - } - - pub fn Protocol(url: &Url) -> USVString { - USVString(format!("{}:", url.scheme.clone())) - } - - pub fn SetProtocol(url: &mut Url, value: USVString) { - let mut wrapper = UrlUtilsWrapper { url: url, parser: &UrlParser::new() }; - let _ = wrapper.set_scheme(&value.0); - } - - // https://html.spec.whatwg.org/multipage/#same-origin - pub fn SameOrigin(urlA: &Url, urlB: &Url) -> bool { - if urlA.host() != urlB.host() { - return false - } - if urlA.scheme != urlB.scheme { - return false - } - if urlA.port() != urlB.port() { - return false - } - true - } - - pub fn Search(url: &Url) -> USVString { - USVString(match url.query { - None => "".to_owned(), - Some(ref query) if query.is_empty() => "".to_owned(), - Some(ref query) => format!("?{}", query) - }) - } - - pub fn SetSearch(url: &mut Url, value: USVString) { - url.query = Some(String::new()); - let mut wrapper = UrlUtilsWrapper { url: url, parser: &UrlParser::new() }; - let _ = wrapper.set_query(&value.0); - } - - pub fn Username(url: &Url) -> USVString { - USVString(url.username().unwrap_or("").to_owned()) - } - - pub fn SetUsername(url: &mut Url, value: USVString) { - let mut wrapper = UrlUtilsWrapper { url: url, parser: &UrlParser::new() }; - let _ = wrapper.set_username(&value.0); - } + pub fn SameOrigin(urlA: &Url, urlB: &Url) -> bool { urlA.origin() == urlB.origin() } + pub fn Origin(url: &Url) -> USVString { USVString(quirks::origin(url)) } + pub fn Href(url: &Url) -> USVString { USVString(quirks::href(url).to_owned()) } + pub fn Hash(url: &Url) -> USVString { USVString(quirks::hash(url).to_owned()) } + pub fn Host(url: &Url) -> USVString { USVString(quirks::host(url).to_owned()) } + pub fn Port(url: &Url) -> USVString { USVString(quirks::port(url).to_owned()) } + pub fn Search(url: &Url) -> USVString { USVString(quirks::search(url).to_owned()) } + pub fn Hostname(url: &Url) -> USVString { USVString(quirks::hostname(url).to_owned()) } + pub fn Password(url: &Url) -> USVString { USVString(quirks::password(url).to_owned()) } + pub fn Pathname(url: &Url) -> USVString { USVString(quirks::pathname(url).to_owned()) } + pub fn Protocol(url: &Url) -> USVString { USVString(quirks::protocol(url).to_owned()) } + pub fn Username(url: &Url) -> USVString { USVString(quirks::username(url).to_owned()) } + pub fn SetHash(url: &mut Url, value: USVString) { quirks::set_hash(url, &value.0) } + pub fn SetHost(url: &mut Url, value: USVString) { let _ = quirks::set_host(url, &value.0); } + pub fn SetPort(url: &mut Url, value: USVString) { let _ = quirks::set_port(url, &value.0); } + pub fn SetSearch(url: &mut Url, value: USVString) { quirks::set_search(url, &value.0) } + pub fn SetPathname(url: &mut Url, value: USVString) { quirks::set_pathname(url, &value.0) } + pub fn SetHostname(url: &mut Url, value: USVString) { let _ = quirks::set_hostname(url, &value.0); } + pub fn SetPassword(url: &mut Url, value: USVString) { let _ = quirks::set_password(url, &value.0); } + pub fn SetProtocol(url: &mut Url, value: USVString) { let _ = quirks::set_protocol(url, &value.0); } + pub fn SetUsername(url: &mut Url, value: USVString) { let _ = quirks::set_username(url, &value.0); } } diff --git a/components/script/dom/urlsearchparams.rs b/components/script/dom/urlsearchparams.rs index bb7b1cb910c..800cd10db88 100644 --- a/components/script/dom/urlsearchparams.rs +++ b/components/script/dom/urlsearchparams.rs @@ -14,7 +14,7 @@ use dom::bindings::str::USVString; use dom::bindings::weakref::MutableWeakRef; use dom::url::URL; use encoding::types::EncodingRef; -use url::form_urlencoded::{parse, serialize_with_encoding}; +use url::form_urlencoded; use util::str::DOMString; // https://url.spec.whatwg.org/#interface-urlsearchparams @@ -31,7 +31,7 @@ impl URLSearchParams { fn new_inherited(url: Option<&URL>) -> URLSearchParams { URLSearchParams { reflector_: Reflector::new(), - list: DOMRefCell::new(vec![]), + list: DOMRefCell::new(url.map_or(Vec::new(), |url| url.query_pairs())), url: MutableWeakRef::new(url), } } @@ -49,7 +49,8 @@ impl URLSearchParams { match init { Some(USVStringOrURLSearchParams::USVString(init)) => { // Step 2. - *query.list.borrow_mut() = parse(init.0.as_bytes()); + *query.list.borrow_mut() = form_urlencoded::parse(init.0.as_bytes()) + .into_owned().collect(); }, Some(USVStringOrURLSearchParams::URLSearchParams(init)) => { // Step 3. @@ -110,26 +111,28 @@ impl URLSearchParamsMethods for URLSearchParams { // https://url.spec.whatwg.org/#dom-urlsearchparams-set fn Set(&self, name: USVString, value: USVString) { - // Step 1. - let mut list = self.list.borrow_mut(); - let mut index = None; - let mut i = 0; - list.retain(|&(ref k, _)| { - if index.is_none() { - if k == &name.0 { - index = Some(i); + { + // Step 1. + let mut list = self.list.borrow_mut(); + let mut index = None; + let mut i = 0; + list.retain(|&(ref k, _)| { + if index.is_none() { + if k == &name.0 { + index = Some(i); + } else { + i += 1; + } + true } else { - i += 1; + k != &name.0 } - true - } else { - k != &name.0 - } - }); - match index { - Some(index) => list[index].1 = value.0, - None => list.push((name.0, value.0)), // Step 2. - }; + }); + match index { + Some(index) => list[index].1 = value.0, + None => list.push((name.0, value.0)), // Step 2. + }; + } // Un-borrow self.list // Step 3. self.update_steps(); } @@ -145,7 +148,10 @@ impl URLSearchParams { // https://url.spec.whatwg.org/#concept-urlencoded-serializer pub fn serialize(&self, encoding: Option<EncodingRef>) -> String { let list = self.list.borrow(); - serialize_with_encoding(list.iter(), encoding) + form_urlencoded::Serializer::new(String::new()) + .encoding_override(encoding) + .extend_pairs(&*list) + .finish() } } @@ -154,7 +160,7 @@ impl URLSearchParams { // https://url.spec.whatwg.org/#concept-urlsearchparams-update fn update_steps(&self) { if let Some(url) = self.url.root() { - url.set_query(self.serialize(None)); + url.set_query_pairs(&self.list.borrow()) } } } diff --git a/components/script/dom/webglcontextevent.rs b/components/script/dom/webglcontextevent.rs index ac93727eb7c..fa785146499 100644 --- a/components/script/dom/webglcontextevent.rs +++ b/components/script/dom/webglcontextevent.rs @@ -41,6 +41,17 @@ impl WebGLContextEvent { } } + pub fn new_uninitialized(global_ref: GlobalRef) -> Root<WebGLContextEvent> { + // according to https://www.khronos.org/registry/webgl/specs/1.0/#5.15 this is + // additional information or the empty string if no additional information is + // available. + let status_message = DOMString::new(); + reflect_dom_object( + box WebGLContextEvent::new_inherited(status_message), + global_ref, + WebGLContextEventBinding::Wrap) + } + pub fn new(global: GlobalRef, type_: Atom, bubbles: EventBubbles, diff --git a/components/script/dom/webglprogram.rs b/components/script/dom/webglprogram.rs index 0458e2ae2ca..6cc122cf459 100644 --- a/components/script/dom/webglprogram.rs +++ b/components/script/dom/webglprogram.rs @@ -23,6 +23,7 @@ pub struct WebGLProgram { webgl_object: WebGLObject, id: u32, is_deleted: Cell<bool>, + linked: Cell<bool>, fragment_shader: MutNullableHeap<JS<WebGLShader>>, vertex_shader: MutNullableHeap<JS<WebGLShader>>, #[ignore_heap_size_of = "Defined in ipc-channel"] @@ -35,6 +36,7 @@ impl WebGLProgram { webgl_object: WebGLObject::new_inherited(), id: id, is_deleted: Cell::new(false), + linked: Cell::new(false), fragment_shader: Default::default(), vertex_shader: Default::default(), renderer: renderer, @@ -71,19 +73,27 @@ impl WebGLProgram { /// glLinkProgram pub fn link(&self) { - self.renderer.send(CanvasMsg::WebGL(WebGLCommand::LinkProgram(self.id))).unwrap(); - } + self.linked.set(false); - /// glUseProgram - pub fn use_program(&self) -> WebGLResult<()> { match self.fragment_shader.get() { Some(ref shader) if shader.successfully_compiled() => {}, - _ => return Err(WebGLError::InvalidOperation), + _ => return, } match self.vertex_shader.get() { Some(ref shader) if shader.successfully_compiled() => {}, - _ => return Err(WebGLError::InvalidOperation), + _ => return, + } + + self.linked.set(true); + + self.renderer.send(CanvasMsg::WebGL(WebGLCommand::LinkProgram(self.id))).unwrap(); + } + + /// glUseProgram + pub fn use_program(&self) -> WebGLResult<()> { + if !self.linked.get() { + return Err(WebGLError::InvalidOperation); } self.renderer.send(CanvasMsg::WebGL(WebGLCommand::UseProgram(self.id))).unwrap(); diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs index 5f1b0589af4..7e48ba60d34 100644 --- a/components/script/dom/webglrenderingcontext.rs +++ b/components/script/dom/webglrenderingcontext.rs @@ -3,12 +3,12 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use canvas_traits::{CanvasCommonMsg, CanvasMsg}; -use dom::bindings::codegen::Bindings::WebGLActiveInfoBinding::WebGLActiveInfoMethods; use dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::WebGLRenderingContextConstants as constants; use dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::{WebGLRenderingContextMethods}; use dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::{self, WebGLContextAttributes}; use dom::bindings::codegen::UnionTypes::ImageDataOrHTMLImageElementOrHTMLCanvasElementOrHTMLVideoElement; -use dom::bindings::conversions::{ToJSValConvertible, array_buffer_view_to_vec_checked, array_buffer_view_to_vec}; +use dom::bindings::conversions::{ToJSValConvertible, array_buffer_view_data_checked}; +use dom::bindings::conversions::{array_buffer_view_to_vec_checked, array_buffer_view_to_vec}; use dom::bindings::global::GlobalRef; use dom::bindings::inheritance::Castable; use dom::bindings::js::{JS, LayoutJS, MutNullableHeap, Root}; @@ -67,45 +67,6 @@ bitflags! { } } -pub enum UniformType { - Int, - IntVec2, - IntVec3, - IntVec4, - Float, - FloatVec2, - FloatVec3, - FloatVec4, -} - -impl UniformType { - fn element_count(&self) -> usize { - match *self { - UniformType::Int => 1, - UniformType::IntVec2 => 2, - UniformType::IntVec3 => 3, - UniformType::IntVec4 => 4, - UniformType::Float => 1, - UniformType::FloatVec2 => 2, - UniformType::FloatVec3 => 3, - UniformType::FloatVec4 => 4, - } - } - - fn as_gl_constant(&self) -> u32 { - match *self { - UniformType::Int => constants::INT, - UniformType::IntVec2 => constants::INT_VEC2, - UniformType::IntVec3 => constants::INT_VEC3, - UniformType::IntVec4 => constants::INT_VEC4, - UniformType::Float => constants::FLOAT, - UniformType::FloatVec2 => constants::FLOAT_VEC2, - UniformType::FloatVec3 => constants::FLOAT_VEC3, - UniformType::FloatVec4 => constants::FLOAT_VEC4, - } - } -} - #[dom_struct] pub struct WebGLRenderingContext { reflector_: Reflector, @@ -219,21 +180,29 @@ impl WebGLRenderingContext { .unwrap(); } + fn validate_stencil_actions(&self, action: u32) -> bool { + match action { + 0 | constants::KEEP | constants::REPLACE | constants::INCR | constants::DECR | + constants::INVERT | constants::INCR_WRAP | constants::DECR_WRAP => true, + _ => false, + } + } + // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 // https://www.khronos.org/opengles/sdk/docs/man/xhtml/glUniform.xml // https://www.khronos.org/registry/gles/specs/2.0/es_full_spec_2.0.25.pdf#nameddest=section-2.10.4 fn validate_uniform_parameters<T>(&self, - uniform: Option<&WebGLUniformLocation>, - type_: UniformType, - data: Option<&[T]>) -> bool { + uniform: Option<&WebGLUniformLocation>, + uniform_type: UniformSetterType, + data: Option<&[T]>) -> bool { let uniform = match uniform { Some(uniform) => uniform, None => return false, }; let program = self.current_program.get(); - let program = match program { - Some(ref program) if program.id() == uniform.program_id() => program, + match program { + Some(ref program) if program.id() == uniform.program_id() => {}, _ => { self.webgl_error(InvalidOperation); return false; @@ -248,28 +217,200 @@ impl WebGLRenderingContext { }, }; - // TODO(autrilla): Don't request this every time, cache it - let active_uniform = match program.get_active_uniform( - uniform.id() as u32) { - Ok(active_uniform) => active_uniform, - Err(_) => { - self.webgl_error(InvalidOperation); + // TODO(emilio): Get more complex uniform info from ANGLE, and use it to + // properly validate that the uniform setter type is compatible with the + // uniform type, and that the uniform size matches. + if data.len() % uniform_type.element_count() != 0 { + self.webgl_error(InvalidOperation); + return false; + } + + true + } + + fn validate_tex_image_parameters(&self, + target: u32, + level: i32, + internal_format: u32, + width: i32, + height: i32, + border: i32, + format: u32, + data_type: u32) -> bool { + // GL_INVALID_ENUM is generated if target is not GL_TEXTURE_2D, + // GL_TEXTURE_CUBE_MAP_POSITIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, + // GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, + // GL_TEXTURE_CUBE_MAP_POSITIVE_Z, or GL_TEXTURE_CUBE_MAP_NEGATIVE_Z. + let texture = match target { + constants::TEXTURE_2D + => self.bound_texture_2d.get(), + constants::TEXTURE_CUBE_MAP_POSITIVE_X | + constants::TEXTURE_CUBE_MAP_NEGATIVE_X | + constants::TEXTURE_CUBE_MAP_POSITIVE_Y | + constants::TEXTURE_CUBE_MAP_NEGATIVE_Y | + constants::TEXTURE_CUBE_MAP_POSITIVE_Z | + constants::TEXTURE_CUBE_MAP_NEGATIVE_Z + => self.bound_texture_cube_map.get(), + _ => { + self.webgl_error(InvalidEnum); return false; }, }; - if data.len() % type_.element_count() != 0 || - (data.len() / type_.element_count() > active_uniform.Size() as usize) { - self.webgl_error(InvalidOperation); + // If an attempt is made to call this function with no + // WebGLTexture bound, an INVALID_OPERATION error is generated. + if texture.is_none() { + self.webgl_error(InvalidOperation); + return false; + } + + // GL_INVALID_ENUM is generated if data_type is not an accepted value. + match data_type { + constants::UNSIGNED_BYTE | + constants::UNSIGNED_SHORT_4_4_4_4 | + constants::UNSIGNED_SHORT_5_5_5_1 | + constants::UNSIGNED_SHORT_5_6_5 => {}, + _ => { + self.webgl_error(InvalidEnum); return false; + }, + } + + + // TODO(emilio): GL_INVALID_VALUE may be generated if + // level is greater than log_2(max), where max is + // the returned value of GL_MAX_TEXTURE_SIZE when + // target is GL_TEXTURE_2D or GL_MAX_CUBE_MAP_TEXTURE_SIZE + // when target is not GL_TEXTURE_2D. + let is_cubic = target != constants::TEXTURE_2D; + + // GL_INVALID_VALUE is generated if target is one of the + // six cube map 2D image targets and the width and height + // parameters are not equal. + if is_cubic && width != height { + self.webgl_error(InvalidValue); + return false; } - if type_.as_gl_constant() != active_uniform.Type() { + // GL_INVALID_VALUE is generated if internal_format is not an + // accepted format. + match internal_format { + constants::DEPTH_COMPONENT | + constants::ALPHA | + constants::RGB | + constants::RGBA | + constants::LUMINANCE | + constants::LUMINANCE_ALPHA => {}, + + _ => { + self.webgl_error(InvalidValue); + return false; + }, + } + + // GL_INVALID_OPERATION is generated if format does not + // match internal_format. + if format != internal_format { self.webgl_error(InvalidOperation); return false; } - return true; + // GL_INVALID_VALUE is generated if level is less than 0. + // + // GL_INVALID_VALUE is generated if width or height is less than 0 + // or greater than GL_MAX_TEXTURE_SIZE when target is GL_TEXTURE_2D or + // GL_MAX_CUBE_MAP_TEXTURE_SIZE when target is not GL_TEXTURE_2D. + // + // TODO(emilio): Check limits + if width < 0 || height < 0 || level < 0 { + self.webgl_error(InvalidValue); + return false; + } + + // GL_INVALID_VALUE is generated if level is greater than zero and the + // texture is not power of two. + if level > 0 && + (!(width as u32).is_power_of_two() || + !(height as u32).is_power_of_two()) { + self.webgl_error(InvalidValue); + return false; + } + + // GL_INVALID_VALUE is generated if border is not 0. + if border != 0 { + self.webgl_error(InvalidValue); + return false; + } + + // GL_INVALID_OPERATION is generated if type is GL_UNSIGNED_SHORT_4_4_4_4 or + // GL_UNSIGNED_SHORT_5_5_5_1 and format is not GL_RGBA. + // + // GL_INVALID_OPERATION is generated if type is + // GL_UNSIGNED_SHORT_5_6_5 and format is not GL_RGB. + match data_type { + constants::UNSIGNED_SHORT_4_4_4_4 | + constants::UNSIGNED_SHORT_5_5_5_1 if format != constants::RGBA => { + self.webgl_error(InvalidOperation); + return false; + }, + constants::UNSIGNED_SHORT_5_6_5 if format != constants::RGB => { + self.webgl_error(InvalidOperation); + return false; + }, + _ => {}, + } + + true + } + + fn tex_image_2d(&self, + target: u32, + level: i32, + internal_format: u32, + width: i32, + height: i32, + border: i32, + format: u32, + data_type: u32, + pixels: Vec<u8>) { // NB: pixels should NOT be premultipied + // This should be validated before reaching this function + debug_assert!(self.validate_tex_image_parameters(target, level, + internal_format, + width, height, + border, format, + data_type)); + + let slot = match target { + constants::TEXTURE_2D + => self.bound_texture_2d.get(), + _ => self.bound_texture_cube_map.get(), + }; + + let texture = slot.as_ref().expect("No bound texture found after validation"); + + if format == constants::RGBA && + data_type == constants::UNSIGNED_BYTE && + self.texture_unpacking_settings.get().contains(PREMULTIPLY_ALPHA) { + // TODO(emilio): premultiply here. + } + + // TODO(emilio): Flip Y axis if necessary here + + // TexImage2D depth is always equal to 1 + handle_potential_webgl_error!(self, texture.initialize(target, + width as u32, + height as u32, 1, + internal_format, + level as u32)); + + + // TODO(emilio): Invert axis, convert colorspace, premultiply alpha if requested + let msg = WebGLCommand::TexImage2D(target, level, internal_format as i32, + width, height, format, data_type, pixels); + + self.ipc_renderer + .send(CanvasMsg::WebGL(msg)) + .unwrap() } } @@ -483,6 +624,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { Err(e) => return self.webgl_error(e), } } else { + slot.set(None); // Unbind the current buffer self.ipc_renderer .send(CanvasMsg::WebGL(WebGLCommand::BindBuffer(target, 0))) @@ -526,7 +668,6 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { let slot = match target { constants::TEXTURE_2D => &self.bound_texture_2d, constants::TEXTURE_CUBE_MAP => &self.bound_texture_cube_map, - _ => return self.webgl_error(InvalidEnum), }; @@ -566,20 +707,24 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { constants::ELEMENT_ARRAY_BUFFER => self.bound_buffer_element_array.get(), _ => return self.webgl_error(InvalidEnum), }; + let bound_buffer = match bound_buffer { Some(bound_buffer) => bound_buffer, None => return self.webgl_error(InvalidValue), }; + match usage { constants::STREAM_DRAW | constants::STATIC_DRAW | constants::DYNAMIC_DRAW => (), _ => return self.webgl_error(InvalidEnum), } + let data = match data { Some(data) => data, None => return self.webgl_error(InvalidValue), }; + if let Some(data_vec) = array_buffer_view_to_vec::<u8>(data) { handle_potential_webgl_error!(self, bound_buffer.buffer_data(target, &data_vec, usage)); } else { @@ -1082,6 +1227,82 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { .unwrap() } + // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.3 + fn StencilFunc(&self, func: u32, ref_: i32, mask: u32) { + match func { + constants::NEVER | constants::LESS | constants::EQUAL | constants::LEQUAL | + constants::GREATER | constants::NOTEQUAL | constants::GEQUAL | constants::ALWAYS => + self.ipc_renderer + .send(CanvasMsg::WebGL(WebGLCommand::StencilFunc(func, ref_, mask))) + .unwrap(), + _ => self.webgl_error(InvalidEnum), + } + } + + // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.3 + fn StencilFuncSeparate(&self, face: u32, func: u32, ref_: i32, mask: u32) { + match face { + constants::FRONT | constants::BACK | constants::FRONT_AND_BACK => (), + _ => return self.webgl_error(InvalidEnum), + } + + match func { + constants::NEVER | constants::LESS | constants::EQUAL | constants::LEQUAL | + constants::GREATER | constants::NOTEQUAL | constants::GEQUAL | constants::ALWAYS => + self.ipc_renderer + .send(CanvasMsg::WebGL(WebGLCommand::StencilFuncSeparate(face, func, ref_, mask))) + .unwrap(), + _ => self.webgl_error(InvalidEnum), + } + } + + // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.3 + fn StencilMask(&self, mask: u32) { + self.ipc_renderer + .send(CanvasMsg::WebGL(WebGLCommand::StencilMask(mask))) + .unwrap() + } + + // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.3 + fn StencilMaskSeparate(&self, face: u32, mask: u32) { + match face { + constants::FRONT | constants::BACK | constants::FRONT_AND_BACK => + self.ipc_renderer + .send(CanvasMsg::WebGL(WebGLCommand::StencilMaskSeparate(face, mask))) + .unwrap(), + _ => return self.webgl_error(InvalidEnum), + } + } + + // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.3 + fn StencilOp(&self, fail: u32, zfail: u32, zpass: u32) { + if self.validate_stencil_actions(fail) && self.validate_stencil_actions(zfail) && + self.validate_stencil_actions(zpass) { + self.ipc_renderer + .send(CanvasMsg::WebGL(WebGLCommand::StencilOp(fail, zfail, zpass))) + .unwrap() + } else { + self.webgl_error(InvalidEnum) + } + } + + // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.3 + fn StencilOpSeparate(&self, face: u32, fail: u32, zfail: u32, zpass: u32) { + match face { + constants::FRONT | constants::BACK | constants::FRONT_AND_BACK => (), + _ => return self.webgl_error(InvalidEnum), + } + + if self.validate_stencil_actions(fail) && self.validate_stencil_actions(zfail) && + self.validate_stencil_actions(zpass) { + self.ipc_renderer + .send(CanvasMsg::WebGL(WebGLCommand::StencilOpSeparate(face, fail, zfail, zpass))) + .unwrap() + } else { + self.webgl_error(InvalidEnum) + } + } + // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9 fn LinkProgram(&self, program: Option<&WebGLProgram>) { if let Some(program) = program { @@ -1109,7 +1330,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { fn Uniform1f(&self, uniform: Option<&WebGLUniformLocation>, val: f32) { - if self.validate_uniform_parameters(uniform, UniformType::Float, Some(&[val])) { + if self.validate_uniform_parameters(uniform, UniformSetterType::Float, Some(&[val])) { self.ipc_renderer .send(CanvasMsg::WebGL(WebGLCommand::Uniform1f(uniform.unwrap().id(), val))) .unwrap() @@ -1120,7 +1341,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { fn Uniform1i(&self, uniform: Option<&WebGLUniformLocation>, val: i32) { - if self.validate_uniform_parameters(uniform, UniformType::Int, Some(&[val])) { + if self.validate_uniform_parameters(uniform, UniformSetterType::Int, Some(&[val])) { self.ipc_renderer .send(CanvasMsg::WebGL(WebGLCommand::Uniform1i(uniform.unwrap().id(), val))) .unwrap() @@ -1133,7 +1354,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { uniform: Option<&WebGLUniformLocation>, data: Option<*mut JSObject>) { let data_vec = data.and_then(|d| array_buffer_view_to_vec::<i32>(d)); - if self.validate_uniform_parameters(uniform, UniformType::Int, data_vec.as_ref().map(Vec::as_slice)) { + if self.validate_uniform_parameters(uniform, UniformSetterType::Int, data_vec.as_ref().map(Vec::as_slice)) { self.ipc_renderer .send(CanvasMsg::WebGL(WebGLCommand::Uniform1iv(uniform.unwrap().id(), data_vec.unwrap()))) .unwrap() @@ -1146,7 +1367,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { uniform: Option<&WebGLUniformLocation>, data: Option<*mut JSObject>) { let data_vec = data.and_then(|d| array_buffer_view_to_vec::<f32>(d)); - if self.validate_uniform_parameters(uniform, UniformType::Float, data_vec.as_ref().map(Vec::as_slice)) { + if self.validate_uniform_parameters(uniform, UniformSetterType::Float, data_vec.as_ref().map(Vec::as_slice)) { self.ipc_renderer .send(CanvasMsg::WebGL(WebGLCommand::Uniform1fv(uniform.unwrap().id(), data_vec.unwrap()))) .unwrap() @@ -1157,7 +1378,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { fn Uniform2f(&self, uniform: Option<&WebGLUniformLocation>, x: f32, y: f32) { - if self.validate_uniform_parameters(uniform, UniformType::FloatVec2, Some(&[x, y])) { + if self.validate_uniform_parameters(uniform, UniformSetterType::FloatVec2, Some(&[x, y])) { self.ipc_renderer .send(CanvasMsg::WebGL(WebGLCommand::Uniform2f(uniform.unwrap().id(), x, y))) .unwrap() @@ -1170,7 +1391,9 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { uniform: Option<&WebGLUniformLocation>, data: Option<*mut JSObject>) { let data_vec = data.and_then(|d| array_buffer_view_to_vec::<f32>(d)); - if self.validate_uniform_parameters(uniform, UniformType::FloatVec2, data_vec.as_ref().map(Vec::as_slice)) { + if self.validate_uniform_parameters(uniform, + UniformSetterType::FloatVec2, + data_vec.as_ref().map(Vec::as_slice)) { self.ipc_renderer .send(CanvasMsg::WebGL(WebGLCommand::Uniform2fv(uniform.unwrap().id(), data_vec.unwrap()))) .unwrap() @@ -1181,7 +1404,9 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { fn Uniform2i(&self, uniform: Option<&WebGLUniformLocation>, x: i32, y: i32) { - if self.validate_uniform_parameters(uniform, UniformType::IntVec2, Some(&[x, y])) { + if self.validate_uniform_parameters(uniform, + UniformSetterType::IntVec2, + Some(&[x, y])) { self.ipc_renderer .send(CanvasMsg::WebGL(WebGLCommand::Uniform2i(uniform.unwrap().id(), x, y))) .unwrap() @@ -1194,7 +1419,9 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { uniform: Option<&WebGLUniformLocation>, data: Option<*mut JSObject>) { let data_vec = data.and_then(|d| array_buffer_view_to_vec::<i32>(d)); - if self.validate_uniform_parameters(uniform, UniformType::IntVec2, data_vec.as_ref().map(Vec::as_slice)) { + if self.validate_uniform_parameters(uniform, + UniformSetterType::IntVec2, + data_vec.as_ref().map(Vec::as_slice)) { self.ipc_renderer .send(CanvasMsg::WebGL(WebGLCommand::Uniform2iv(uniform.unwrap().id(), data_vec.unwrap()))) .unwrap() @@ -1205,7 +1432,9 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { fn Uniform3f(&self, uniform: Option<&WebGLUniformLocation>, x: f32, y: f32, z: f32) { - if self.validate_uniform_parameters(uniform, UniformType::FloatVec3, Some(&[x, y, z])) { + if self.validate_uniform_parameters(uniform, + UniformSetterType::FloatVec3, + Some(&[x, y, z])) { self.ipc_renderer .send(CanvasMsg::WebGL(WebGLCommand::Uniform3f(uniform.unwrap().id(), x, y, z))) .unwrap() @@ -1218,7 +1447,9 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { uniform: Option<&WebGLUniformLocation>, data: Option<*mut JSObject>) { let data_vec = data.and_then(|d| array_buffer_view_to_vec::<f32>(d)); - if self.validate_uniform_parameters(uniform, UniformType::FloatVec3, data_vec.as_ref().map(Vec::as_slice)) { + if self.validate_uniform_parameters(uniform, + UniformSetterType::FloatVec3, + data_vec.as_ref().map(Vec::as_slice)) { self.ipc_renderer .send(CanvasMsg::WebGL(WebGLCommand::Uniform3fv(uniform.unwrap().id(), data_vec.unwrap()))) .unwrap() @@ -1229,7 +1460,9 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { fn Uniform3i(&self, uniform: Option<&WebGLUniformLocation>, x: i32, y: i32, z: i32) { - if self.validate_uniform_parameters(uniform, UniformType::IntVec3, Some(&[x, y, z])) { + if self.validate_uniform_parameters(uniform, + UniformSetterType::IntVec3, + Some(&[x, y, z])) { self.ipc_renderer .send(CanvasMsg::WebGL(WebGLCommand::Uniform3i(uniform.unwrap().id(), x, y, z))) .unwrap() @@ -1242,7 +1475,9 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { uniform: Option<&WebGLUniformLocation>, data: Option<*mut JSObject>) { let data_vec = data.and_then(|d| array_buffer_view_to_vec::<i32>(d)); - if self.validate_uniform_parameters(uniform, UniformType::IntVec3, data_vec.as_ref().map(Vec::as_slice)) { + if self.validate_uniform_parameters(uniform, + UniformSetterType::IntVec3, + data_vec.as_ref().map(Vec::as_slice)) { self.ipc_renderer .send(CanvasMsg::WebGL(WebGLCommand::Uniform3iv(uniform.unwrap().id(), data_vec.unwrap()))) .unwrap() @@ -1253,7 +1488,9 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { fn Uniform4i(&self, uniform: Option<&WebGLUniformLocation>, x: i32, y: i32, z: i32, w: i32) { - if self.validate_uniform_parameters(uniform, UniformType::IntVec4, Some(&[x, y, z, w])) { + if self.validate_uniform_parameters(uniform, + UniformSetterType::IntVec4, + Some(&[x, y, z, w])) { self.ipc_renderer .send(CanvasMsg::WebGL(WebGLCommand::Uniform4i(uniform.unwrap().id(), x, y, z, w))) .unwrap() @@ -1267,7 +1504,9 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { uniform: Option<&WebGLUniformLocation>, data: Option<*mut JSObject>) { let data_vec = data.and_then(|d| array_buffer_view_to_vec::<i32>(d)); - if self.validate_uniform_parameters(uniform, UniformType::IntVec4, data_vec.as_ref().map(Vec::as_slice)) { + if self.validate_uniform_parameters(uniform, + UniformSetterType::IntVec4, + data_vec.as_ref().map(Vec::as_slice)) { self.ipc_renderer .send(CanvasMsg::WebGL(WebGLCommand::Uniform4iv(uniform.unwrap().id(), data_vec.unwrap()))) .unwrap() @@ -1278,7 +1517,9 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { fn Uniform4f(&self, uniform: Option<&WebGLUniformLocation>, x: f32, y: f32, z: f32, w: f32) { - if self.validate_uniform_parameters(uniform, UniformType::FloatVec4, Some(&[x, y, z, w])) { + if self.validate_uniform_parameters(uniform, + UniformSetterType::FloatVec4, + Some(&[x, y, z, w])) { self.ipc_renderer .send(CanvasMsg::WebGL(WebGLCommand::Uniform4f(uniform.unwrap().id(), x, y, z, w))) .unwrap() @@ -1291,7 +1532,9 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { uniform: Option<&WebGLUniformLocation>, data: Option<*mut JSObject>) { let data_vec = data.and_then(|d| array_buffer_view_to_vec::<f32>(d)); - if self.validate_uniform_parameters(uniform, UniformType::FloatVec4, data_vec.as_ref().map(Vec::as_slice)) { + if self.validate_uniform_parameters(uniform, + UniformSetterType::FloatVec4, + data_vec.as_ref().map(Vec::as_slice)) { self.ipc_renderer .send(CanvasMsg::WebGL(WebGLCommand::Uniform4fv(uniform.unwrap().id(), data_vec.unwrap()))) .unwrap() @@ -1400,28 +1643,112 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { .unwrap() } + #[allow(unsafe_code)] // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.8 fn TexImage2D(&self, + _cx: *mut JSContext, target: u32, level: i32, internal_format: u32, + width: i32, + height: i32, + border: i32, format: u32, data_type: u32, - source: Option<ImageDataOrHTMLImageElementOrHTMLCanvasElementOrHTMLVideoElement>) { - let texture = match target { - constants::TEXTURE_2D => self.bound_texture_2d.get(), - constants::TEXTURE_CUBE_MAP => self.bound_texture_cube_map.get(), - _ => return self.webgl_error(InvalidEnum), + data: Option<*mut JSObject>) { + if !self.validate_tex_image_parameters(target, + level, + internal_format, + width, height, + border, + format, + data_type) { + return; // Error handled in validate() + } + + // TODO(emilio, #10693): Add type-safe wrappers to validations + let (element_size, components_per_element) = match data_type { + constants::UNSIGNED_BYTE => (1, 1), + constants::UNSIGNED_SHORT_5_6_5 => (2, 3), + constants::UNSIGNED_SHORT_5_5_5_1 | + constants::UNSIGNED_SHORT_4_4_4_4 => (2, 4), + _ => unreachable!(), // previously validated }; - if texture.is_none() { + + let components = match format { + constants::DEPTH_COMPONENT => 1, + constants::ALPHA => 1, + constants::LUMINANCE => 1, + constants::LUMINANCE_ALPHA => 2, + constants::RGB => 3, + constants::RGBA => 4, + _ => unreachable!(), // previously validated + }; + + // If data is non-null, the type of pixels must match the type of the + // data to be read. + // If it is UNSIGNED_BYTE, a Uint8Array must be supplied; + // if it is UNSIGNED_SHORT_5_6_5, UNSIGNED_SHORT_4_4_4_4, + // or UNSIGNED_SHORT_5_5_5_1, a Uint16Array must be supplied. + // If the types do not match, an INVALID_OPERATION error is generated. + let received_size = if let Some(data) = data { + if unsafe { array_buffer_view_data_checked::<u16>(data).is_some() } { + 2 + } else if unsafe { array_buffer_view_data_checked::<u8>(data).is_some() } { + 1 + } else { + return self.webgl_error(InvalidOperation); + } + } else { + element_size + }; + + if received_size != element_size { return self.webgl_error(InvalidOperation); } - // TODO(emilio): Validate more parameters + + // NOTE: width and height are positive or zero due to validate() + let expected_byte_length = width * height * element_size * components / components_per_element; + + + // If data is null, a buffer of sufficient size + // initialized to 0 is passed. + let buff = if let Some(data) = data { + array_buffer_view_to_vec::<u8>(data) + .expect("Can't reach here without being an ArrayBufferView!") + } else { + vec![0u8; expected_byte_length as usize] + }; + + if buff.len() != expected_byte_length as usize { + return self.webgl_error(InvalidOperation); + } + + self.tex_image_2d(target, level, + internal_format, + width, height, border, + format, data_type, buff) + } + + // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.8 + fn TexImage2D_(&self, + target: u32, + level: i32, + internal_format: u32, + format: u32, + data_type: u32, + source: Option<ImageDataOrHTMLImageElementOrHTMLCanvasElementOrHTMLVideoElement>) { let source = match source { Some(s) => s, None => return, }; + + // NOTE: Getting the pixels probably can be short-circuited if some + // parameter is invalid. + // + // Nontheless, since it's the error case, I'm not totally sure the + // complexity is worth it. let (pixels, size) = match source { ImageDataOrHTMLImageElementOrHTMLCanvasElementOrHTMLVideoElement::ImageData(image_data) => { let global = self.global(); @@ -1443,7 +1770,10 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { }; let size = Size2D::new(img.width as i32, img.height as i32); - // TODO(emilio): Validate that the format argument is coherent with the image. + + // TODO(emilio): Validate that the format argument + // is coherent with the image. + // // RGB8 should be easy to support too let mut data = match img.format { PixelFormat::RGBA8 => img.bytes.to_vec(), @@ -1454,8 +1784,9 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { (data, size) }, - // TODO(emilio): Getting canvas data is implemented in CanvasRenderingContext2D, but - // we need to refactor it moving it to `HTMLCanvasElement` and supporting WebGLContext + // TODO(emilio): Getting canvas data is implemented in CanvasRenderingContext2D, + // but we need to refactor it moving it to `HTMLCanvasElement` and support + // WebGLContext (probably via GetPixels()). ImageDataOrHTMLImageElementOrHTMLCanvasElementOrHTMLVideoElement::HTMLCanvasElement(canvas) => { let canvas = canvas.r(); if let Some((mut data, size)) = canvas.fetch_all_data() { @@ -1469,25 +1800,17 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { => unimplemented!(), }; - if size.width < 0 || size.height < 0 || level < 0 { - self.webgl_error(WebGLError::InvalidOperation); + // NB: Border must be zero + if !self.validate_tex_image_parameters(target, level, internal_format, + size.width, size.height, 0, + format, data_type) { + return; // Error handled in validate() } - // TODO(emilio): Invert axis, convert colorspace, premultiply alpha if requested - let msg = WebGLCommand::TexImage2D(target, level, internal_format as i32, - size.width, size.height, - format, data_type, pixels); - - // depth is always 1 when coming from html elements - handle_potential_webgl_error!(self, texture.unwrap().initialize(size.width as u32, - size.height as u32, - 1, - internal_format, - level as u32)); - - self.ipc_renderer - .send(CanvasMsg::WebGL(msg)) - .unwrap() + self.tex_image_2d(target, level, + internal_format, + size.width, size.height, 0, + format, data_type, pixels) } // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.8 @@ -1512,3 +1835,62 @@ impl LayoutCanvasWebGLRenderingContextHelpers for LayoutJS<WebGLRenderingContext (*self.unsafe_get()).ipc_renderer.clone() } } + +#[derive(Debug, PartialEq)] +pub enum UniformSetterType { + Int, + IntVec2, + IntVec3, + IntVec4, + Float, + FloatVec2, + FloatVec3, + FloatVec4, +} + +impl UniformSetterType { + pub fn element_count(&self) -> usize { + match *self { + UniformSetterType::Int => 1, + UniformSetterType::IntVec2 => 2, + UniformSetterType::IntVec3 => 3, + UniformSetterType::IntVec4 => 4, + UniformSetterType::Float => 1, + UniformSetterType::FloatVec2 => 2, + UniformSetterType::FloatVec3 => 3, + UniformSetterType::FloatVec4 => 4, + } + } + + pub fn is_compatible_with(&self, gl_type: u32) -> bool { + gl_type == self.as_gl_constant() || match *self { + // Sampler uniform variables have an index value (the index of the + // texture), and as such they have to be set as ints + UniformSetterType::Int => gl_type == constants::SAMPLER_2D || + gl_type == constants::SAMPLER_CUBE, + // Don't ask me why, but it seems we must allow setting bool + // uniforms with uniform1f. + // + // See the WebGL conformance test + // conformance/uniforms/gl-uniform-bool.html + UniformSetterType::Float => gl_type == constants::BOOL, + UniformSetterType::FloatVec2 => gl_type == constants::BOOL_VEC2, + UniformSetterType::FloatVec3 => gl_type == constants::BOOL_VEC3, + UniformSetterType::FloatVec4 => gl_type == constants::BOOL_VEC4, + _ => false, + } + } + + fn as_gl_constant(&self) -> u32 { + match *self { + UniformSetterType::Int => constants::INT, + UniformSetterType::IntVec2 => constants::INT_VEC2, + UniformSetterType::IntVec3 => constants::INT_VEC3, + UniformSetterType::IntVec4 => constants::INT_VEC4, + UniformSetterType::Float => constants::FLOAT, + UniformSetterType::FloatVec2 => constants::FLOAT_VEC2, + UniformSetterType::FloatVec3 => constants::FLOAT_VEC3, + UniformSetterType::FloatVec4 => constants::FLOAT_VEC4, + } + } +} diff --git a/components/script/dom/webglshader.rs b/components/script/dom/webglshader.rs index 495417065d7..eb930a69f13 100644 --- a/components/script/dom/webglshader.rs +++ b/components/script/dom/webglshader.rs @@ -116,6 +116,11 @@ impl WebGLShader { } *self.info_log.borrow_mut() = Some(validator.info_log()); + // TODO(emilio): More data (like uniform data) should be collected + // here to properly validate uniforms. + // + // This requires a more complex interface with ANGLE, using C++ + // bindings and being extremely cautious about destructing things. } } diff --git a/components/script/dom/webgltexture.rs b/components/script/dom/webgltexture.rs index 5bb7d5ff734..e92435ce304 100644 --- a/components/script/dom/webgltexture.rs +++ b/components/script/dom/webgltexture.rs @@ -33,7 +33,6 @@ pub struct WebGLTexture { /// The target to which this texture was bound the first time target: Cell<Option<u32>>, is_deleted: Cell<bool>, - is_initialized: Cell<bool>, /// Stores information about mipmap levels and cubemap faces. #[ignore_heap_size_of = "Arrays are cumbersome"] image_info_array: DOMRefCell<[ImageInfo; MAX_LEVEL_COUNT * MAX_FACE_COUNT]>, @@ -51,7 +50,6 @@ impl WebGLTexture { id: id, target: Cell::new(None), is_deleted: Cell::new(false), - is_initialized: Cell::new(false), face_count: Cell::new(0), base_mipmap_level: 0, image_info_array: DOMRefCell::new([ImageInfo::new(); MAX_LEVEL_COUNT * MAX_FACE_COUNT]), @@ -105,7 +103,13 @@ impl WebGLTexture { Ok(()) } - pub fn initialize(&self, width: u32, height: u32, depth: u32, internal_format: u32, level: u32) -> WebGLResult<()> { + pub fn initialize(&self, + target: u32, + width: u32, + height: u32, + depth: u32, + internal_format: u32, + level: u32) -> WebGLResult<()> { let image_info = ImageInfo { width: width, height: height, @@ -113,10 +117,18 @@ impl WebGLTexture { internal_format: Some(internal_format), is_initialized: true, }; - self.set_image_infos_at_level(level, image_info); - self.is_initialized.set(true); + let face = match target { + constants::TEXTURE_2D | constants::TEXTURE_CUBE_MAP_POSITIVE_X => 0, + constants::TEXTURE_CUBE_MAP_NEGATIVE_X => 1, + constants::TEXTURE_CUBE_MAP_POSITIVE_Y => 2, + constants::TEXTURE_CUBE_MAP_NEGATIVE_Y => 3, + constants::TEXTURE_CUBE_MAP_POSITIVE_Z => 4, + constants::TEXTURE_CUBE_MAP_NEGATIVE_Z => 5, + _ => unreachable!(), + }; + self.set_image_infos_at_level_and_face(level, face, image_info); Ok(()) } @@ -130,12 +142,12 @@ impl WebGLTexture { }; let base_image_info = self.base_image_info().unwrap(); - if !base_image_info.is_initialized() { return Err(WebGLError::InvalidOperation); } - if target == constants::TEXTURE_CUBE_MAP && !self.is_cube_complete() { + let is_cubic = target == constants::TEXTURE_CUBE_MAP; + if is_cubic && !self.is_cube_complete() { return Err(WebGLError::InvalidOperation); } @@ -262,6 +274,8 @@ impl WebGLTexture { } fn is_cube_complete(&self) -> bool { + debug_assert!(self.face_count.get() == 6); + let image_info = self.base_image_info().unwrap(); if !image_info.is_defined() { return false; @@ -294,11 +308,16 @@ impl WebGLTexture { fn set_image_infos_at_level(&self, level: u32, image_info: ImageInfo) { for face in 0..self.face_count.get() { - let pos = (level * self.face_count.get() as u32) + face as u32; - self.image_info_array.borrow_mut()[pos as usize] = image_info; + self.set_image_infos_at_level_and_face(level, face, image_info); } } + fn set_image_infos_at_level_and_face(&self, level: u32, face: u8, image_info: ImageInfo) { + debug_assert!(face < self.face_count.get()); + let pos = (level * self.face_count.get() as u32) + face as u32; + self.image_info_array.borrow_mut()[pos as usize] = image_info; + } + fn base_image_info(&self) -> Option<ImageInfo> { assert!((self.base_mipmap_level as usize) < MAX_LEVEL_COUNT); @@ -341,7 +360,7 @@ impl ImageInfo { } fn is_defined(&self) -> bool { - !self.internal_format.is_none() + self.internal_format.is_some() } fn get_max_mimap_levels(&self) -> u32 { diff --git a/components/script/dom/webgluniformlocation.rs b/components/script/dom/webgluniformlocation.rs index 43244ec4a33..2f8e3331cd2 100644 --- a/components/script/dom/webgluniformlocation.rs +++ b/components/script/dom/webgluniformlocation.rs @@ -28,10 +28,7 @@ impl WebGLUniformLocation { reflect_dom_object( box WebGLUniformLocation::new_inherited(id, program_id), global, WebGLUniformLocationBinding::Wrap) } -} - -impl WebGLUniformLocation { pub fn id(&self) -> i32 { self.id } diff --git a/components/script/dom/webidls/Attr.webidl b/components/script/dom/webidls/Attr.webidl index 171715205bc..79449804081 100644 --- a/components/script/dom/webidls/Attr.webidl +++ b/components/script/dom/webidls/Attr.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/Blob.webidl b/components/script/dom/webidls/Blob.webidl index bad890fafdc..f0e3413d086 100644 --- a/components/script/dom/webidls/Blob.webidl +++ b/components/script/dom/webidls/Blob.webidl @@ -1,11 +1,9 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ // http://dev.w3.org/2006/webapi/FileAPI/#dfn-Blob -[Constructor, - Constructor(sequence<(/*ArrayBuffer or ArrayBufferView or */Blob or DOMString)> blobParts, +[Constructor(optional sequence<(/*ArrayBuffer or ArrayBufferView or */Blob or DOMString)> blobParts, optional BlobPropertyBag options), Exposed=Window/*,Worker*/] interface Blob { diff --git a/components/script/dom/webidls/Bluetooth.webidl b/components/script/dom/webidls/Bluetooth.webidl index 3ff1c91efab..e2a7bb57130 100644 --- a/components/script/dom/webidls/Bluetooth.webidl +++ b/components/script/dom/webidls/Bluetooth.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/BluetoothAdvertisingData.webidl b/components/script/dom/webidls/BluetoothAdvertisingData.webidl index 914b57bfc7e..e49024df669 100644 --- a/components/script/dom/webidls/BluetoothAdvertisingData.webidl +++ b/components/script/dom/webidls/BluetoothAdvertisingData.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/BluetoothCharacteristicProperties.webidl b/components/script/dom/webidls/BluetoothCharacteristicProperties.webidl index bd6366b1681..9e7e2bb3831 100644 --- a/components/script/dom/webidls/BluetoothCharacteristicProperties.webidl +++ b/components/script/dom/webidls/BluetoothCharacteristicProperties.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/BluetoothDevice.webidl b/components/script/dom/webidls/BluetoothDevice.webidl index bb055c1c177..1c0c56cd1e7 100644 --- a/components/script/dom/webidls/BluetoothDevice.webidl +++ b/components/script/dom/webidls/BluetoothDevice.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/BluetoothRemoteGATTCharacteristic.webidl b/components/script/dom/webidls/BluetoothRemoteGATTCharacteristic.webidl index 411cd04baa7..2648d0bf654 100644 --- a/components/script/dom/webidls/BluetoothRemoteGATTCharacteristic.webidl +++ b/components/script/dom/webidls/BluetoothRemoteGATTCharacteristic.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/BluetoothRemoteGATTDescriptor.webidl b/components/script/dom/webidls/BluetoothRemoteGATTDescriptor.webidl index eb5b056f211..dc367a5fe8e 100644 --- a/components/script/dom/webidls/BluetoothRemoteGATTDescriptor.webidl +++ b/components/script/dom/webidls/BluetoothRemoteGATTDescriptor.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/BluetoothRemoteGATTServer.webidl b/components/script/dom/webidls/BluetoothRemoteGATTServer.webidl index ebeb933bdb9..8d360a7b31a 100644 --- a/components/script/dom/webidls/BluetoothRemoteGATTServer.webidl +++ b/components/script/dom/webidls/BluetoothRemoteGATTServer.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/BluetoothRemoteGATTService.webidl b/components/script/dom/webidls/BluetoothRemoteGATTService.webidl index a02af691a60..63ae0e090a5 100644 --- a/components/script/dom/webidls/BluetoothRemoteGATTService.webidl +++ b/components/script/dom/webidls/BluetoothRemoteGATTService.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/BluetoothUUID.webidl b/components/script/dom/webidls/BluetoothUUID.webidl index 497be0a0fbc..00421cde65a 100644 --- a/components/script/dom/webidls/BluetoothUUID.webidl +++ b/components/script/dom/webidls/BluetoothUUID.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/BrowserElement.webidl b/components/script/dom/webidls/BrowserElement.webidl index 6e658a1b5b7..a244f9575a7 100644 --- a/components/script/dom/webidls/BrowserElement.webidl +++ b/components/script/dom/webidls/BrowserElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/CSSStyleDeclaration.webidl b/components/script/dom/webidls/CSSStyleDeclaration.webidl index 10cf77ccc83..567167024ee 100644 --- a/components/script/dom/webidls/CSSStyleDeclaration.webidl +++ b/components/script/dom/webidls/CSSStyleDeclaration.webidl @@ -310,5 +310,7 @@ partial interface CSSStyleDeclaration { [SetterThrows, TreatNullAs=EmptyString] attribute DOMString flexDirection; [SetterThrows, TreatNullAs=EmptyString] attribute DOMString flex-direction; + [SetterThrows, TreatNullAs=EmptyString] attribute DOMString flexBasis; + [SetterThrows, TreatNullAs=EmptyString] attribute DOMString flex-basis; [SetterThrows, TreatNullAs=EmptyString] attribute DOMString order; }; diff --git a/components/script/dom/webidls/CanvasGradient.webidl b/components/script/dom/webidls/CanvasGradient.webidl index bcafae2927b..cbfa3cd690a 100644 --- a/components/script/dom/webidls/CanvasGradient.webidl +++ b/components/script/dom/webidls/CanvasGradient.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/CanvasPattern.webidl b/components/script/dom/webidls/CanvasPattern.webidl index a1ddf8982c0..3ef2f583b91 100644 --- a/components/script/dom/webidls/CanvasPattern.webidl +++ b/components/script/dom/webidls/CanvasPattern.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/CanvasRenderingContext2D.webidl b/components/script/dom/webidls/CanvasRenderingContext2D.webidl index acd589e280f..771b72e49fe 100644 --- a/components/script/dom/webidls/CanvasRenderingContext2D.webidl +++ b/components/script/dom/webidls/CanvasRenderingContext2D.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/CharacterData.webidl b/components/script/dom/webidls/CharacterData.webidl index a7be1295aeb..bd092dfec09 100644 --- a/components/script/dom/webidls/CharacterData.webidl +++ b/components/script/dom/webidls/CharacterData.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/ChildNode.webidl b/components/script/dom/webidls/ChildNode.webidl index bf52c4d90b5..1506ec17c21 100644 --- a/components/script/dom/webidls/ChildNode.webidl +++ b/components/script/dom/webidls/ChildNode.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/Comment.webidl b/components/script/dom/webidls/Comment.webidl index cd18988a8ac..d49897f8862 100644 --- a/components/script/dom/webidls/Comment.webidl +++ b/components/script/dom/webidls/Comment.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/Console.webidl b/components/script/dom/webidls/Console.webidl index 0f09b710377..5d873fed6d7 100644 --- a/components/script/dom/webidls/Console.webidl +++ b/components/script/dom/webidls/Console.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/Crypto.webidl b/components/script/dom/webidls/Crypto.webidl index d0d7c4303d7..d8d05ead60b 100644 --- a/components/script/dom/webidls/Crypto.webidl +++ b/components/script/dom/webidls/Crypto.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/CustomEvent.webidl b/components/script/dom/webidls/CustomEvent.webidl index 1fa0f50b7e8..9430fc81e2c 100644 --- a/components/script/dom/webidls/CustomEvent.webidl +++ b/components/script/dom/webidls/CustomEvent.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/DOMException.webidl b/components/script/dom/webidls/DOMException.webidl index 4e1620aa13b..90168f3755b 100644 --- a/components/script/dom/webidls/DOMException.webidl +++ b/components/script/dom/webidls/DOMException.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/DOMImplementation.webidl b/components/script/dom/webidls/DOMImplementation.webidl index 3adb5f1048e..4a29a3ef72b 100644 --- a/components/script/dom/webidls/DOMImplementation.webidl +++ b/components/script/dom/webidls/DOMImplementation.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/DOMPoint.webidl b/components/script/dom/webidls/DOMPoint.webidl index b8fc78d571f..64daf13c08c 100644 --- a/components/script/dom/webidls/DOMPoint.webidl +++ b/components/script/dom/webidls/DOMPoint.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/DOMPointReadOnly.webidl b/components/script/dom/webidls/DOMPointReadOnly.webidl index 021d129f132..94a21f4a1cd 100644 --- a/components/script/dom/webidls/DOMPointReadOnly.webidl +++ b/components/script/dom/webidls/DOMPointReadOnly.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/DOMQuad.webidl b/components/script/dom/webidls/DOMQuad.webidl index 0f3f11fac41..bca0ec99edc 100644 --- a/components/script/dom/webidls/DOMQuad.webidl +++ b/components/script/dom/webidls/DOMQuad.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/DOMRect.webidl b/components/script/dom/webidls/DOMRect.webidl index 9ea5933c3f9..8469f11a1fd 100644 --- a/components/script/dom/webidls/DOMRect.webidl +++ b/components/script/dom/webidls/DOMRect.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/DOMRectList.webidl b/components/script/dom/webidls/DOMRectList.webidl index 064014e9abe..9d67ec40cc8 100644 --- a/components/script/dom/webidls/DOMRectList.webidl +++ b/components/script/dom/webidls/DOMRectList.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/DOMRectReadOnly.webidl b/components/script/dom/webidls/DOMRectReadOnly.webidl index 937ed4eb478..11d9186bd36 100644 --- a/components/script/dom/webidls/DOMRectReadOnly.webidl +++ b/components/script/dom/webidls/DOMRectReadOnly.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/DOMStringMap.webidl b/components/script/dom/webidls/DOMStringMap.webidl index b74e8227f21..f9801a45174 100644 --- a/components/script/dom/webidls/DOMStringMap.webidl +++ b/components/script/dom/webidls/DOMStringMap.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/DOMTokenList.webidl b/components/script/dom/webidls/DOMTokenList.webidl index 21be3590c0a..1b50c34c918 100644 --- a/components/script/dom/webidls/DOMTokenList.webidl +++ b/components/script/dom/webidls/DOMTokenList.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/Document.webidl b/components/script/dom/webidls/Document.webidl index 1d12bc7aabb..b211fe7be58 100644 --- a/components/script/dom/webidls/Document.webidl +++ b/components/script/dom/webidls/Document.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/DocumentFragment.webidl b/components/script/dom/webidls/DocumentFragment.webidl index eb2b7d6696d..7573dd9f22b 100644 --- a/components/script/dom/webidls/DocumentFragment.webidl +++ b/components/script/dom/webidls/DocumentFragment.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/DocumentType.webidl b/components/script/dom/webidls/DocumentType.webidl index b864d3a6496..1f7b0b83599 100644 --- a/components/script/dom/webidls/DocumentType.webidl +++ b/components/script/dom/webidls/DocumentType.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/Element.webidl b/components/script/dom/webidls/Element.webidl index 9bc5ff64597..bec84acc8ce 100644 --- a/components/script/dom/webidls/Element.webidl +++ b/components/script/dom/webidls/Element.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ @@ -36,6 +35,8 @@ interface Element : Node { [Pure] sequence<DOMString> getAttributeNames(); [Pure] + boolean hasAttributes(); + [Pure] DOMString? getAttribute(DOMString name); [Pure] DOMString? getAttributeNS(DOMString? namespace, DOMString localName); @@ -81,6 +82,15 @@ partial interface Element { DOMRectList getClientRects(); DOMRect getBoundingClientRect(); + void scroll(optional ScrollToOptions options); + void scroll(unrestricted double x, unrestricted double y); + + void scrollTo(optional ScrollToOptions options); + void scrollTo(unrestricted double x, unrestricted double y); + void scrollBy(optional ScrollToOptions options); + void scrollBy(unrestricted double x, unrestricted double y); + attribute unrestricted double scrollTop; + attribute unrestricted double scrollLeft; readonly attribute long scrollWidth; readonly attribute long scrollHeight; diff --git a/components/script/dom/webidls/ElementCSSInlineStyle.webidl b/components/script/dom/webidls/ElementCSSInlineStyle.webidl index bf7a7b92b9e..4431e7ab778 100644 --- a/components/script/dom/webidls/ElementCSSInlineStyle.webidl +++ b/components/script/dom/webidls/ElementCSSInlineStyle.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/Event.webidl b/components/script/dom/webidls/Event.webidl index 47690b7c67f..05f4b7b5898 100644 --- a/components/script/dom/webidls/Event.webidl +++ b/components/script/dom/webidls/Event.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/EventHandler.webidl b/components/script/dom/webidls/EventHandler.webidl index 318b81403c4..f001f0d184d 100644 --- a/components/script/dom/webidls/EventHandler.webidl +++ b/components/script/dom/webidls/EventHandler.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/EventListener.webidl b/components/script/dom/webidls/EventListener.webidl index d05f69fed1f..9f37b80687c 100644 --- a/components/script/dom/webidls/EventListener.webidl +++ b/components/script/dom/webidls/EventListener.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/EventSource.webidl b/components/script/dom/webidls/EventSource.webidl index 2d6717d5af9..cfe4848dbc3 100644 --- a/components/script/dom/webidls/EventSource.webidl +++ b/components/script/dom/webidls/EventSource.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/EventTarget.webidl b/components/script/dom/webidls/EventTarget.webidl index 403b1287fe4..39a65374c30 100644 --- a/components/script/dom/webidls/EventTarget.webidl +++ b/components/script/dom/webidls/EventTarget.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/File.webidl b/components/script/dom/webidls/File.webidl index 362d4fa251d..7c0d4be7c29 100644 --- a/components/script/dom/webidls/File.webidl +++ b/components/script/dom/webidls/File.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/FileList.webidl b/components/script/dom/webidls/FileList.webidl index aa1f9791427..d176e79e06f 100644 --- a/components/script/dom/webidls/FileList.webidl +++ b/components/script/dom/webidls/FileList.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/FileReader.webidl b/components/script/dom/webidls/FileReader.webidl index 9f2b70c78a9..2b111ef7ab6 100644 --- a/components/script/dom/webidls/FileReader.webidl +++ b/components/script/dom/webidls/FileReader.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/FocusEvent.webidl b/components/script/dom/webidls/FocusEvent.webidl index 0c6cf6e6bfb..42e560b72b4 100644 --- a/components/script/dom/webidls/FocusEvent.webidl +++ b/components/script/dom/webidls/FocusEvent.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/ForceTouchEvent.webidl b/components/script/dom/webidls/ForceTouchEvent.webidl index a5f8ceef9a4..4c184214cae 100644 --- a/components/script/dom/webidls/ForceTouchEvent.webidl +++ b/components/script/dom/webidls/ForceTouchEvent.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/FormData.webidl b/components/script/dom/webidls/FormData.webidl index da8a0ca8dde..2e4348ace1e 100644 --- a/components/script/dom/webidls/FormData.webidl +++ b/components/script/dom/webidls/FormData.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/Function.webidl b/components/script/dom/webidls/Function.webidl index 1706b1c57ca..08513dfadf3 100644 --- a/components/script/dom/webidls/Function.webidl +++ b/components/script/dom/webidls/Function.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLAnchorElement.webidl b/components/script/dom/webidls/HTMLAnchorElement.webidl index bfca9b31b7d..daf739ac0b5 100644 --- a/components/script/dom/webidls/HTMLAnchorElement.webidl +++ b/components/script/dom/webidls/HTMLAnchorElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLAppletElement.webidl b/components/script/dom/webidls/HTMLAppletElement.webidl index 40300a645c6..9cfeb4183df 100644 --- a/components/script/dom/webidls/HTMLAppletElement.webidl +++ b/components/script/dom/webidls/HTMLAppletElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLAreaElement.webidl b/components/script/dom/webidls/HTMLAreaElement.webidl index a6568bd0b6b..6f1a6891518 100644 --- a/components/script/dom/webidls/HTMLAreaElement.webidl +++ b/components/script/dom/webidls/HTMLAreaElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLAudioElement.webidl b/components/script/dom/webidls/HTMLAudioElement.webidl index 5161af1a0e0..09ad8a7cdb3 100644 --- a/components/script/dom/webidls/HTMLAudioElement.webidl +++ b/components/script/dom/webidls/HTMLAudioElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLBRElement.webidl b/components/script/dom/webidls/HTMLBRElement.webidl index b1770270986..ab277396bdd 100644 --- a/components/script/dom/webidls/HTMLBRElement.webidl +++ b/components/script/dom/webidls/HTMLBRElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLBaseElement.webidl b/components/script/dom/webidls/HTMLBaseElement.webidl index 549a6df1004..a13be544cb9 100644 --- a/components/script/dom/webidls/HTMLBaseElement.webidl +++ b/components/script/dom/webidls/HTMLBaseElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLBodyElement.webidl b/components/script/dom/webidls/HTMLBodyElement.webidl index 36a7a99f996..36c6f4d64e3 100644 --- a/components/script/dom/webidls/HTMLBodyElement.webidl +++ b/components/script/dom/webidls/HTMLBodyElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLButtonElement.webidl b/components/script/dom/webidls/HTMLButtonElement.webidl index f928031d5cd..7f663fd305f 100644 --- a/components/script/dom/webidls/HTMLButtonElement.webidl +++ b/components/script/dom/webidls/HTMLButtonElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLCanvasElement.webidl b/components/script/dom/webidls/HTMLCanvasElement.webidl index d427f32ade1..fbb53016605 100644 --- a/components/script/dom/webidls/HTMLCanvasElement.webidl +++ b/components/script/dom/webidls/HTMLCanvasElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLCollection.webidl b/components/script/dom/webidls/HTMLCollection.webidl index 350a553ff0b..79f82046652 100644 --- a/components/script/dom/webidls/HTMLCollection.webidl +++ b/components/script/dom/webidls/HTMLCollection.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLDListElement.webidl b/components/script/dom/webidls/HTMLDListElement.webidl index e64c3d41782..b6275107db5 100644 --- a/components/script/dom/webidls/HTMLDListElement.webidl +++ b/components/script/dom/webidls/HTMLDListElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLDataElement.webidl b/components/script/dom/webidls/HTMLDataElement.webidl index 879a26325c9..be932250678 100644 --- a/components/script/dom/webidls/HTMLDataElement.webidl +++ b/components/script/dom/webidls/HTMLDataElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLDataListElement.webidl b/components/script/dom/webidls/HTMLDataListElement.webidl index 2324d760d45..b8673b21c77 100644 --- a/components/script/dom/webidls/HTMLDataListElement.webidl +++ b/components/script/dom/webidls/HTMLDataListElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLDetailsElement.webidl b/components/script/dom/webidls/HTMLDetailsElement.webidl index 062444d8312..811465c1c02 100644 --- a/components/script/dom/webidls/HTMLDetailsElement.webidl +++ b/components/script/dom/webidls/HTMLDetailsElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLDialogElement.webidl b/components/script/dom/webidls/HTMLDialogElement.webidl index 9910914e287..78a14e1e2a0 100644 --- a/components/script/dom/webidls/HTMLDialogElement.webidl +++ b/components/script/dom/webidls/HTMLDialogElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLDirectoryElement.webidl b/components/script/dom/webidls/HTMLDirectoryElement.webidl index d2ee8f11fa7..5df65cd90c2 100644 --- a/components/script/dom/webidls/HTMLDirectoryElement.webidl +++ b/components/script/dom/webidls/HTMLDirectoryElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLDivElement.webidl b/components/script/dom/webidls/HTMLDivElement.webidl index cd86d9e9330..46ee67ee0e5 100644 --- a/components/script/dom/webidls/HTMLDivElement.webidl +++ b/components/script/dom/webidls/HTMLDivElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLElement.webidl b/components/script/dom/webidls/HTMLElement.webidl index 8b2e01ea7c6..9778985dd40 100644 --- a/components/script/dom/webidls/HTMLElement.webidl +++ b/components/script/dom/webidls/HTMLElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLEmbedElement.webidl b/components/script/dom/webidls/HTMLEmbedElement.webidl index 3610a87e588..26fa4c3ea5a 100644 --- a/components/script/dom/webidls/HTMLEmbedElement.webidl +++ b/components/script/dom/webidls/HTMLEmbedElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLFieldSetElement.webidl b/components/script/dom/webidls/HTMLFieldSetElement.webidl index 1a009b523dd..d041cdd612f 100644 --- a/components/script/dom/webidls/HTMLFieldSetElement.webidl +++ b/components/script/dom/webidls/HTMLFieldSetElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLFontElement.webidl b/components/script/dom/webidls/HTMLFontElement.webidl index aa6d7167156..74db3f45057 100644 --- a/components/script/dom/webidls/HTMLFontElement.webidl +++ b/components/script/dom/webidls/HTMLFontElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLFormControlsCollection.webidl b/components/script/dom/webidls/HTMLFormControlsCollection.webidl index c2ff68c72fa..a010b771c64 100644 --- a/components/script/dom/webidls/HTMLFormControlsCollection.webidl +++ b/components/script/dom/webidls/HTMLFormControlsCollection.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLFormElement.webidl b/components/script/dom/webidls/HTMLFormElement.webidl index eebe0b52c62..a56b83235b6 100644 --- a/components/script/dom/webidls/HTMLFormElement.webidl +++ b/components/script/dom/webidls/HTMLFormElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLFrameElement.webidl b/components/script/dom/webidls/HTMLFrameElement.webidl index 10c5bf49cfd..ecac61f6860 100644 --- a/components/script/dom/webidls/HTMLFrameElement.webidl +++ b/components/script/dom/webidls/HTMLFrameElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLFrameSetElement.webidl b/components/script/dom/webidls/HTMLFrameSetElement.webidl index 87ea131d978..f35de93e545 100644 --- a/components/script/dom/webidls/HTMLFrameSetElement.webidl +++ b/components/script/dom/webidls/HTMLFrameSetElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLHRElement.webidl b/components/script/dom/webidls/HTMLHRElement.webidl index e3ba6113748..56e2f6ae19b 100644 --- a/components/script/dom/webidls/HTMLHRElement.webidl +++ b/components/script/dom/webidls/HTMLHRElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLHeadElement.webidl b/components/script/dom/webidls/HTMLHeadElement.webidl index a2115d55281..18e2b351d64 100644 --- a/components/script/dom/webidls/HTMLHeadElement.webidl +++ b/components/script/dom/webidls/HTMLHeadElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLHeadingElement.webidl b/components/script/dom/webidls/HTMLHeadingElement.webidl index 3997997db75..2c47d6fa10f 100644 --- a/components/script/dom/webidls/HTMLHeadingElement.webidl +++ b/components/script/dom/webidls/HTMLHeadingElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLHtmlElement.webidl b/components/script/dom/webidls/HTMLHtmlElement.webidl index c505aa8aff9..ed409b1b84c 100644 --- a/components/script/dom/webidls/HTMLHtmlElement.webidl +++ b/components/script/dom/webidls/HTMLHtmlElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLHyperlinkElementUtils.webidl b/components/script/dom/webidls/HTMLHyperlinkElementUtils.webidl index 0efcea09710..7d12915eac5 100644 --- a/components/script/dom/webidls/HTMLHyperlinkElementUtils.webidl +++ b/components/script/dom/webidls/HTMLHyperlinkElementUtils.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLIFrameElement.webidl b/components/script/dom/webidls/HTMLIFrameElement.webidl index 4f4a42fddff..52c11f238ae 100644 --- a/components/script/dom/webidls/HTMLIFrameElement.webidl +++ b/components/script/dom/webidls/HTMLIFrameElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLImageElement.webidl b/components/script/dom/webidls/HTMLImageElement.webidl index 69bd2f7d4c1..88e0dae8d3b 100644 --- a/components/script/dom/webidls/HTMLImageElement.webidl +++ b/components/script/dom/webidls/HTMLImageElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLInputElement.webidl b/components/script/dom/webidls/HTMLInputElement.webidl index 66907c5cd23..48ec3c0ac7b 100644 --- a/components/script/dom/webidls/HTMLInputElement.webidl +++ b/components/script/dom/webidls/HTMLInputElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLLIElement.webidl b/components/script/dom/webidls/HTMLLIElement.webidl index 50dfb947ad1..a2fcd9cc7d3 100644 --- a/components/script/dom/webidls/HTMLLIElement.webidl +++ b/components/script/dom/webidls/HTMLLIElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLLabelElement.webidl b/components/script/dom/webidls/HTMLLabelElement.webidl index 22659c26e76..8acb1f312c8 100644 --- a/components/script/dom/webidls/HTMLLabelElement.webidl +++ b/components/script/dom/webidls/HTMLLabelElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLLegendElement.webidl b/components/script/dom/webidls/HTMLLegendElement.webidl index 0fa9227975b..c137d6db66a 100644 --- a/components/script/dom/webidls/HTMLLegendElement.webidl +++ b/components/script/dom/webidls/HTMLLegendElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLLinkElement.webidl b/components/script/dom/webidls/HTMLLinkElement.webidl index 79b658d1c69..1bcf2e727f2 100644 --- a/components/script/dom/webidls/HTMLLinkElement.webidl +++ b/components/script/dom/webidls/HTMLLinkElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLMapElement.webidl b/components/script/dom/webidls/HTMLMapElement.webidl index f4c5be4ddc1..5e21b52916e 100644 --- a/components/script/dom/webidls/HTMLMapElement.webidl +++ b/components/script/dom/webidls/HTMLMapElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLMediaElement.webidl b/components/script/dom/webidls/HTMLMediaElement.webidl index b7da37495f8..277178732c7 100644 --- a/components/script/dom/webidls/HTMLMediaElement.webidl +++ b/components/script/dom/webidls/HTMLMediaElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLMetaElement.webidl b/components/script/dom/webidls/HTMLMetaElement.webidl index e179b47f964..20afc297a20 100644 --- a/components/script/dom/webidls/HTMLMetaElement.webidl +++ b/components/script/dom/webidls/HTMLMetaElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLMeterElement.webidl b/components/script/dom/webidls/HTMLMeterElement.webidl index 29f6ed89205..c6abe4aef46 100644 --- a/components/script/dom/webidls/HTMLMeterElement.webidl +++ b/components/script/dom/webidls/HTMLMeterElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLModElement.webidl b/components/script/dom/webidls/HTMLModElement.webidl index 0406920b951..beda6f97dcc 100644 --- a/components/script/dom/webidls/HTMLModElement.webidl +++ b/components/script/dom/webidls/HTMLModElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLOListElement.webidl b/components/script/dom/webidls/HTMLOListElement.webidl index d65c35d8a02..02dc3d1146f 100644 --- a/components/script/dom/webidls/HTMLOListElement.webidl +++ b/components/script/dom/webidls/HTMLOListElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLObjectElement.webidl b/components/script/dom/webidls/HTMLObjectElement.webidl index 5feb3c721b0..ce1d0ff1f8c 100644 --- a/components/script/dom/webidls/HTMLObjectElement.webidl +++ b/components/script/dom/webidls/HTMLObjectElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLOptGroupElement.webidl b/components/script/dom/webidls/HTMLOptGroupElement.webidl index dd3880a67f6..a81df036a4d 100644 --- a/components/script/dom/webidls/HTMLOptGroupElement.webidl +++ b/components/script/dom/webidls/HTMLOptGroupElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLOptionElement.webidl b/components/script/dom/webidls/HTMLOptionElement.webidl index 79627a56eef..fb0f68bf772 100644 --- a/components/script/dom/webidls/HTMLOptionElement.webidl +++ b/components/script/dom/webidls/HTMLOptionElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLOutputElement.webidl b/components/script/dom/webidls/HTMLOutputElement.webidl index aa85afd7b8d..9506d56df65 100644 --- a/components/script/dom/webidls/HTMLOutputElement.webidl +++ b/components/script/dom/webidls/HTMLOutputElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLParagraphElement.webidl b/components/script/dom/webidls/HTMLParagraphElement.webidl index 1ce3452ad79..a96c6dc6f81 100644 --- a/components/script/dom/webidls/HTMLParagraphElement.webidl +++ b/components/script/dom/webidls/HTMLParagraphElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLParamElement.webidl b/components/script/dom/webidls/HTMLParamElement.webidl index 8a6fca427ca..9648c9f87ce 100644 --- a/components/script/dom/webidls/HTMLParamElement.webidl +++ b/components/script/dom/webidls/HTMLParamElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLPreElement.webidl b/components/script/dom/webidls/HTMLPreElement.webidl index 0e01f90ead6..ea0df151020 100644 --- a/components/script/dom/webidls/HTMLPreElement.webidl +++ b/components/script/dom/webidls/HTMLPreElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLProgressElement.webidl b/components/script/dom/webidls/HTMLProgressElement.webidl index 3b4b0f4032f..cf69566ecdd 100644 --- a/components/script/dom/webidls/HTMLProgressElement.webidl +++ b/components/script/dom/webidls/HTMLProgressElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLQuoteElement.webidl b/components/script/dom/webidls/HTMLQuoteElement.webidl index 0af1e086776..e546f151d49 100644 --- a/components/script/dom/webidls/HTMLQuoteElement.webidl +++ b/components/script/dom/webidls/HTMLQuoteElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLScriptElement.webidl b/components/script/dom/webidls/HTMLScriptElement.webidl index 8bd588a232b..004ab90e3ed 100644 --- a/components/script/dom/webidls/HTMLScriptElement.webidl +++ b/components/script/dom/webidls/HTMLScriptElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLSelectElement.webidl b/components/script/dom/webidls/HTMLSelectElement.webidl index 599cb9f74de..ba84d183a72 100644 --- a/components/script/dom/webidls/HTMLSelectElement.webidl +++ b/components/script/dom/webidls/HTMLSelectElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLSourceElement.webidl b/components/script/dom/webidls/HTMLSourceElement.webidl index 8f53e4fde9e..738a545713a 100644 --- a/components/script/dom/webidls/HTMLSourceElement.webidl +++ b/components/script/dom/webidls/HTMLSourceElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLSpanElement.webidl b/components/script/dom/webidls/HTMLSpanElement.webidl index e64a69778e0..a74967536a1 100644 --- a/components/script/dom/webidls/HTMLSpanElement.webidl +++ b/components/script/dom/webidls/HTMLSpanElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLStyleElement.webidl b/components/script/dom/webidls/HTMLStyleElement.webidl index e683ab7a9fa..dd766f41d22 100644 --- a/components/script/dom/webidls/HTMLStyleElement.webidl +++ b/components/script/dom/webidls/HTMLStyleElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLTableCaptionElement.webidl b/components/script/dom/webidls/HTMLTableCaptionElement.webidl index 1b8cdc5a239..b405d23ed40 100644 --- a/components/script/dom/webidls/HTMLTableCaptionElement.webidl +++ b/components/script/dom/webidls/HTMLTableCaptionElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLTableCellElement.webidl b/components/script/dom/webidls/HTMLTableCellElement.webidl index c1ee341749b..bbb04109d09 100644 --- a/components/script/dom/webidls/HTMLTableCellElement.webidl +++ b/components/script/dom/webidls/HTMLTableCellElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLTableColElement.webidl b/components/script/dom/webidls/HTMLTableColElement.webidl index c8257cfa117..69188251443 100644 --- a/components/script/dom/webidls/HTMLTableColElement.webidl +++ b/components/script/dom/webidls/HTMLTableColElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLTableDataCellElement.webidl b/components/script/dom/webidls/HTMLTableDataCellElement.webidl index a4de0d2669a..208ed76d692 100644 --- a/components/script/dom/webidls/HTMLTableDataCellElement.webidl +++ b/components/script/dom/webidls/HTMLTableDataCellElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLTableElement.webidl b/components/script/dom/webidls/HTMLTableElement.webidl index dacd0da7aa2..596f5abd188 100644 --- a/components/script/dom/webidls/HTMLTableElement.webidl +++ b/components/script/dom/webidls/HTMLTableElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLTableHeaderCellElement.webidl b/components/script/dom/webidls/HTMLTableHeaderCellElement.webidl index 669e356588d..9bf8f1fc950 100644 --- a/components/script/dom/webidls/HTMLTableHeaderCellElement.webidl +++ b/components/script/dom/webidls/HTMLTableHeaderCellElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLTableRowElement.webidl b/components/script/dom/webidls/HTMLTableRowElement.webidl index fe6c93e6be5..9d4b0655cad 100644 --- a/components/script/dom/webidls/HTMLTableRowElement.webidl +++ b/components/script/dom/webidls/HTMLTableRowElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLTableSectionElement.webidl b/components/script/dom/webidls/HTMLTableSectionElement.webidl index 483fe197229..979d8030ffd 100644 --- a/components/script/dom/webidls/HTMLTableSectionElement.webidl +++ b/components/script/dom/webidls/HTMLTableSectionElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLTemplateElement.webidl b/components/script/dom/webidls/HTMLTemplateElement.webidl index 4f1cc2c27d0..b3383de69d2 100644 --- a/components/script/dom/webidls/HTMLTemplateElement.webidl +++ b/components/script/dom/webidls/HTMLTemplateElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLTextAreaElement.webidl b/components/script/dom/webidls/HTMLTextAreaElement.webidl index e5e2cabdb78..f92e662c354 100644 --- a/components/script/dom/webidls/HTMLTextAreaElement.webidl +++ b/components/script/dom/webidls/HTMLTextAreaElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLTimeElement.webidl b/components/script/dom/webidls/HTMLTimeElement.webidl index f989f25fcdf..21f9dcf090e 100644 --- a/components/script/dom/webidls/HTMLTimeElement.webidl +++ b/components/script/dom/webidls/HTMLTimeElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLTitleElement.webidl b/components/script/dom/webidls/HTMLTitleElement.webidl index 31302ea307f..10373be7e4b 100644 --- a/components/script/dom/webidls/HTMLTitleElement.webidl +++ b/components/script/dom/webidls/HTMLTitleElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLTrackElement.webidl b/components/script/dom/webidls/HTMLTrackElement.webidl index a55e54a7061..55733235321 100644 --- a/components/script/dom/webidls/HTMLTrackElement.webidl +++ b/components/script/dom/webidls/HTMLTrackElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLUListElement.webidl b/components/script/dom/webidls/HTMLUListElement.webidl index ad94cc0cefe..91a79c7f925 100644 --- a/components/script/dom/webidls/HTMLUListElement.webidl +++ b/components/script/dom/webidls/HTMLUListElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLUnknownElement.webidl b/components/script/dom/webidls/HTMLUnknownElement.webidl index 2db9f565ed2..acf5a47a996 100644 --- a/components/script/dom/webidls/HTMLUnknownElement.webidl +++ b/components/script/dom/webidls/HTMLUnknownElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/HTMLVideoElement.webidl b/components/script/dom/webidls/HTMLVideoElement.webidl index 787b0977a91..5e7c9cb9fce 100644 --- a/components/script/dom/webidls/HTMLVideoElement.webidl +++ b/components/script/dom/webidls/HTMLVideoElement.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/ImageData.webidl b/components/script/dom/webidls/ImageData.webidl index 23d722434ac..bd4f6317a5e 100644 --- a/components/script/dom/webidls/ImageData.webidl +++ b/components/script/dom/webidls/ImageData.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/KeyboardEvent.webidl b/components/script/dom/webidls/KeyboardEvent.webidl index 3520d509ec6..a9027ededcd 100644 --- a/components/script/dom/webidls/KeyboardEvent.webidl +++ b/components/script/dom/webidls/KeyboardEvent.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/Location.webidl b/components/script/dom/webidls/Location.webidl index 0593581d98c..43e52d62a0e 100644 --- a/components/script/dom/webidls/Location.webidl +++ b/components/script/dom/webidls/Location.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/MessageEvent.webidl b/components/script/dom/webidls/MessageEvent.webidl index 0db3861205a..99985ae04ea 100644 --- a/components/script/dom/webidls/MessageEvent.webidl +++ b/components/script/dom/webidls/MessageEvent.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/MimeType.webidl b/components/script/dom/webidls/MimeType.webidl index 9972134f7c8..6ba91f8a924 100644 --- a/components/script/dom/webidls/MimeType.webidl +++ b/components/script/dom/webidls/MimeType.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/MimeTypeArray.webidl b/components/script/dom/webidls/MimeTypeArray.webidl index 6a4d8f1aa4e..ef29b54ed84 100644 --- a/components/script/dom/webidls/MimeTypeArray.webidl +++ b/components/script/dom/webidls/MimeTypeArray.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/MouseEvent.webidl b/components/script/dom/webidls/MouseEvent.webidl index f9be1e64ed0..c156a66629b 100644 --- a/components/script/dom/webidls/MouseEvent.webidl +++ b/components/script/dom/webidls/MouseEvent.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/Navigator.webidl b/components/script/dom/webidls/Navigator.webidl index b793af7a6f5..4d9ead9f7f9 100644 --- a/components/script/dom/webidls/Navigator.webidl +++ b/components/script/dom/webidls/Navigator.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/Node.webidl b/components/script/dom/webidls/Node.webidl index 871e865e03a..f727fa98660 100644 --- a/components/script/dom/webidls/Node.webidl +++ b/components/script/dom/webidls/Node.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ @@ -32,6 +31,8 @@ interface Node : EventTarget { [Pure] readonly attribute Document? ownerDocument; [Pure] + readonly attribute Node rootNode; + [Pure] readonly attribute Node? parentNode; [Pure] readonly attribute Element? parentElement; @@ -57,6 +58,8 @@ interface Node : EventTarget { Node cloneNode(optional boolean deep = false); [Pure] boolean isEqualNode(Node? node); + [Pure] + boolean isSameNode(Node? otherNode); // historical alias of === const unsigned short DOCUMENT_POSITION_DISCONNECTED = 0x01; const unsigned short DOCUMENT_POSITION_PRECEDING = 0x02; diff --git a/components/script/dom/webidls/NodeFilter.webidl b/components/script/dom/webidls/NodeFilter.webidl index 213380c89c0..79d059e393e 100644 --- a/components/script/dom/webidls/NodeFilter.webidl +++ b/components/script/dom/webidls/NodeFilter.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/NodeIterator.webidl b/components/script/dom/webidls/NodeIterator.webidl index bcf969d6d48..636e7ed2943 100644 --- a/components/script/dom/webidls/NodeIterator.webidl +++ b/components/script/dom/webidls/NodeIterator.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/NodeList.webidl b/components/script/dom/webidls/NodeList.webidl index 413a7154606..4c9eee8c181 100644 --- a/components/script/dom/webidls/NodeList.webidl +++ b/components/script/dom/webidls/NodeList.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/NonElementParentNode.webidl b/components/script/dom/webidls/NonElementParentNode.webidl index 769ee06955d..cf7c8ac8c70 100644 --- a/components/script/dom/webidls/NonElementParentNode.webidl +++ b/components/script/dom/webidls/NonElementParentNode.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/ParentNode.webidl b/components/script/dom/webidls/ParentNode.webidl index 73d7075971b..678b3aeafa5 100644 --- a/components/script/dom/webidls/ParentNode.webidl +++ b/components/script/dom/webidls/ParentNode.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/Performance.webidl b/components/script/dom/webidls/Performance.webidl index 4ec04b46f76..e7b24f9a55c 100644 --- a/components/script/dom/webidls/Performance.webidl +++ b/components/script/dom/webidls/Performance.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/PerformanceTiming.webidl b/components/script/dom/webidls/PerformanceTiming.webidl index 7a2fdaebec0..0fd4b827cab 100644 --- a/components/script/dom/webidls/PerformanceTiming.webidl +++ b/components/script/dom/webidls/PerformanceTiming.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/Plugin.webidl b/components/script/dom/webidls/Plugin.webidl index 4fb172d45b9..bc743f72313 100644 --- a/components/script/dom/webidls/Plugin.webidl +++ b/components/script/dom/webidls/Plugin.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/PluginArray.webidl b/components/script/dom/webidls/PluginArray.webidl index f2fde35fc4f..226ee8d4448 100644 --- a/components/script/dom/webidls/PluginArray.webidl +++ b/components/script/dom/webidls/PluginArray.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/ProcessingInstruction.webidl b/components/script/dom/webidls/ProcessingInstruction.webidl index cd6a14f3dc0..734d43ebe5a 100644 --- a/components/script/dom/webidls/ProcessingInstruction.webidl +++ b/components/script/dom/webidls/ProcessingInstruction.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/ProgressEvent.webidl b/components/script/dom/webidls/ProgressEvent.webidl index a0e86c26ae6..35f2c75024e 100644 --- a/components/script/dom/webidls/ProgressEvent.webidl +++ b/components/script/dom/webidls/ProgressEvent.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/RadioNodeList.webidl b/components/script/dom/webidls/RadioNodeList.webidl index 9ab1d7ea5f0..7168ea34551 100644 --- a/components/script/dom/webidls/RadioNodeList.webidl +++ b/components/script/dom/webidls/RadioNodeList.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/Range.webidl b/components/script/dom/webidls/Range.webidl index 4c7413e3456..1b49656378e 100644 --- a/components/script/dom/webidls/Range.webidl +++ b/components/script/dom/webidls/Range.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/Screen.webidl b/components/script/dom/webidls/Screen.webidl index 3065c113b96..18551a1e7a7 100644 --- a/components/script/dom/webidls/Screen.webidl +++ b/components/script/dom/webidls/Screen.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/ServoHTMLParser.webidl b/components/script/dom/webidls/ServoHTMLParser.webidl index c90b28a1376..c7d9fe71642 100644 --- a/components/script/dom/webidls/ServoHTMLParser.webidl +++ b/components/script/dom/webidls/ServoHTMLParser.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/ServoXMLParser.webidl b/components/script/dom/webidls/ServoXMLParser.webidl index 0b5a20addd3..9658919884c 100644 --- a/components/script/dom/webidls/ServoXMLParser.webidl +++ b/components/script/dom/webidls/ServoXMLParser.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/SharedMouseAndKeyboardEventInit.webidl b/components/script/dom/webidls/SharedMouseAndKeyboardEventInit.webidl index eb852604ed1..c7b67c551f9 100644 --- a/components/script/dom/webidls/SharedMouseAndKeyboardEventInit.webidl +++ b/components/script/dom/webidls/SharedMouseAndKeyboardEventInit.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/Storage.webidl b/components/script/dom/webidls/Storage.webidl index a2dc1b08818..acf3b29af5e 100644 --- a/components/script/dom/webidls/Storage.webidl +++ b/components/script/dom/webidls/Storage.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/StorageEvent.webidl b/components/script/dom/webidls/StorageEvent.webidl index 884d8d2f88b..4671587d0ee 100644 --- a/components/script/dom/webidls/StorageEvent.webidl +++ b/components/script/dom/webidls/StorageEvent.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/StyleSheet.webidl b/components/script/dom/webidls/StyleSheet.webidl index fdb4e875ce2..c7299e87835 100644 --- a/components/script/dom/webidls/StyleSheet.webidl +++ b/components/script/dom/webidls/StyleSheet.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/StyleSheetList.webidl b/components/script/dom/webidls/StyleSheetList.webidl index e743653fde3..d3f9372f5b9 100644 --- a/components/script/dom/webidls/StyleSheetList.webidl +++ b/components/script/dom/webidls/StyleSheetList.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/TestBindingProxy.webidl b/components/script/dom/webidls/TestBindingProxy.webidl index e5f2937bf5a..121ea1a3da8 100644 --- a/components/script/dom/webidls/TestBindingProxy.webidl +++ b/components/script/dom/webidls/TestBindingProxy.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/Text.webidl b/components/script/dom/webidls/Text.webidl index d9df25539d8..515d9939806 100644 --- a/components/script/dom/webidls/Text.webidl +++ b/components/script/dom/webidls/Text.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/TextDecoder.webidl b/components/script/dom/webidls/TextDecoder.webidl index 4ec66f07d7a..f1ebec221b6 100644 --- a/components/script/dom/webidls/TextDecoder.webidl +++ b/components/script/dom/webidls/TextDecoder.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/TextEncoder.webidl b/components/script/dom/webidls/TextEncoder.webidl index 697f7ca9146..b3f9df5f5f1 100644 --- a/components/script/dom/webidls/TextEncoder.webidl +++ b/components/script/dom/webidls/TextEncoder.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/Touch.webidl b/components/script/dom/webidls/Touch.webidl index 9805121446e..5f54dea37a1 100644 --- a/components/script/dom/webidls/Touch.webidl +++ b/components/script/dom/webidls/Touch.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/TouchEvent.webidl b/components/script/dom/webidls/TouchEvent.webidl index b291c23be16..62d5a48bc2f 100644 --- a/components/script/dom/webidls/TouchEvent.webidl +++ b/components/script/dom/webidls/TouchEvent.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/TouchList.webidl b/components/script/dom/webidls/TouchList.webidl index f75cc4c9530..22e4646ebfb 100644 --- a/components/script/dom/webidls/TouchList.webidl +++ b/components/script/dom/webidls/TouchList.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/TreeWalker.webidl b/components/script/dom/webidls/TreeWalker.webidl index c05f86dcdc8..049f79bdd11 100644 --- a/components/script/dom/webidls/TreeWalker.webidl +++ b/components/script/dom/webidls/TreeWalker.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/UIEvent.webidl b/components/script/dom/webidls/UIEvent.webidl index 4f5caeaad14..d1019981b89 100644 --- a/components/script/dom/webidls/UIEvent.webidl +++ b/components/script/dom/webidls/UIEvent.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/URLSearchParams.webidl b/components/script/dom/webidls/URLSearchParams.webidl index e0266ca6246..1d3efe2871f 100644 --- a/components/script/dom/webidls/URLSearchParams.webidl +++ b/components/script/dom/webidls/URLSearchParams.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/ValidityState.webidl b/components/script/dom/webidls/ValidityState.webidl index 7ed0167b010..e959e972a7f 100644 --- a/components/script/dom/webidls/ValidityState.webidl +++ b/components/script/dom/webidls/ValidityState.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/WebGLContextEvent.webidl b/components/script/dom/webidls/WebGLContextEvent.webidl index 91946a0bfcb..6a699754d2c 100644 --- a/components/script/dom/webidls/WebGLContextEvent.webidl +++ b/components/script/dom/webidls/WebGLContextEvent.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/WebGLRenderingContext.webidl b/components/script/dom/webidls/WebGLRenderingContext.webidl index 6c36844f313..4b29660b190 100644 --- a/components/script/dom/webidls/WebGLRenderingContext.webidl +++ b/components/script/dom/webidls/WebGLRenderingContext.webidl @@ -622,16 +622,20 @@ interface WebGLRenderingContextBase void shaderSource(WebGLShader? shader, DOMString source); - //void stencilFunc(GLenum func, GLint ref, GLuint mask); - //void stencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask); - //void stencilMask(GLuint mask); - //void stencilMaskSeparate(GLenum face, GLuint mask); - //void stencilOp(GLenum fail, GLenum zfail, GLenum zpass); - //void stencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass); + void stencilFunc(GLenum func, GLint ref, GLuint mask); + void stencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask); + void stencilMask(GLuint mask); + void stencilMaskSeparate(GLenum face, GLuint mask); + void stencilOp(GLenum fail, GLenum zfail, GLenum zpass); + void stencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass); //void texImage2D(GLenum target, GLint level, GLenum internalformat, // GLsizei width, GLsizei height, GLint border, GLenum format, // GLenum type, ArrayBufferView? pixels); + // FIXME: SM interface arguments + void texImage2D(GLenum target, GLint level, GLenum internalformat, + GLsizei width, GLsizei height, GLint border, GLenum format, + GLenum type, optional object data); void texImage2D(GLenum target, GLint level, GLenum internalformat, GLenum format, GLenum type, TexImageSource? source); // May throw DOMException diff --git a/components/script/dom/webidls/Window.webidl b/components/script/dom/webidls/Window.webidl index 21ac6bf31a8..8f3cbedcc8e 100644 --- a/components/script/dom/webidls/Window.webidl +++ b/components/script/dom/webidls/Window.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/Worker.webidl b/components/script/dom/webidls/Worker.webidl index 5331d6fdc36..e8164771094 100644 --- a/components/script/dom/webidls/Worker.webidl +++ b/components/script/dom/webidls/Worker.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/WorkerLocation.webidl b/components/script/dom/webidls/WorkerLocation.webidl index 598e210de44..3c58d24bd02 100644 --- a/components/script/dom/webidls/WorkerLocation.webidl +++ b/components/script/dom/webidls/WorkerLocation.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/WorkerNavigator.webidl b/components/script/dom/webidls/WorkerNavigator.webidl index c44edbfe58a..0a85ee75caa 100644 --- a/components/script/dom/webidls/WorkerNavigator.webidl +++ b/components/script/dom/webidls/WorkerNavigator.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/XMLDocument.webidl b/components/script/dom/webidls/XMLDocument.webidl index de40dd87b9d..150267dd62a 100644 --- a/components/script/dom/webidls/XMLDocument.webidl +++ b/components/script/dom/webidls/XMLDocument.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/XMLHttpRequest.webidl b/components/script/dom/webidls/XMLHttpRequest.webidl index b67e112c573..e2263a5a28b 100644 --- a/components/script/dom/webidls/XMLHttpRequest.webidl +++ b/components/script/dom/webidls/XMLHttpRequest.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/XMLHttpRequestEventTarget.webidl b/components/script/dom/webidls/XMLHttpRequestEventTarget.webidl index 7756d9dd623..2c93fe95968 100644 --- a/components/script/dom/webidls/XMLHttpRequestEventTarget.webidl +++ b/components/script/dom/webidls/XMLHttpRequestEventTarget.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/webidls/XMLHttpRequestUpload.webidl b/components/script/dom/webidls/XMLHttpRequestUpload.webidl index 8c21dbaea4a..5512703b467 100644 --- a/components/script/dom/webidls/XMLHttpRequestUpload.webidl +++ b/components/script/dom/webidls/XMLHttpRequestUpload.webidl @@ -1,4 +1,3 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ diff --git a/components/script/dom/websocket.rs b/components/script/dom/websocket.rs index e92c7abbcab..08d24e2fbe2 100644 --- a/components/script/dom/websocket.rs +++ b/components/script/dom/websocket.rs @@ -210,7 +210,7 @@ impl WebSocket { // Step 2: Disallow https -> ws connections. // Step 3: Potentially block access to some ports. - let port: u16 = resource_url.port_or_default().unwrap(); + let port: u16 = resource_url.port_or_known_default().unwrap(); if BLOCKED_PORTS_LIST.iter().any(|&p| p == port) { return Err(Error::Security); @@ -356,7 +356,7 @@ impl WebSocketMethods for WebSocket { // https://html.spec.whatwg.org/multipage/#dom-websocket-url fn Url(&self) -> DOMString { - DOMString::from(self.url.serialize()) + DOMString::from(self.url.as_str()) } // https://html.spec.whatwg.org/multipage/#dom-websocket-readystate diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index 8a3affefe06..05115de0c58 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -43,12 +43,13 @@ use js::rust::Runtime; use layout_interface::{ContentBoxResponse, ContentBoxesResponse, ResolvedStyleResponse, ScriptReflow}; use layout_interface::{LayoutChan, LayoutRPC, Msg, Reflow, ReflowQueryType, MarginStyleResponse}; use libc; -use msg::constellation_msg::{ConstellationChan, LoadData, PipelineId, SubpageId, WindowSizeData}; +use msg::constellation_msg::{ConstellationChan, LoadData, PipelineId, SubpageId}; +use msg::constellation_msg::{WindowSizeData, WindowSizeType}; use msg::webdriver_msg::{WebDriverJSError, WebDriverJSResult}; use net_traits::ResourceThread; use net_traits::image_cache_thread::{ImageCacheChan, ImageCacheThread}; use net_traits::storage_thread::{StorageThread, StorageType}; -use num::traits::ToPrimitive; +use num_traits::ToPrimitive; use page::Page; use profile_traits::mem; use reporter::CSSErrorReporter; @@ -74,6 +75,7 @@ use std::sync::{Arc, Mutex}; use string_cache::Atom; use style::context::ReflowGoal; use style::error_reporting::ParseErrorReporter; +use style::properties::longhands::{overflow_x}; use style::selector_impl::PseudoElement; use task_source::TaskSource; use task_source::dom_manipulation::{DOMManipulationTaskSource, DOMManipulationTask}; @@ -180,7 +182,7 @@ pub struct Window { next_subpage_id: Cell<SubpageId>, /// Pending resize event, if any. - resize_event: Cell<Option<WindowSizeData>>, + resize_event: Cell<Option<(WindowSizeData, WindowSizeType)>>, /// Pipeline id associated with this page. id: PipelineId, @@ -911,11 +913,13 @@ impl Window { //TODO Step 11 //let document = self.Document(); // Step 12 - self.perform_a_scroll(x.to_f32().unwrap_or(0.0f32), y.to_f32().unwrap_or(0.0f32), behavior, None); + self.perform_a_scroll(x.to_f32().unwrap_or(0.0f32), y.to_f32().unwrap_or(0.0f32), + LayerId::null(), behavior, None); } /// https://drafts.csswg.org/cssom-view/#perform-a-scroll - pub fn perform_a_scroll(&self, x: f32, y: f32, behavior: ScrollBehavior, element: Option<&Element>) { + pub fn perform_a_scroll(&self, x: f32, y: f32, layer_id: LayerId, + behavior: ScrollBehavior, element: Option<&Element>) { //TODO Step 1 let point = Point2D::new(x, y); let smooth = match behavior { @@ -934,7 +938,7 @@ impl Window { self.current_viewport.set(Rect::new(Point2D::new(Au::from_f32_px(x), Au::from_f32_px(y)), size)); self.compositor.send(ScriptToCompositorMsg::ScrollFragmentPoint( - self.pipeline(), LayerId::null(), point, smooth)).unwrap() + self.pipeline(), layer_id, point, smooth)).unwrap() } pub fn client_window(&self) -> (Size2D<u32>, Point2D<i32>) { @@ -1122,6 +1126,40 @@ impl Window { self.layout_rpc.node_scroll_area().client_rect } + pub fn overflow_query(&self, node: TrustedNodeAddress) -> Point2D<overflow_x::computed_value::T> { + self.reflow(ReflowGoal::ForScriptQuery, + ReflowQueryType::NodeOverflowQuery(node), + ReflowReason::Query); + self.layout_rpc.node_overflow().0.unwrap() + } + + pub fn scroll_offset_query(&self, node: TrustedNodeAddress) -> Point2D<f32> { + self.reflow(ReflowGoal::ForScriptQuery, + ReflowQueryType::NodeLayerIdQuery(node), + ReflowReason::Query); + let layer_id = self.layout_rpc.node_layer_id().layer_id; + let pipeline_id = self.id; + + let (send, recv) = ipc::channel::<Point2D<f32>>().unwrap(); + self.compositor.send(ScriptToCompositorMsg::GetScrollOffset(pipeline_id, layer_id, send)).unwrap(); + recv.recv().unwrap_or(Point2D::zero()) + } + + // https://drafts.csswg.org/cssom-view/#dom-element-scroll + pub fn scroll_node(&self, node: TrustedNodeAddress, + x_: f64, y_: f64, behavior: ScrollBehavior) { + + self.reflow(ReflowGoal::ForScriptQuery, + ReflowQueryType::NodeLayerIdQuery(node), + ReflowReason::Query); + + let layer_id = self.layout_rpc.node_layer_id().layer_id; + + // Step 12 + self.perform_a_scroll(x_.to_f32().unwrap_or(0.0f32), y_.to_f32().unwrap_or(0.0f32), + layer_id, behavior, None); + } + pub fn resolved_style_query(&self, element: TrustedNodeAddress, pseudo: Option<PseudoElement>, @@ -1161,8 +1199,10 @@ impl Window { /// Commence a new URL load which will either replace this window or scroll to a fragment. pub fn load_url(&self, url: Url) { + let doc = self.Document(); self.main_thread_script_chan().send( - MainThreadScriptMsg::Navigate(self.id, LoadData::new(url))).unwrap(); + MainThreadScriptMsg::Navigate(self.id, + LoadData::new(url, doc.get_referrer_policy(), Some(doc.url().clone())))).unwrap(); } pub fn handle_fire_timer(&self, timer_id: TimerEventId) { @@ -1243,11 +1283,11 @@ impl Window { self.pending_reflow_count.set(self.pending_reflow_count.get() + 1); } - pub fn set_resize_event(&self, event: WindowSizeData) { - self.resize_event.set(Some(event)); + pub fn set_resize_event(&self, event: WindowSizeData, event_type: WindowSizeType) { + self.resize_event.set(Some((event, event_type))); } - pub fn steal_resize_event(&self) -> Option<WindowSizeData> { + pub fn steal_resize_event(&self) -> Option<(WindowSizeData, WindowSizeType)> { let event = self.resize_event.get(); self.resize_event.set(None); event @@ -1476,6 +1516,8 @@ fn debug_reflow_events(id: PipelineId, goal: &ReflowGoal, query_type: &ReflowQue ReflowQueryType::ContentBoxesQuery(_n) => "\tContentBoxesQuery", ReflowQueryType::HitTestQuery(_n, _o) => "\tHitTestQuery", ReflowQueryType::NodeGeometryQuery(_n) => "\tNodeGeometryQuery", + ReflowQueryType::NodeLayerIdQuery(_n) => "\tNodeLayerIdQuery", + ReflowQueryType::NodeOverflowQuery(_n) => "\tNodeOverFlowQuery", ReflowQueryType::NodeScrollGeometryQuery(_n) => "\tNodeScrollGeometryQuery", ReflowQueryType::ResolvedStyleQuery(_, _, _) => "\tResolvedStyleQuery", ReflowQueryType::OffsetParentQuery(_n) => "\tOffsetParentQuery", diff --git a/components/script/dom/worker.rs b/components/script/dom/worker.rs index f6cf53b801e..0f0d06d488f 100644 --- a/components/script/dom/worker.rs +++ b/components/script/dom/worker.rs @@ -69,7 +69,7 @@ impl Worker { // https://html.spec.whatwg.org/multipage/#dom-worker pub fn Constructor(global: GlobalRef, script_url: DOMString) -> Fallible<Root<Worker>> { // Step 2-4. - let worker_url = match global.get_url().join(&script_url) { + let worker_url = match global.api_base_url().join(&script_url) { Ok(url) => url, Err(_) => return Err(Error::Syntax), }; diff --git a/components/script/dom/workerglobalscope.rs b/components/script/dom/workerglobalscope.rs index a0a73c0d993..dc097cd602c 100644 --- a/components/script/dom/workerglobalscope.rs +++ b/components/script/dom/workerglobalscope.rs @@ -225,7 +225,7 @@ impl WorkerGlobalScopeMethods for WorkerGlobalScope { }; match self.runtime.evaluate_script( - self.reflector().get_jsobject(), source, url.serialize(), 1) { + self.reflector().get_jsobject(), source, url.to_string(), 1) { Ok(_) => (), Err(_) => { println!("evaluate_script failed"); @@ -317,7 +317,7 @@ impl WorkerGlobalScopeMethods for WorkerGlobalScope { impl WorkerGlobalScope { pub fn execute_script(&self, source: DOMString) { match self.runtime.evaluate_script( - self.reflector().get_jsobject(), String::from(source), self.worker_url.serialize(), 1) { + self.reflector().get_jsobject(), String::from(source), self.worker_url.to_string(), 1) { Ok(_) => (), Err(_) => { if self.is_closing() { diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs index 8d6716201af..9f74e694ac6 100644 --- a/components/script/dom/xmlhttprequest.rs +++ b/components/script/dom/xmlhttprequest.rs @@ -45,7 +45,7 @@ use js::jsapi::JS_ClearPendingException; use js::jsapi::{JSContext, JS_ParseJSON, RootedValue}; use js::jsval::{JSVal, NullValue, UndefinedValue}; use net_traits::ControlMsg::Load; -use net_traits::{AsyncResponseListener, AsyncResponseTarget, Metadata}; +use net_traits::{AsyncResponseListener, AsyncResponseTarget, Metadata, NetworkError}; use net_traits::{LoadConsumer, LoadContext, LoadData, ResourceCORSData, ResourceThread}; use network_listener::{NetworkListener, PreInvoke}; use parse::html::{ParseContext, parse_html}; @@ -60,8 +60,7 @@ use std::sync::{Arc, Mutex}; use string_cache::Atom; use time; use timers::{OneshotTimerCallback, OneshotTimerHandle}; -use url::Url; -use url::percent_encoding::{utf8_percent_encode, USERNAME_ENCODE_SET, PASSWORD_ENCODE_SET}; +use url::{Url, Position}; use util::prefs; use util::str::DOMString; @@ -254,7 +253,7 @@ impl XMLHttpRequest { resource_thread: ResourceThread, load_data: LoadData) { impl AsyncResponseListener for XHRContext { - fn headers_available(&mut self, metadata: Metadata) { + fn headers_available(&mut self, metadata: Result<Metadata, NetworkError>) { let xhr = self.xhr.root(); let rv = xhr.process_headers_available(self.cors_request.clone(), self.gen_id, @@ -269,7 +268,7 @@ impl XMLHttpRequest { self.xhr.root().process_data_available(self.gen_id, self.buf.borrow().clone()); } - fn response_complete(&mut self, status: Result<(), String>) { + fn response_complete(&mut self, status: Result<(), NetworkError>) { let rv = self.xhr.root().process_response_complete(self.gen_id, status); *self.sync_status.borrow_mut() = Some(rv); } @@ -360,23 +359,17 @@ impl XMLHttpRequestMethods for XMLHttpRequest { // Step 9 if parsed_url.host().is_some() { - if let Some(scheme_data) = parsed_url.relative_scheme_data_mut() { - if let Some(user_str) = username { - scheme_data.username = utf8_percent_encode(&user_str.0, USERNAME_ENCODE_SET); - - // ensure that the password is mutated when a username is provided - scheme_data.password = password.map(|pass_str| { - utf8_percent_encode(&pass_str.0, PASSWORD_ENCODE_SET) - }); - } + if let Some(user_str) = username { + parsed_url.set_username(&user_str.0).unwrap(); + let password = password.as_ref().map(|pass_str| &*pass_str.0); + parsed_url.set_password(password).unwrap(); } } // Step 10 if !async { // FIXME: This should only happen if the global environment is a document environment - if self.timeout.get() != 0 || self.with_credentials.get() || - self.response_type.get() != XMLHttpRequestResponseType::_empty { + if self.timeout.get() != 0 || self.response_type.get() != XMLHttpRequestResponseType::_empty { return Err(Error::InvalidAccess) } } @@ -513,8 +506,6 @@ impl XMLHttpRequestMethods for XMLHttpRequest { // Step 2 _ if self.send_flag.get() => Err(Error::InvalidState), // Step 3 - _ if self.sync_in_window() => Err(Error::InvalidAccess), - // Step 4 _ => { self.with_credentials.set(with_credentials); Ok(()) @@ -582,10 +573,13 @@ impl XMLHttpRequestMethods for XMLHttpRequest { // Step 5 let global = self.global(); let pipeline_id = global.r().pipeline(); + //TODO - set referrer_policy/referrer_url in load_data let mut load_data = LoadData::new(LoadContext::Browsing, self.request_url.borrow().clone().unwrap(), - Some(pipeline_id)); + Some(pipeline_id), + None, + None); if load_data.url.origin().ne(&global.r().get_url().origin()) { load_data.credentials_flag = self.WithCredentials(); } @@ -628,24 +622,8 @@ impl XMLHttpRequestMethods for XMLHttpRequest { true); match cors_request { Ok(None) => { - let mut buf = String::new(); - buf.push_str(&referer_url.scheme); - buf.push_str("://"); - - if let Some(ref h) = referer_url.serialize_host() { - buf.push_str(h); - } - - if let Some(ref p) = referer_url.port().as_ref() { - buf.push_str(":"); - buf.push_str(&p.to_string()); - } - - if let Some(ref h) = referer_url.serialize_path() { - buf.push_str(h); - } - - self.request_headers.borrow_mut().set_raw("Referer".to_owned(), vec![buf.into_bytes()]); + let bytes = referer_url[..Position::AfterPath].as_bytes().to_vec(); + self.request_headers.borrow_mut().set_raw("Referer".to_owned(), vec![bytes]); }, Ok(Some(ref req)) => self.insert_trusted_header("origin".to_owned(), req.origin.to_string()), @@ -870,7 +848,15 @@ impl XMLHttpRequest { } fn process_headers_available(&self, cors_request: Option<CORSRequest>, - gen_id: GenerationId, metadata: Metadata) -> Result<(), Error> { + gen_id: GenerationId, metadata: Result<Metadata, NetworkError>) + -> Result<(), Error> { + let metadata = match metadata { + Ok(meta) => meta, + Err(_) => { + self.process_partial_response(XHRProgress::Errored(gen_id, Error::Network)); + return Err(Error::Network); + }, + }; let bypass_cross_origin_check = { // We want to be able to do cross-origin requests in browser.html. @@ -901,12 +887,10 @@ impl XMLHttpRequest { debug!("Bypassing cross origin check"); } - *self.response_url.borrow_mut() = metadata.final_url.serialize_no_fragment(); + *self.response_url.borrow_mut() = metadata.final_url[..Position::AfterQuery].to_owned(); // XXXManishearth Clear cache entries in case of a network error - self.process_partial_response(XHRProgress::HeadersReceived(gen_id, - metadata.headers, - metadata.status)); + self.process_partial_response(XHRProgress::HeadersReceived(gen_id, metadata.headers, metadata.status)); Ok(()) } @@ -914,7 +898,7 @@ impl XMLHttpRequest { self.process_partial_response(XHRProgress::Loading(gen_id, ByteString::new(payload))); } - fn process_response_complete(&self, gen_id: GenerationId, status: Result<(), String>) + fn process_response_complete(&self, gen_id: GenerationId, status: Result<(), NetworkError>) -> ErrorResult { match status { Ok(()) => { diff --git a/components/script/layout_interface.rs b/components/script/layout_interface.rs index 07d8ac47edc..2a9598fcc8b 100644 --- a/components/script/layout_interface.rs +++ b/components/script/layout_interface.rs @@ -12,7 +12,7 @@ use euclid::point::Point2D; use euclid::rect::Rect; use gfx_traits::{Epoch, LayerId}; use ipc_channel::ipc::{IpcReceiver, IpcSender}; -use msg::constellation_msg::{ConstellationChan, Failure, PipelineId}; +use msg::constellation_msg::{ConstellationChan, PanicMsg, PipelineId}; use msg::constellation_msg::{WindowSizeData}; use net_traits::image_cache_thread::ImageCacheThread; use profile_traits::mem::ReportsChan; @@ -23,7 +23,7 @@ use std::sync::Arc; use std::sync::mpsc::{Receiver, Sender, channel}; use string_cache::Atom; use style::context::ReflowGoal; -use style::properties::longhands::{margin_top, margin_right, margin_bottom, margin_left}; +use style::properties::longhands::{margin_top, margin_right, margin_bottom, margin_left, overflow_x}; use style::selector_impl::PseudoElement; use style::servo::Stylesheet; use url::Url; @@ -104,8 +104,12 @@ pub trait LayoutRPC { fn content_boxes(&self) -> ContentBoxesResponse; /// Requests the geometry of this node. Used by APIs such as `clientTop`. fn node_geometry(&self) -> NodeGeometryResponse; + /// Requests the overflow-x and overflow-y of this node. Used by `scrollTop` etc. + fn node_overflow(&self) -> NodeOverflowResponse; /// Requests the scroll geometry of this node. Used by APIs such as `scrollTop`. fn node_scroll_area(&self) -> NodeGeometryResponse; + /// Requests the layer id of this node. Used by APIs such as `scrollTop` + fn node_layer_id(&self) -> NodeLayerIdResponse; /// Requests the node containing the point of interest fn hit_test(&self) -> HitTestResponse; /// Query layout for the resolved value of a given CSS property @@ -136,6 +140,8 @@ impl MarginStyleResponse { } } +pub struct NodeOverflowResponse(pub Option<Point2D<overflow_x::computed_value::T>>); + pub struct ContentBoxResponse(pub Rect<Au>); pub struct ContentBoxesResponse(pub Vec<Rect<Au>>); pub struct HitTestResponse { @@ -144,6 +150,11 @@ pub struct HitTestResponse { pub struct NodeGeometryResponse { pub client_rect: Rect<i32>, } + +pub struct NodeLayerIdResponse { + pub layer_id: LayerId, +} + pub struct ResolvedStyleResponse(pub Option<String>); #[derive(Clone)] @@ -167,8 +178,10 @@ pub enum ReflowQueryType { NoQuery, ContentBoxQuery(TrustedNodeAddress), ContentBoxesQuery(TrustedNodeAddress), + NodeOverflowQuery(TrustedNodeAddress), HitTestQuery(Point2D<f32>, bool), NodeGeometryQuery(TrustedNodeAddress), + NodeLayerIdQuery(TrustedNodeAddress), NodeScrollGeometryQuery(TrustedNodeAddress), ResolvedStyleQuery(TrustedNodeAddress, Option<PseudoElement>, Atom), OffsetParentQuery(TrustedNodeAddress), @@ -250,7 +263,7 @@ pub struct NewLayoutThreadInfo { pub layout_pair: OpaqueScriptLayoutChannel, pub pipeline_port: IpcReceiver<LayoutControlMsg>, pub constellation_chan: ConstellationChan<ConstellationMsg>, - pub failure: Failure, + pub panic_chan: ConstellationChan<PanicMsg>, pub script_chan: IpcSender<ConstellationControlMsg>, pub image_cache_thread: ImageCacheThread, pub paint_chan: OptionalOpaqueIpcSender, diff --git a/components/script/lib.rs b/components/script/lib.rs index e525a62b70d..0748ae954a6 100644 --- a/components/script/lib.rs +++ b/components/script/lib.rs @@ -30,6 +30,7 @@ extern crate angle; extern crate app_units; +#[allow(unused_extern_crates)] #[macro_use] extern crate bitflags; extern crate canvas; @@ -53,7 +54,7 @@ extern crate libc; extern crate log; extern crate msg; extern crate net_traits; -extern crate num; +extern crate num_traits; extern crate offscreen_gl_context; extern crate phf; #[macro_use] diff --git a/components/script/origin.rs b/components/script/origin.rs index 096ffbbd6fb..97e03162679 100644 --- a/components/script/origin.rs +++ b/components/script/origin.rs @@ -2,9 +2,10 @@ * 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 std::cell::RefCell; +use ref_filter_map::ref_filter_map; +use std::cell::{RefCell, Ref}; use std::rc::Rc; -use url::{OpaqueOrigin, Origin as UrlOrigin}; +use url::Origin as UrlOrigin; use url::{Url, Host}; /// A representation of an [origin](https://html.spec.whatwg.org/multipage/#origin-2). @@ -21,9 +22,8 @@ no_jsmanaged_fields!(Origin); impl Origin { /// Create a new origin comprising a unique, opaque identifier. pub fn opaque_identifier() -> Origin { - let opaque = UrlOrigin::UID(OpaqueOrigin::new()); Origin { - inner: Rc::new(RefCell::new(opaque)), + inner: Rc::new(RefCell::new(UrlOrigin::new_opaque())), } } @@ -40,18 +40,15 @@ impl Origin { /// Does this origin represent a host/scheme/port tuple? pub fn is_scheme_host_port_tuple(&self) -> bool { - match *self.inner.borrow() { - UrlOrigin::Tuple(..) => true, - UrlOrigin::UID(..) => false, - } + self.inner.borrow().is_tuple() } /// Return the host associated with this origin. - pub fn host(&self) -> Option<Host> { - match *self.inner.borrow() { - UrlOrigin::Tuple(_, ref host, _) => Some(host.clone()), - UrlOrigin::UID(..) => None, - } + pub fn host(&self) -> Option<Ref<Host<String>>> { + ref_filter_map(self.inner.borrow(), |origin| match *origin { + UrlOrigin::Tuple(_, ref host, _) => Some(host), + UrlOrigin::Opaque(..) => None, + }) } /// https://html.spec.whatwg.org/multipage/#same-origin diff --git a/components/script/script_runtime.rs b/components/script/script_runtime.rs index 6147fc8bd2b..c14fa1cf021 100644 --- a/components/script/script_runtime.rs +++ b/components/script/script_runtime.rs @@ -95,37 +95,30 @@ impl<'a> Drop for StackRootTLS<'a> { } #[allow(unsafe_code)] -pub fn new_rt_and_cx() -> Runtime { +pub unsafe fn new_rt_and_cx() -> Runtime { LiveDOMReferences::initialize(); let runtime = Runtime::new(); - unsafe { - JS_AddExtraGCRootsTracer(runtime.rt(), Some(trace_rust_roots), ptr::null_mut()); - JS_AddExtraGCRootsTracer(runtime.rt(), Some(trace_refcounted_objects), ptr::null_mut()); - } + JS_AddExtraGCRootsTracer(runtime.rt(), Some(trace_rust_roots), ptr::null_mut()); + JS_AddExtraGCRootsTracer(runtime.rt(), Some(trace_refcounted_objects), ptr::null_mut()); // Needed for debug assertions about whether GC is running. if cfg!(debug_assertions) { - unsafe { - JS_SetGCCallback(runtime.rt(), Some(debug_gc_callback), ptr::null_mut()); - } + JS_SetGCCallback(runtime.rt(), Some(debug_gc_callback), ptr::null_mut()); } + if opts::get().gc_profile { - unsafe { - SetGCSliceCallback(runtime.rt(), Some(gc_slice_callback)); - } + SetGCSliceCallback(runtime.rt(), Some(gc_slice_callback)); } - unsafe { - unsafe extern "C" fn empty_wrapper_callback(_: *mut JSContext, _: *mut JSObject) -> bool { true } - SetDOMCallbacks(runtime.rt(), &DOM_CALLBACKS); - SetPreserveWrapperCallback(runtime.rt(), Some(empty_wrapper_callback)); - // Pre barriers aren't working correctly at the moment - DisableIncrementalGC(runtime.rt()); - } + unsafe extern "C" fn empty_wrapper_callback(_: *mut JSContext, _: *mut JSObject) -> bool { true } + SetDOMCallbacks(runtime.rt(), &DOM_CALLBACKS); + SetPreserveWrapperCallback(runtime.rt(), Some(empty_wrapper_callback)); + // Pre barriers aren't working correctly at the moment + DisableIncrementalGC(runtime.rt()); // Enable or disable the JITs. - let rt_opts = unsafe { &mut *RuntimeOptionsRef(runtime.rt()) }; + let rt_opts = &mut *RuntimeOptionsRef(runtime.rt()); if let Some(val) = get_pref("js.baseline.enabled").as_boolean() { rt_opts.set_baseline_(val); } @@ -144,10 +137,10 @@ pub fn new_rt_and_cx() -> Runtime { rt_opts.set_nativeRegExp_(val); } if let Some(val) = get_pref("js.parallel_parsing.enabled").as_boolean() { - unsafe { JS_SetParallelParsingEnabled(runtime.rt(), val); } + JS_SetParallelParsingEnabled(runtime.rt(), val); } if let Some(val) = get_pref("js.offthread_compilation_enabled").as_boolean() { - unsafe { JS_SetOffthreadIonCompilationEnabled(runtime.rt(), val); } + JS_SetOffthreadIonCompilationEnabled(runtime.rt(), val); } if let Some(val) = get_pref("js.baseline.unsafe_eager_compilation.enabled").as_boolean() { let trigger: i32 = if val { @@ -155,11 +148,9 @@ pub fn new_rt_and_cx() -> Runtime { } else { -1 }; - unsafe { - JS_SetGlobalJitCompilerOption(runtime.rt(), - JSJitCompilerOption::JSJITCOMPILER_BASELINE_WARMUP_TRIGGER, - trigger as u32); - } + JS_SetGlobalJitCompilerOption(runtime.rt(), + JSJitCompilerOption::JSJITCOMPILER_BASELINE_WARMUP_TRIGGER, + trigger as u32); } if let Some(val) = get_pref("js.ion.unsafe_eager_compilation.enabled").as_boolean() { let trigger: i64 = if val { @@ -167,11 +158,9 @@ pub fn new_rt_and_cx() -> Runtime { } else { -1 }; - unsafe { - JS_SetGlobalJitCompilerOption(runtime.rt(), - JSJitCompilerOption::JSJITCOMPILER_ION_WARMUP_TRIGGER, - trigger as u32); - } + JS_SetGlobalJitCompilerOption(runtime.rt(), + JSJitCompilerOption::JSJITCOMPILER_ION_WARMUP_TRIGGER, + trigger as u32); } // TODO: handle js.discard_system_source.enabled // TODO: handle js.asyncstack.enabled (needs new Spidermonkey) @@ -182,9 +171,7 @@ pub fn new_rt_and_cx() -> Runtime { } // TODO: handle js.shared_memory.enabled if let Some(val) = get_pref("js.mem.high_water_mark").as_i64() { - unsafe { - JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_MAX_MALLOC_BYTES, val as u32 * 1024 * 1024); - } + JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_MAX_MALLOC_BYTES, val as u32 * 1024 * 1024); } if let Some(val) = get_pref("js.mem.max").as_i64() { let max = if val <= 0 || val >= 0x1000 { @@ -192,9 +179,7 @@ pub fn new_rt_and_cx() -> Runtime { } else { val * 1024 * 1024 }; - unsafe { - JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_MAX_BYTES, max as u32); - } + JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_MAX_BYTES, max as u32); } // NOTE: This is disabled above, so enabling it here will do nothing for now. if let Some(val) = get_pref("js.mem.gc.incremental.enabled").as_boolean() { @@ -210,101 +195,71 @@ pub fn new_rt_and_cx() -> Runtime { } else { JSGCMode::JSGC_MODE_GLOBAL }; - unsafe { - JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_MODE, mode as u32); - } + JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_MODE, mode as u32); } if let Some(val) = get_pref("js.mem.gc.incremental.slice_ms").as_i64() { if val >= 0 && val < 100000 { - unsafe { - JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_SLICE_TIME_BUDGET, val as u32); - } + JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_SLICE_TIME_BUDGET, val as u32); } } if let Some(val) = get_pref("js.mem.gc.compacting.enabled").as_boolean() { - unsafe { - JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_COMPACTING_ENABLED, val as u32); - } + JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_COMPACTING_ENABLED, val as u32); } if let Some(val) = get_pref("js.mem.gc.high_frequency_time_limit_ms").as_i64() { if val >= 0 && val < 10000 { - unsafe { - JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_HIGH_FREQUENCY_TIME_LIMIT, val as u32); - } + JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_HIGH_FREQUENCY_TIME_LIMIT, val as u32); } } if let Some(val) = get_pref("js.mem.gc.dynamic_mark_slice.enabled").as_boolean() { - unsafe { - JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_DYNAMIC_MARK_SLICE, val as u32); - } + JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_DYNAMIC_MARK_SLICE, val as u32); } // TODO: handle js.mem.gc.refresh_frame_slices.enabled if let Some(val) = get_pref("js.mem.gc.dynamic_heap_growth.enabled").as_boolean() { - unsafe { - JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_DYNAMIC_HEAP_GROWTH, val as u32); - } + JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_DYNAMIC_HEAP_GROWTH, val as u32); } if let Some(val) = get_pref("js.mem.gc.low_frequency_heap_growth").as_i64() { if val >= 0 && val < 10000 { - unsafe { - JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_LOW_FREQUENCY_HEAP_GROWTH, val as u32); - } + JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_LOW_FREQUENCY_HEAP_GROWTH, val as u32); } } if let Some(val) = get_pref("js.mem.gc.high_frequency_heap_growth_min").as_i64() { if val >= 0 && val < 10000 { - unsafe { - JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_HIGH_FREQUENCY_HEAP_GROWTH_MIN, val as u32); - } + JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_HIGH_FREQUENCY_HEAP_GROWTH_MIN, val as u32); } } if let Some(val) = get_pref("js.mem.gc.high_frequency_heap_growth_max").as_i64() { if val >= 0 && val < 10000 { - unsafe { - JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_HIGH_FREQUENCY_HEAP_GROWTH_MAX, val as u32); - } + JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_HIGH_FREQUENCY_HEAP_GROWTH_MAX, val as u32); } } if let Some(val) = get_pref("js.mem.gc.high_frequency_low_limit_mb").as_i64() { if val >= 0 && val < 10000 { - unsafe { - JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_HIGH_FREQUENCY_LOW_LIMIT, val as u32); - } + JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_HIGH_FREQUENCY_LOW_LIMIT, val as u32); } } if let Some(val) = get_pref("js.mem.gc.high_frequency_high_limit_mb").as_i64() { if val >= 0 && val < 10000 { - unsafe { - JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_HIGH_FREQUENCY_HIGH_LIMIT, val as u32); - } + JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_HIGH_FREQUENCY_HIGH_LIMIT, val as u32); } } if let Some(val) = get_pref("js.mem.gc.allocation_threshold_mb").as_i64() { if val >= 0 && val < 10000 { - unsafe { - JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_ALLOCATION_THRESHOLD, val as u32); - } + JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_ALLOCATION_THRESHOLD, val as u32); } } if let Some(val) = get_pref("js.mem.gc.decommit_threshold_mb").as_i64() { if val >= 0 && val < 10000 { - unsafe { - JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_DECOMMIT_THRESHOLD, val as u32); - } + JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_DECOMMIT_THRESHOLD, val as u32); } } if let Some(val) = get_pref("js.mem.gc.empty_chunk_count_min").as_i64() { if val >= 0 && val < 10000 { - unsafe { - JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_MIN_EMPTY_CHUNK_COUNT, val as u32); - } + JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_MIN_EMPTY_CHUNK_COUNT, val as u32); } } if let Some(val) = get_pref("js.mem.gc.empty_chunk_count_max").as_i64() { if val >= 0 && val < 10000 { - unsafe { - JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_MAX_EMPTY_CHUNK_COUNT, val as u32); - } + JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_MAX_EMPTY_CHUNK_COUNT, val as u32); } } diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs index 5f2ecd095ba..d21a0f6ce0d 100644 --- a/components/script/script_thread.rs +++ b/components/script/script_thread.rs @@ -61,7 +61,7 @@ use layout_interface::{self, LayoutChan, NewLayoutThreadInfo, ScriptLayoutChan}; use mem::heap_size_of_self_and_children; use msg::constellation_msg::{ConstellationChan, LoadData}; use msg::constellation_msg::{PipelineId, PipelineNamespace}; -use msg::constellation_msg::{SubpageId, WindowSizeData}; +use msg::constellation_msg::{SubpageId, WindowSizeData, WindowSizeType}; use msg::webdriver_msg::WebDriverScriptCommand; use net_traits::LoadData as NetLoadData; use net_traits::image_cache_thread::{ImageCacheChan, ImageCacheResult, ImageCacheThread}; @@ -100,7 +100,7 @@ use task_source::history_traversal::HistoryTraversalTaskSource; use task_source::networking::NetworkingTaskSource; use task_source::user_interaction::UserInteractionTaskSource; use time::Tm; -use url::Url; +use url::{Url, Position}; use util::opts; use util::str::DOMString; use util::thread; @@ -389,7 +389,7 @@ pub struct ScriptThread { content_process_shutdown_chan: IpcSender<()>, } -/// In the event of thread failure, all data on the stack runs its destructor. However, there +/// In the event of thread panic, all data on the stack runs its destructor. However, there /// are no reachable, owning pointers to the DOM memory, so it never gets freed by default /// when the script thread fails. The ScriptMemoryFailsafe uses the destructor bomb pattern /// to forcibly tear down the JS compartments for pages associated with the failing ScriptThread. @@ -442,11 +442,11 @@ impl ScriptThreadFactory for ScriptThread { state: InitialScriptState, layout_chan: &OpaqueScriptLayoutChannel, load_data: LoadData) { - let ConstellationChan(const_chan) = state.constellation_chan.clone(); + let ConstellationChan(panic_chan) = state.panic_chan.clone(); let (script_chan, script_port) = channel(); let layout_chan = LayoutChan(layout_chan.sender()); - let failure_info = state.failure_info.clone(); - thread::spawn_named_with_send_on_failure(format!("ScriptThread {:?}", state.id), + let pipeline_id = state.id; + thread::spawn_named_with_send_on_panic(format!("ScriptThread {:?}", state.id), thread_state::SCRIPT, move || { PipelineNamespace::install(state.pipeline_namespace_id); @@ -481,7 +481,7 @@ impl ScriptThreadFactory for ScriptThread { // This must always be the very last operation performed before the thread completes failsafe.neuter(); - }, failure_info, const_chan); + }, Some(pipeline_id), panic_chan); } } @@ -492,7 +492,7 @@ pub unsafe extern "C" fn shadow_check_callback(_cx: *mut JSContext, } impl ScriptThread { - pub fn page_fetch_complete(id: PipelineId, subpage: Option<SubpageId>, metadata: Metadata) + pub fn page_fetch_complete(id: PipelineId, subpage: Option<SubpageId>, metadata: Option<Metadata>) -> Option<ParserRoot> { SCRIPT_THREAD_ROOT.with(|root| { let script_thread = unsafe { &*root.borrow().unwrap() }; @@ -521,7 +521,7 @@ impl ScriptThread { port: Receiver<MainThreadScriptMsg>, chan: Sender<MainThreadScriptMsg>) -> ScriptThread { - let runtime = new_rt_and_cx(); + let runtime = unsafe { new_rt_and_cx() }; unsafe { JS_SetWrapObjectCallbacks(runtime.rt(), @@ -635,8 +635,8 @@ impl ScriptThread { } } - for (id, size) in resizes { - self.handle_event(id, ResizeEvent(size)); + for (id, (size, size_type)) in resizes { + self.handle_event(id, ResizeEvent(size, size_type)); } // Store new resizes, and gather all other events. @@ -689,9 +689,9 @@ impl ScriptThread { self.handle_new_layout(new_layout_info); }) } - FromConstellation(ConstellationControlMsg::Resize(id, size)) => { + FromConstellation(ConstellationControlMsg::Resize(id, size, size_type)) => { self.profile_event(ScriptThreadEventCategory::Resize, || { - self.handle_resize(id, size); + self.handle_resize(id, size, size_type); }) } FromConstellation(ConstellationControlMsg::Viewport(id, rect)) => { @@ -1020,10 +1020,10 @@ impl ScriptThread { } } - fn handle_resize(&self, id: PipelineId, size: WindowSizeData) { + fn handle_resize(&self, id: PipelineId, size: WindowSizeData, size_type: WindowSizeType) { if let Some(ref page) = self.find_subpage(id) { let window = page.window(); - window.set_resize_event(size); + window.set_resize_event(size, size_type); return; } let mut loads = self.incomplete_loads.borrow_mut(); @@ -1061,7 +1061,7 @@ impl ScriptThread { subpage_id, load_data, paint_chan, - failure, + panic_chan, pipeline_port, layout_shutdown_chan, content_process_shutdown_chan, @@ -1079,7 +1079,7 @@ impl ScriptThread { layout_pair: layout_pair, pipeline_port: pipeline_port, constellation_chan: self.layout_to_constellation_chan.clone(), - failure: failure, + panic_chan: panic_chan, paint_chan: paint_chan, script_chan: self.control_chan.clone(), image_cache_thread: self.image_cache_thread.clone(), @@ -1132,8 +1132,7 @@ impl ScriptThread { if let Some(root_page) = self.page.borrow().as_ref() { for it_page in root_page.iter() { - let current_url = it_page.document().url().serialize(); - urls.push(current_url.clone()); + let current_url = it_page.document().url().to_string(); for child in it_page.document().upcast::<Node>().traverse_preorder() { dom_tree_size += heap_size_of_self_and_children(&*child); @@ -1145,7 +1144,8 @@ impl ScriptThread { path: path![format!("url({})", current_url), "dom-tree"], kind: ReportKind::ExplicitJemallocHeapSize, size: dom_tree_size, - }) + }); + urls.push(current_url); } } let path_seg = format!("url({})", urls.join(", ")); @@ -1280,7 +1280,7 @@ impl ScriptThread { /// We have received notification that the response associated with a load has completed. /// Kick off the document and frame tree creation process using the result. fn handle_page_fetch_complete(&self, id: PipelineId, subpage: Option<SubpageId>, - metadata: Metadata) -> Option<ParserRoot> { + metadata: Option<Metadata>) -> Option<ParserRoot> { let idx = self.incomplete_loads.borrow().iter().position(|load| { load.pipeline_id == id && load.parent_info.map(|info| info.1) == subpage }); @@ -1289,7 +1289,7 @@ impl ScriptThread { match idx { Some(idx) => { let load = self.incomplete_loads.borrow_mut().remove(idx); - Some(self.load(metadata, load)) + metadata.map(|meta| self.load(meta, load)) } None => { assert!(self.closed_pipelines.borrow().contains(&id)); @@ -1387,7 +1387,7 @@ impl ScriptThread { let ConstellationChan(ref chan) = self.constellation_chan; chan.send(ConstellationMsg::SetFinalUrl(incomplete.pipeline_id, final_url.clone())).unwrap(); } - debug!("ScriptThread: loading {} on page {:?}", incomplete.url.serialize(), incomplete.pipeline_id); + debug!("ScriptThread: loading {} on page {:?}", incomplete.url, incomplete.pipeline_id); let frame_element = incomplete.parent_info.and_then(|(parent_id, subpage_id)| { // The root page may not exist yet, if the parent of this frame @@ -1554,30 +1554,22 @@ impl ScriptThread { // Notify devtools that a new script global exists. self.notify_devtools(document.Title(), final_url.clone(), (page.pipeline(), None)); - let is_javascript = incomplete.url.scheme == "javascript"; + let is_javascript = incomplete.url.scheme() == "javascript"; let parse_input = if is_javascript { - use url::percent_encoding::percent_decode_to; + use url::percent_encoding::percent_decode; // Turn javascript: URL into JS code to eval, according to the steps in // https://html.spec.whatwg.org/multipage/#javascript-protocol let _ar = JSAutoRequest::new(self.get_cx()); - let mut script_source_bytes = Vec::new(); - // Start with the scheme data of the parsed URL (5.), while percent-decoding (8.) - percent_decode_to(incomplete.url.non_relative_scheme_data().unwrap().as_bytes(), - &mut script_source_bytes); - // Append question mark and query component, if any (6.), while percent-decoding (8.) - if let Some(ref query) = incomplete.url.query { - script_source_bytes.push(b'?'); - percent_decode_to(query.as_bytes(), &mut script_source_bytes); - } - // Append number sign and fragment component if any (7.), while percent-decoding (8.) - if let Some(ref fragment) = incomplete.url.fragment { - script_source_bytes.push(b'#'); - percent_decode_to(fragment.as_bytes(), &mut script_source_bytes); - } - // UTF-8 decode (9.) - let script_source = String::from_utf8_lossy(&script_source_bytes); + // This slice of the URL’s serialization is equivalent to (5.) to (7.): + // Start with the scheme data of the parsed URL; + // append question mark and query component, if any; + // append number sign and fragment component if any. + let encoded = &incomplete.url[Position::BeforePath..]; + + // Percent-decode (8.) and UTF-8 decode (9.) + let script_source = percent_decode(encoded.as_bytes()).decode_utf8_lossy(); // Script source is ready to be evaluated (11.) unsafe { @@ -1670,8 +1662,8 @@ impl ScriptThread { } match event { - ResizeEvent(new_size) => { - self.handle_resize_event(pipeline_id, new_size); + ResizeEvent(new_size, size_type) => { + self.handle_resize_event(pipeline_id, new_size, size_type); } MouseButtonEvent(event_type, button, point) => { @@ -1706,7 +1698,7 @@ impl ScriptThread { .and_then(|href| { let value = href.value(); let url = document.url(); - url.join(&value).map(|url| url.serialize()).ok() + url.join(&value).map(|url| url.to_string()).ok() }); let event = ConstellationMsg::NodeStatus(status); @@ -1795,14 +1787,14 @@ impl ScriptThread { // Step 8. { let nurl = &load_data.url; - if let Some(ref fragment) = nurl.fragment { + if let Some(fragment) = nurl.fragment() { let page = get_page(&self.root_page(), pipeline_id); let document = page.document(); let document = document.r(); let url = document.url(); - if url.scheme == nurl.scheme && url.scheme_data == nurl.scheme_data && - url.query == nurl.query && load_data.method == Method::Get { - match document.find_fragment_node(&*fragment) { + if &url[..Position::AfterQuery] == &nurl[..Position::AfterQuery] && + load_data.method == Method::Get { + match document.find_fragment_node(fragment) { Some(ref node) => { self.scroll_fragment_point(pipeline_id, node.r()); } @@ -1831,7 +1823,7 @@ impl ScriptThread { } } - fn handle_resize_event(&self, pipeline_id: PipelineId, new_size: WindowSizeData) { + fn handle_resize_event(&self, pipeline_id: PipelineId, new_size: WindowSizeData, size_type: WindowSizeType) { let page = get_page(&self.root_page(), pipeline_id); let window = page.window(); window.set_window_size(new_size); @@ -1849,11 +1841,13 @@ impl ScriptThread { // http://dev.w3.org/csswg/cssom-view/#resizing-viewports // https://dvcs.w3.org/hg/dom3events/raw-file/tip/html/DOM3-Events.html#event-type-resize - let uievent = UIEvent::new(window.r(), - DOMString::from("resize"), EventBubbles::DoesNotBubble, - EventCancelable::NotCancelable, Some(window.r()), - 0i32); - uievent.upcast::<Event>().fire(window.upcast()); + if size_type == WindowSizeType::Resize { + let uievent = UIEvent::new(window.r(), + DOMString::from("resize"), EventBubbles::DoesNotBubble, + EventCancelable::NotCancelable, Some(window.r()), + 0i32); + uievent.upcast::<Event>().fire(window.upcast()); + } } /// Initiate a non-blocking fetch for a specified resource. Stores the InProgressLoad @@ -1879,7 +1873,7 @@ impl ScriptThread { sender: action_sender, }; - if load_data.url.scheme == "javascript" { + if load_data.url.scheme() == "javascript" { load_data.url = Url::parse("about:blank").unwrap(); } @@ -1893,6 +1887,8 @@ impl ScriptThread { cors: None, pipeline_id: Some(id), credentials_flag: true, + referrer_policy: load_data.referrer_policy, + referrer_url: load_data.referrer_url, }, LoadConsumer::Listener(response_target), None)).unwrap(); self.incomplete_loads.borrow_mut().push(incomplete); @@ -1926,7 +1922,7 @@ impl ScriptThread { // https://html.spec.whatwg.org/multipage/#the-end steps 3-4. document.process_deferred_scripts(); - window.set_fragment_name(final_url.fragment.clone()); + window.set_fragment_name(final_url.fragment().map(str::to_owned)); } fn handle_css_error_reporting(&self, pipeline_id: PipelineId, filename: String, diff --git a/components/script/timers.rs b/components/script/timers.rs index 7816106c9d7..473b2fc030c 100644 --- a/components/script/timers.rs +++ b/components/script/timers.rs @@ -15,7 +15,7 @@ use heapsize::HeapSizeOf; use ipc_channel::ipc::IpcSender; use js::jsapi::{HandleValue, Heap, RootedValue}; use js::jsval::{JSVal, UndefinedValue}; -use num::traits::Saturating; +use num_traits::Saturating; use script_traits::{MsDuration, precise_time_ms}; use script_traits::{TimerEvent, TimerEventId, TimerEventRequest, TimerSource}; use std::cell::Cell; diff --git a/components/script_traits/Cargo.toml b/components/script_traits/Cargo.toml index 861169eeb48..5b502dec314 100644 --- a/components/script_traits/Cargo.toml +++ b/components/script_traits/Cargo.toml @@ -48,4 +48,4 @@ offscreen_gl_context = "0.1.2" serde = "0.7" serde_macros = "0.7" time = "0.1.12" -url = {version = "0.5.7", features = ["heap_size"]} +url = {version = "1.0.0", features = ["heap_size"]} diff --git a/components/script_traits/lib.rs b/components/script_traits/lib.rs index 7175536f280..46c3e860643 100644 --- a/components/script_traits/lib.rs +++ b/components/script_traits/lib.rs @@ -41,7 +41,7 @@ use gfx_traits::Epoch; use gfx_traits::LayerId; use ipc_channel::ipc::{IpcReceiver, IpcSender}; use libc::c_void; -use msg::constellation_msg::{ConstellationChan, Failure, PipelineId, WindowSizeData}; +use msg::constellation_msg::{ConstellationChan, PanicMsg, PipelineId, WindowSizeData, WindowSizeType}; use msg::constellation_msg::{Key, KeyModifiers, KeyState, LoadData}; use msg::constellation_msg::{PipelineNamespaceId, SubpageId}; use msg::webdriver_msg::WebDriverScriptCommand; @@ -93,10 +93,10 @@ pub struct NewLayoutInfo { /// The paint channel, cast to `OptionalOpaqueIpcSender`. This is really an /// `Sender<LayoutToPaintMsg>`. pub paint_chan: OptionalOpaqueIpcSender, - /// Information on what to do on thread failure. - pub failure: Failure, /// A port on which layout can receive messages from the pipeline. pub pipeline_port: IpcReceiver<LayoutControlMsg>, + /// A channel for sending panics on + pub panic_chan: ConstellationChan<PanicMsg>, /// A shutdown channel so that layout can notify others when it's done. pub layout_shutdown_chan: IpcSender<()>, /// A shutdown channel so that layout can tell the content process to shut down when it's done. @@ -109,7 +109,7 @@ pub enum ConstellationControlMsg { /// Gives a channel and ID to a layout thread, as well as the ID of that layout's parent AttachLayout(NewLayoutInfo), /// Window resized. Sends a DOM event eventually, but first we combine events. - Resize(PipelineId, WindowSizeData), + Resize(PipelineId, WindowSizeData, WindowSizeType), /// Notifies script that window has been resized but to not take immediate action. ResizeInactive(PipelineId, WindowSizeData), /// Notifies the script that a pipeline should be closed. @@ -220,7 +220,7 @@ pub enum MouseEventType { #[derive(Deserialize, Serialize)] pub enum CompositorEvent { /// The window was resized. - ResizeEvent(WindowSizeData), + ResizeEvent(WindowSizeData, WindowSizeType), /// A mouse button state changed. MouseButtonEvent(MouseEventType, MouseButton, Point2D<f32>), /// The mouse was moved over a point (or was moved out of the recognizable region). @@ -315,10 +315,10 @@ pub struct InitialScriptState { pub constellation_chan: ConstellationChan<ScriptMsg>, /// A channel for the layout thread to send messages to the constellation. pub layout_to_constellation_chan: ConstellationChan<LayoutMsg>, + /// A channel for sending panics to the constellation. + pub panic_chan: ConstellationChan<PanicMsg>, /// A channel to schedule timer events. pub scheduler_chan: IpcSender<TimerEventRequest>, - /// Information that script sends out when it panics. - pub failure_info: Failure, /// A channel to the resource manager thread. pub resource_thread: ResourceThread, /// A channel to the storage thread. @@ -376,6 +376,8 @@ pub enum ScriptToCompositorMsg { ResizeTo(Size2D<u32>), /// Script has handled a touch event, and either prevented or allowed default actions. TouchEventProcessed(EventResult), + /// Get Scroll Offset + GetScrollOffset(PipelineId, LayerId, IpcSender<Point2D<f32>>), /// Requests that the compositor shut down. Exit, /// Allow the compositor to free script-specific resources. diff --git a/components/script_traits/script_msg.rs b/components/script_traits/script_msg.rs index 23920d150d1..14aa50b6a83 100644 --- a/components/script_traits/script_msg.rs +++ b/components/script_traits/script_msg.rs @@ -12,8 +12,8 @@ use canvas_traits::CanvasMsg; use euclid::point::Point2D; use euclid::size::Size2D; use ipc_channel::ipc::IpcSender; -use msg::constellation_msg::{Failure, NavigationDirection, PipelineId}; use msg::constellation_msg::{LoadData, SubpageId}; +use msg::constellation_msg::{NavigationDirection, PipelineId}; use offscreen_gl_context::{GLContextAttributes, GLLimits}; use style_traits::cursor::Cursor; use style_traits::viewport::ViewportConstraints; @@ -24,20 +24,12 @@ use url::Url; pub enum LayoutMsg { /// Indicates whether this pipeline is currently running animations. ChangeRunningAnimationsState(PipelineId, AnimationState), - /// Layout thread failure. - Failure(Failure), /// Requests that the constellation inform the compositor of the a cursor change. SetCursor(Cursor), /// Notifies the constellation that the viewport has been constrained in some manner ViewportConstrained(PipelineId, ViewportConstraints), } -impl From<Failure> for LayoutMsg { - fn from(failure: Failure) -> LayoutMsg { - LayoutMsg::Failure(failure) - } -} - /// Messages from the script to the constellation. #[derive(Deserialize, Serialize)] pub enum ScriptMsg { @@ -55,8 +47,6 @@ pub enum ScriptMsg { /// Causes a `load` event to be dispatched to any enclosing frame context element /// for the given pipeline. DOMLoad(PipelineId), - /// Script thread failure. - Failure(Failure), /// Notifies the constellation that this frame has received focus. Focus(PipelineId), /// Re-send a mouse button event that was sent to the parent window. @@ -92,9 +82,3 @@ pub enum ScriptMsg { /// Update the pipeline Url, which can change after redirections. SetFinalUrl(PipelineId, Url), } - -impl From<Failure> for ScriptMsg { - fn from(failure: Failure) -> ScriptMsg { - ScriptMsg::Failure(failure) - } -} diff --git a/components/servo/Cargo.lock b/components/servo/Cargo.lock index 54958de7a55..620ec07eb28 100644 --- a/components/servo/Cargo.lock +++ b/components/servo/Cargo.lock @@ -12,7 +12,7 @@ dependencies = [ "devtools 0.0.1", "devtools_traits 0.0.1", "env_logger 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gaol 0.0.1 (git+https://github.com/servo/gaol)", "gfx 0.0.1", "gfx_tests 0.0.1", @@ -30,16 +30,16 @@ dependencies = [ "net_tests 0.0.1", "net_traits 0.0.1", "net_traits_tests 0.0.1", - "offscreen_gl_context 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "plugin_compiletest 0.0.1", "profile 0.0.1", + "profile_tests 0.0.1", "profile_traits 0.0.1", "script 0.0.1", "script_tests 0.0.1", "script_traits 0.0.1", "style 0.0.1", "style_tests 0.0.1", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", "util_tests 0.0.1", "webdriver_server 0.0.1", @@ -73,10 +73,10 @@ name = "app_units" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -103,7 +103,7 @@ dependencies = [ "core-foundation 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "core-graphics 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "core-text 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "freetype 0.1.0 (git+https://github.com/servo/rust-freetype)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -122,8 +122,8 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -163,13 +163,12 @@ version = "0.0.1" dependencies = [ "azure 0.4.3 (git+https://github.com/servo/rust-azure)", "canvas_traits 0.0.1", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gfx_traits 0.0.1", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", - "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "offscreen_gl_context 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", "util 0.0.1", @@ -182,16 +181,14 @@ version = "0.0.1" dependencies = [ "azure 0.4.3 (git+https://github.com/servo/rust-azure)", "cssparser 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gfx_traits 0.0.1", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", - "offscreen_gl_context 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "util 0.0.1", "webrender_traits 0.1.0 (git+https://github.com/servo/webrender_traits)", ] @@ -288,10 +285,8 @@ dependencies = [ "canvas 0.0.1", "canvas_traits 0.0.1", "clipboard 0.1.2 (git+https://github.com/aweinstock314/rust-clipboard)", - "core-graphics 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "core-text 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "devtools_traits 0.0.1", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gaol 0.0.1 (git+https://github.com/servo/gaol)", "gfx 0.0.1", "gfx_traits 0.0.1", @@ -303,7 +298,7 @@ dependencies = [ "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "net_traits 0.0.1", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "offscreen_gl_context 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", "profile_traits 0.0.1", @@ -313,7 +308,7 @@ dependencies = [ "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "style_traits 0.0.1", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", "webrender 0.1.0 (git+https://github.com/servo/webrender)", "webrender_traits 0.1.0 (git+https://github.com/servo/webrender_traits)", @@ -321,13 +316,13 @@ dependencies = [ [[package]] name = "cookie" -version = "0.2.2" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "openssl 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -406,9 +401,8 @@ name = "devtools" version = "0.0.1" dependencies = [ "devtools_traits 0.0.1", - "hyper 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "plugins 0.0.1", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -425,15 +419,14 @@ dependencies = [ "bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "msg 0.0.1", "plugins 0.0.1", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", - "util 0.0.1", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -564,7 +557,7 @@ name = "enum_primitive" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -578,14 +571,14 @@ dependencies = [ [[package]] name = "euclid" -version = "0.6.5" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -678,7 +671,7 @@ dependencies = [ "core-foundation 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "core-graphics 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "core-text 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "freetype 0.1.0 (git+https://github.com/servo/rust-freetype)", "gfx_traits 0.0.1", @@ -697,7 +690,7 @@ dependencies = [ "profile_traits 0.0.1", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "range 0.0.1", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "servo-fontconfig 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -709,7 +702,7 @@ dependencies = [ "style_traits 0.0.1", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-script 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", "webrender_traits 0.1.0 (git+https://github.com/servo/webrender_traits)", ] @@ -728,7 +721,7 @@ name = "gfx_traits" version = "0.0.1" dependencies = [ "azure 0.4.3 (git+https://github.com/servo/rust-azure)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "layers 0.2.4 (git+https://github.com/servo/rust-layers)", @@ -736,7 +729,6 @@ dependencies = [ "plugins 0.0.1", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "util 0.0.1", ] [[package]] @@ -776,9 +768,8 @@ name = "glutin_app" version = "0.0.1" dependencies = [ "bitflags 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "cgl 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "compositing 0.0.1", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "msg 0.0.1", @@ -787,7 +778,7 @@ dependencies = [ "servo-egl 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "servo-glutin 0.4.15 (registry+https://github.com/rust-lang/crates.io-index)", "style_traits 0.0.1", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", "x11 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -879,7 +870,7 @@ dependencies = [ "mac 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "phf 0.7.13 (registry+https://github.com/rust-lang/crates.io-index)", "phf_codegen 0.7.13 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", "tendril 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", @@ -892,24 +883,34 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "hyper" -version = "0.8.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cookie 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "cookie 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "httparse 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "language-tags 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "mime 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "openssl 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "solicit 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", "traitobject 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "unicase 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "idna" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-bidi 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-normalization 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -922,7 +923,7 @@ dependencies = [ "gif 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "glob 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "jpeg-decoder 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "png 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -933,7 +934,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "arrayvec 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -948,7 +949,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cgl 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "core-foundation 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "leaky-cow 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -975,22 +976,22 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "rayon 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "js" version = "0.1.2" -source = "git+https://github.com/servo/rust-mozjs#6f1eb4ea7a84714bfab2806440c9fc8a9a261409" +source = "git+https://github.com/servo/rust-mozjs#efe805affa75d776316e9ea6113f85cdad1e82ed" dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "mozjs_sys 0.0.0 (git+https://github.com/servo/mozjs)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1020,7 +1021,7 @@ dependencies = [ "azure 0.4.3 (git+https://github.com/servo/rust-azure)", "cgl 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "core-foundation 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "glx 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1028,7 +1029,7 @@ dependencies = [ "io-surface 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "servo-egl 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "servo-skia 0.20130412.6 (registry+https://github.com/rust-lang/crates.io-index)", "x11 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1043,7 +1044,7 @@ dependencies = [ "bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "canvas_traits 0.0.1", "cssparser 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "gfx 0.0.1", "gfx_traits 0.0.1", @@ -1058,11 +1059,10 @@ dependencies = [ "plugins 0.0.1", "profile_traits 0.0.1", "range 0.0.1", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "script 0.0.1", "script_traits 0.0.1", "selectors 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1072,7 +1072,7 @@ dependencies = [ "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-bidi 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-script 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", "webrender_traits 0.1.0 (git+https://github.com/servo/webrender_traits)", ] @@ -1096,7 +1096,7 @@ dependencies = [ "script_traits 0.0.1", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", "webrender_traits 0.1.0 (git+https://github.com/servo/webrender_traits)", ] @@ -1250,17 +1250,17 @@ version = "0.0.1" dependencies = [ "bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "cssparser 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "plugins 0.0.1", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", "webrender_traits 0.1.0 (git+https://github.com/servo/webrender_traits)", ] @@ -1270,29 +1270,30 @@ name = "net" version = "0.0.1" dependencies = [ "brotli 0.3.20 (git+https://github.com/ende76/brotli-rs)", - "cookie 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "cookie 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "devtools_traits 0.0.1", "flate2 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "immeta 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "mime 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "mime_guess 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "net_traits 0.0.1", "openssl 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "threadpool 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", "tinyfiledialogs 0.1.0 (git+https://github.com/jdm/tinyfiledialogs)", "unicase 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", "uuid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "webrender_traits 0.1.0 (git+https://github.com/servo/webrender_traits)", - "websocket 0.16.2 (registry+https://github.com/rust-lang/crates.io-index)", + "websocket 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1311,10 +1312,10 @@ dependencies = [ name = "net_tests" version = "0.0.1" dependencies = [ - "cookie 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "cookie 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "devtools_traits 0.0.1", "flate2 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "msg 0.0.1", "net 0.0.1", @@ -1322,7 +1323,7 @@ dependencies = [ "plugins 0.0.1", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", "unicase 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", ] @@ -1332,7 +1333,7 @@ version = "0.0.1" dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "image 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1341,9 +1342,9 @@ dependencies = [ "plugins 0.0.1", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", - "websocket 0.16.2 (registry+https://github.com/rust-lang/crates.io-index)", + "websocket 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1363,14 +1364,71 @@ dependencies = [ [[package]] name = "num" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ + "num-bigint 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-complex 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-iter 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-rational 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-bigint" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-integer 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-complex" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] +name = "num-integer" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-iter" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-integer 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-rational" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-bigint 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-traits" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] name = "num_cpus" version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1418,7 +1476,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cgl 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "core-foundation 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gl_generator 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "khronos_api 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1550,7 +1608,7 @@ dependencies = [ "flate2 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "inflate 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1570,6 +1628,14 @@ dependencies = [ ] [[package]] +name = "profile_tests" +version = "0.0.1" +dependencies = [ + "profile 0.0.1", + "profile_traits 0.0.1", +] + +[[package]] name = "profile_traits" version = "0.0.1" dependencies = [ @@ -1608,7 +1674,7 @@ name = "quickersort" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "unreachable 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1626,8 +1692,8 @@ version = "0.0.1" dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1670,7 +1736,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "rustc-serialize" -version = "0.3.16" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1702,13 +1768,13 @@ dependencies = [ "cssparser 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "devtools_traits 0.0.1", "encoding 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "gfx_traits 0.0.1", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "html5ever 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "image 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "js 0.1.2 (git+https://github.com/servo/rust-mozjs)", @@ -1716,7 +1782,7 @@ dependencies = [ "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "net_traits 0.0.1", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "offscreen_gl_context 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "phf 0.7.13 (registry+https://github.com/rust-lang/crates.io-index)", "phf_macros 0.7.13 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1727,7 +1793,7 @@ dependencies = [ "ref_filter_map 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "ref_slice 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "regex 0.1.55 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "script_traits 0.0.1", "selectors 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1736,11 +1802,11 @@ dependencies = [ "style 0.0.1", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", "unicase 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", "uuid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "webrender_traits 0.1.0 (git+https://github.com/servo/webrender_traits)", - "websocket 0.16.2 (registry+https://github.com/rust-lang/crates.io-index)", + "websocket 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", "xml5ever 0.1.1 (git+https://github.com/Ygg01/xml5ever)", ] @@ -1751,7 +1817,7 @@ dependencies = [ "msg 0.0.1", "plugins 0.0.1", "script 0.0.1", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", ] @@ -1762,7 +1828,7 @@ dependencies = [ "app_units 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "canvas_traits 0.0.1", "devtools_traits 0.0.1", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gfx_traits 0.0.1", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1777,7 +1843,7 @@ dependencies = [ "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "style_traits 0.0.1", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", ] @@ -1822,7 +1888,7 @@ name = "serde_json" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1903,7 +1969,7 @@ version = "0.20130412.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cgl 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "expat-sys 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "glx 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1975,16 +2041,16 @@ dependencies = [ "bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "cssparser 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "encoding 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "selectors 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1992,7 +2058,7 @@ dependencies = [ "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", "style_traits 0.0.1", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", ] @@ -2002,14 +2068,14 @@ version = "0.0.1" dependencies = [ "app_units 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "cssparser 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "plugins 0.0.1", "selectors 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", "style 0.0.1", "style_traits 0.0.1", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", ] @@ -2018,18 +2084,17 @@ name = "style_traits" version = "0.0.1" dependencies = [ "cssparser 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "selectors 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", ] @@ -2088,6 +2153,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2148,18 +2214,16 @@ dependencies = [ [[package]] name = "url" -version = "0.5.9" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "encoding 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "idna 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-bidi 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-normalization 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "uuid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2191,7 +2255,7 @@ dependencies = [ "app_units 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "deque 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "getopts 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2204,12 +2268,12 @@ dependencies = [ "num_cpus 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2217,7 +2281,7 @@ name = "util_tests" version = "0.0.1" dependencies = [ "app_units 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", "util 0.0.1", @@ -2289,13 +2353,13 @@ dependencies = [ [[package]] name = "webdriver" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "hyper 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "regex 0.1.55 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2303,37 +2367,37 @@ name = "webdriver_server" version = "0.0.1" dependencies = [ "compositing 0.0.1", - "hyper 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "image 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "plugins 0.0.1", "regex 0.1.55 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", "uuid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "webdriver 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "webdriver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "webrender" version = "0.1.0" -source = "git+https://github.com/servo/webrender#46dd3f0ffe2e3a650171fd651b522ed072ccf799" +source = "git+https://github.com/servo/webrender#8d778dac5398cadd093136bc9cf0afbbb61a2b52" dependencies = [ "app_units 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "core-graphics 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "core-text 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "freetype 0.1.0 (git+https://github.com/servo/rust-freetype)", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "offscreen_gl_context 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "scoped_threadpool 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2343,12 +2407,12 @@ dependencies = [ [[package]] name = "webrender_traits" version = "0.1.0" -source = "git+https://github.com/servo/webrender_traits#69125172bcea93fd79be48d846eae63d50ddc8ea" +source = "git+https://github.com/servo/webrender_traits#d1a3bb53f87891bbba8576d05260caee147dc5d8" dependencies = [ "app_units 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "core-graphics 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "offscreen_gl_context 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2358,18 +2422,18 @@ dependencies = [ [[package]] name = "websocket" -version = "0.16.2" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "net2 0.2.19 (registry+https://github.com/rust-lang/crates.io-index)", "openssl 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "unicase 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2428,13 +2492,13 @@ dependencies = [ [[package]] name = "xml5ever" version = "0.1.1" -source = "git+https://github.com/Ygg01/xml5ever#4900bbadef28c940a0cd73dc735d53709a2845c7" +source = "git+https://github.com/Ygg01/xml5ever#a51a6df18f384ecfb0a99b288c267178cf68f7f7" dependencies = [ "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "mac 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "phf 0.7.13 (registry+https://github.com/rust-lang/crates.io-index)", "phf_codegen 0.7.13 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", "tendril 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/components/servo/Cargo.toml b/components/servo/Cargo.toml index f62468c5151..9f5797bbe0d 100644 --- a/components/servo/Cargo.toml +++ b/components/servo/Cargo.toml @@ -33,6 +33,9 @@ path = "../../tests/unit/net" [dev-dependencies.net_traits_tests] path = "../../tests/unit/net_traits" +[dev-dependencies.profile_tests] +path = "../../tests/unit/profile" + [dev-dependencies.script_tests] path = "../../tests/unit/script" @@ -127,7 +130,7 @@ optional = true version = "0.1.3" optional = true -[dependencies.log] +[target.arm-linux-androideabi.dependencies.log] version = "0.3" features = ["release_max_level_info"] @@ -168,5 +171,4 @@ bitflags = "0.3" env_logger = "0.3" euclid = {version = "0.6.4", features = ["plugins"]} libc = "0.2" -offscreen_gl_context = "0.1.2" -url = {version = "0.5.7", features = ["heap_size", "serde_serialization", "query_encoding"]} +url = {version = "1.0.0", features = ["heap_size", "serde", "query_encoding"]} diff --git a/components/servo/main.rs b/components/servo/main.rs index b5e2812a595..214d9ee101d 100644 --- a/components/servo/main.rs +++ b/components/servo/main.rs @@ -21,14 +21,13 @@ #[macro_use] extern crate android_glue; extern crate env_logger; -extern crate gleam; // The window backed by glutin extern crate glutin_app as app; #[cfg(target_os = "android")] extern crate libc; +#[cfg(target_os = "android")] #[macro_use] extern crate log; -extern crate offscreen_gl_context; // The Servo engine extern crate servo; diff --git a/components/style/Cargo.toml b/components/style/Cargo.toml index 6aee2f66cfd..14df089eaa6 100644 --- a/components/style/Cargo.toml +++ b/components/style/Cargo.toml @@ -34,7 +34,7 @@ heapsize_plugin = "0.1.2" lazy_static = "0.1.16" log = "0.3.5" matches = "0.1" -num = "0.1.24" +num-traits = "0.1.32" rustc-serialize = "0.3" selectors = {version = "0.5", features = ["heap_size", "unstable"]} serde = {version = "0.7", features = ["nightly"]} @@ -42,4 +42,4 @@ serde_macros = "0.7" smallvec = "0.1" string_cache = {version = "0.2.12", features = ["heap_size"]} time = "0.1" -url = {version = "0.5.7", features = ["heap_size"]} +url = {version = "1.0.0", features = ["heap_size"]} diff --git a/components/style/attr.rs b/components/style/attr.rs index 67d40750557..363c5b44f52 100644 --- a/components/style/attr.rs +++ b/components/style/attr.rs @@ -5,13 +5,13 @@ use app_units::Au; use cssparser::{self, Color, RGBA}; use euclid::num::Zero; -use num::ToPrimitive; +use num_traits::ToPrimitive; use std::ascii::AsciiExt; use std::ops::Deref; use std::str::FromStr; use string_cache::{Atom, Namespace}; use url::Url; -use util::str::{DOMString, LengthOrPercentageOrAuto, HTML_SPACE_CHARACTERS, WHITESPACE}; +use util::str::{DOMString, LengthOrPercentageOrAuto, HTML_SPACE_CHARACTERS}; use util::str::{read_numbers, split_html_space_chars, str_join}; use values::specified::{Length}; @@ -279,7 +279,7 @@ pub fn parse_legacy_color(mut input: &str) -> Result<RGBA, ()> { } // Step 3. - input = input.trim_matches(WHITESPACE); + input = input.trim_matches(HTML_SPACE_CHARACTERS); // Step 4. if input.eq_ignore_ascii_case("transparent") { @@ -407,7 +407,7 @@ pub fn parse_length(mut value: &str) -> LengthOrPercentageOrAuto { // Steps 1 & 2 are not relevant // Step 3 - value = value.trim_left_matches(WHITESPACE); + value = value.trim_left_matches(HTML_SPACE_CHARACTERS); // Step 4 if value.is_empty() { diff --git a/components/style/build.rs b/components/style/build.rs index c33d3aaf6cb..d5935bc2d81 100644 --- a/components/style/build.rs +++ b/components/style/build.rs @@ -3,10 +3,8 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use std::env; -use std::fs::File; -use std::io::Write; use std::path::Path; -use std::process::{Command, Stdio, exit}; +use std::process::{Command, exit}; #[cfg(windows)] fn find_python() -> String { @@ -31,25 +29,16 @@ fn find_python() -> String { } fn main() { - let python = match env::var("PYTHON") { - Ok(python_path) => python_path, - Err(_) => find_python(), - }; - let style = Path::new(file!()).parent().unwrap(); - let mako = style.join("Mako-0.9.1.zip"); - let template = style.join("properties.mako.rs"); + let python = env::var("PYTHON").ok().unwrap_or_else(find_python); + let script = Path::new(file!()).parent().unwrap().join("properties").join("build.py"); let product = if cfg!(feature = "gecko") { "gecko" } else { "servo" }; - let result = Command::new(python) - .env("PYTHONPATH", &mako) - .env("TEMPLATE", &template) - .env("PRODUCT", product) - .arg("generate_properties_rs.py") - .stderr(Stdio::inherit()) - .output() + let status = Command::new(python) + .arg(&script) + .arg(product) + .arg("style-crate") + .status() .unwrap(); - if !result.status.success() { + if !status.success() { exit(1) } - let out = env::var("OUT_DIR").unwrap(); - File::create(&Path::new(&out).join("properties.rs")).unwrap().write_all(&result.stdout).unwrap(); } diff --git a/components/style/generate_properties_rs.py b/components/style/generate_properties_rs.py deleted file mode 100644 index eceae10c28c..00000000000 --- a/components/style/generate_properties_rs.py +++ /dev/null @@ -1,17 +0,0 @@ -# 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/. - -import os -import sys - -from mako import exceptions -from mako.template import Template - -try: - template = Template(open(os.environ['TEMPLATE'], 'rb').read(), - input_encoding='utf8') - print(template.render(PRODUCT=os.environ['PRODUCT']).encode('utf8')) -except: - sys.stderr.write(exceptions.text_error_template().render().encode('utf8')) - sys.exit(1) diff --git a/components/style/lib.rs b/components/style/lib.rs index 951a32cd3ce..00d5d079066 100644 --- a/components/style/lib.rs +++ b/components/style/lib.rs @@ -19,6 +19,7 @@ #![recursion_limit = "500"] // For match_ignore_ascii_case in PropertyDeclaration::parse extern crate app_units; +#[allow(unused_extern_crates)] #[macro_use] extern crate bitflags; extern crate core; @@ -28,13 +29,15 @@ extern crate encoding; extern crate euclid; extern crate fnv; extern crate heapsize; +#[allow(unused_extern_crates)] #[macro_use] extern crate lazy_static; #[macro_use] extern crate log; +#[allow(unused_extern_crates)] #[macro_use] extern crate matches; -extern crate num; +extern crate num_traits; extern crate rustc_serialize; extern crate selectors; extern crate serde; diff --git a/components/style/list_properties.py b/components/style/list_properties.py deleted file mode 100644 index 78c6b84f2c4..00000000000 --- a/components/style/list_properties.py +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env python - -# 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/. - -import os.path -import sys -import json - -style = os.path.dirname(__file__) -sys.path.insert(0, os.path.join(style, "Mako-0.9.1.zip")) -from mako.template import Template - -template = Template(filename=os.path.join(style, "properties.mako.rs"), input_encoding='utf8') -template.render(PRODUCT='servo') -properties = dict( - (p.name, { - "flag": p.experimental, - "shorthand": hasattr(p, "sub_properties") - }) - for p in template.module.LONGHANDS + template.module.SHORTHANDS -) - -json_dump = json.dumps(properties, indent=4) - -# -# Resolve path to doc directory and write CSS properties and JSON. -# -servo_doc_path = os.path.abspath(os.path.join(style, '../', '../', 'target', 'doc', 'servo')) - -# Ensure ./target/doc/servo exists -if not os.path.exists(servo_doc_path): - os.makedirs(servo_doc_path) - -with open(os.path.join(servo_doc_path, 'css-properties.json'), "w") as out_file: - out_file.write(json_dump) - -html_template = Template(filename=os.path.join(style, "properties.html.mako"), input_encoding='utf8') -with open(os.path.join(servo_doc_path, 'css-properties.html'), "w") as out_file: - out_file.write(html_template.render(properties=properties)) diff --git a/components/style/properties.mako.rs b/components/style/properties.mako.rs deleted file mode 100644 index b68d47ad1a3..00000000000 --- a/components/style/properties.mako.rs +++ /dev/null @@ -1,7359 +0,0 @@ -/* 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/. */ - -// This file is a Mako template: http://www.makotemplates.org/ - -// Please note that valid Rust syntax may be mangled by the Mako parser. -// For example, Vec<&Foo> will be mangled as Vec&Foo>. To work around these issues, the code -// can be escaped. In the above example, Vec<<&Foo> achieves the desired result of Vec<&Foo>. - -use std::ascii::AsciiExt; -use std::boxed::Box as StdBox; -use std::collections::HashSet; -use std::fmt; -use std::intrinsics; -use std::mem; -use std::sync::Arc; - -use app_units::Au; -use cssparser::Color as CSSParserColor; -use cssparser::{Parser, RGBA, AtRuleParser, DeclarationParser, Delimiter, - DeclarationListParser, parse_important, ToCss, TokenSerializationType}; -use error_reporting::ParseErrorReporter; -use url::Url; -use euclid::SideOffsets2D; -use euclid::size::Size2D; -use string_cache::Atom; -use computed_values; -use logical_geometry::{LogicalMargin, PhysicalSide, WritingMode}; -use parser::{ParserContext, log_css_error}; -use selectors::matching::DeclarationBlock; -use stylesheets::Origin; -use values::AuExtensionMethods; -use values::computed::{self, TContext, ToComputedValue}; -use values::specified::BorderStyle; - -use self::property_bit_field::PropertyBitField; - -<%! - -import re - -def to_rust_ident(name): - name = name.replace("-", "_") - if name in ["static", "super", "box", "move"]: # Rust keywords - name += "_" - return name - -def to_camel_case(ident): - return re.sub("_([a-z])", lambda m: m.group(1).upper(), ident.strip("_").capitalize()) - -class Keyword(object): - def __init__(self, name, values, gecko_constant_prefix=None, - extra_gecko_values=None, extra_servo_values=None, **kwargs): - self.name = name - self.values = values - self.gecko_constant_prefix = gecko_constant_prefix or "NS_STYLE_" + self.name.upper().replace("-", "_") - self.extra_gecko_values = (extra_gecko_values or "").split() - self.extra_servo_values = (extra_servo_values or "").split() - def gecko_values(self): - return self.values + self.extra_gecko_values - def servo_values(self): - return self.values + self.extra_servo_values - def values_for(self, product): - if product == "gecko": - return self.gecko_values() - elif product == "servo": - return self.servo_values() - else: - raise Exception("Bad product: " + product) - def gecko_constant(self, value): - return self.gecko_constant_prefix + "_" + value.upper().replace("-", "_") - -class Longhand(object): - def __init__(self, name, derived_from=None, keyword=None, - custom_cascade=False, experimental=False, internal=False, - gecko_ffi_name=None, **kwargs): - self.name = name - self.keyword = keyword - self.ident = to_rust_ident(name) - self.camel_case = to_camel_case(self.ident) - self.style_struct = THIS_STYLE_STRUCT - self.experimental = ("layout.%s.enabled" % name) if experimental else None - self.custom_cascade = custom_cascade - self.internal = internal - self.gecko_ffi_name = gecko_ffi_name or "m" + self.camel_case - self.derived_from = (derived_from or "").split() - -class Shorthand(object): - def __init__(self, name, sub_properties, experimental=False, internal=False): - self.name = name - self.ident = to_rust_ident(name) - self.camel_case = to_camel_case(self.ident) - self.derived_from = None - self.experimental = ("layout.%s.enabled" % name) if experimental else None - self.sub_properties = [LONGHANDS_BY_NAME[s] for s in sub_properties] - self.internal = internal - -class Method(object): - def __init__(self, name, return_type=None, arg_types=None, is_mut=False): - self.name = name - self.return_type = return_type - self.arg_types = arg_types or [] - self.is_mut = is_mut - def arg_list(self): - args = ["_: " + x for x in self.arg_types] - args = ["&mut self" if self.is_mut else "&self"] + args - return ", ".join(args) - def signature(self): - sig = "fn %s(%s)" % (self.name, self.arg_list()) - if self.return_type: - sig = sig + " -> " + self.return_type - return sig - def declare(self): - return self.signature() + ";" - def stub(self): - return self.signature() + "{ unimplemented!() }" - -class StyleStruct(object): - def __init__(self, name, inherited, gecko_ffi_name, additional_methods): - self.servo_struct_name = "Servo" + name - self.gecko_struct_name = "Gecko" + name - self.trait_name = name - self.trait_name_lower = name.lower() - self.ident = to_rust_ident(self.trait_name_lower) - self.longhands = [] - self.inherited = inherited - self.gecko_ffi_name = gecko_ffi_name - self.additional_methods = additional_methods or [] - -STYLE_STRUCTS = [] -THIS_STYLE_STRUCT = None -LONGHANDS = [] -LONGHANDS_BY_NAME = {} -DERIVED_LONGHANDS = {} -SHORTHANDS = [] -CONFIG = {} - -def set_product(p): - global CONFIG - CONFIG['product'] = p - -def new_style_struct(name, is_inherited, gecko_name=None, additional_methods=None): - global THIS_STYLE_STRUCT - - style_struct = StyleStruct(name, is_inherited, gecko_name, additional_methods) - STYLE_STRUCTS.append(style_struct) - THIS_STYLE_STRUCT = style_struct - return "" - -def active_style_structs(): - return filter(lambda s: s.additional_methods or s.longhands, STYLE_STRUCTS) - -def switch_to_style_struct(name): - global THIS_STYLE_STRUCT - - for style_struct in STYLE_STRUCTS: - if style_struct.trait_name == name: - THIS_STYLE_STRUCT = style_struct - return "" - raise Exception("Failed to find the struct named " + name) -%> - -// Work around Mako's really annoying namespacing setup. -// -// The above code runs when the template is loaded, rather than when it's -// rendered, so it can create global variables, doesn't have access to -// arguments passed to render(). On the flip side, there are various situations, -// such as code in the body of a def-used-as-tag, where our python code has -// access to global variables but not to render() arguments. Hack around this -// by stashing render arguments in a global. -<% CONFIG['product'] = PRODUCT %> - -pub mod longhands { - use cssparser::Parser; - use parser::ParserContext; - use values::specified; - - <%def name="raw_longhand(name, **kwargs)"> - <% - products = kwargs.pop("products", "gecko servo").split() - if not CONFIG["product"] in products: - return "" - - property = Longhand(name, **kwargs) - - property.style_struct = THIS_STYLE_STRUCT - THIS_STYLE_STRUCT.longhands.append(property) - LONGHANDS.append(property) - LONGHANDS_BY_NAME[name] = property - - for derived in property.derived_from: - DERIVED_LONGHANDS.setdefault(derived, []).append(property) - %> - pub mod ${property.ident} { - #![allow(unused_imports)] - % if not property.derived_from: - use cssparser::Parser; - use parser::ParserContext; - use properties::{CSSWideKeyword, DeclaredValue, Shorthand}; - % endif - use error_reporting::ParseErrorReporter; - use properties::longhands; - use properties::property_bit_field::PropertyBitField; - use properties::{ComputedValues, ServoComputedValues, PropertyDeclaration}; - use properties::style_struct_traits::${THIS_STYLE_STRUCT.trait_name}; - use properties::style_structs; - use std::boxed::Box as StdBox; - use std::collections::HashMap; - use std::sync::Arc; - use values::computed::{TContext, ToComputedValue}; - use values::{computed, specified}; - use string_cache::Atom; - ${caller.body()} - #[allow(unused_variables)] - pub fn cascade_property<C: ComputedValues>( - declaration: &PropertyDeclaration, - inherited_style: &C, - context: &mut computed::Context<C>, - seen: &mut PropertyBitField, - cacheable: &mut bool, - error_reporter: &mut StdBox<ParseErrorReporter + Send>) { - let declared_value = match *declaration { - PropertyDeclaration::${property.camel_case}(ref declared_value) => { - declared_value - } - _ => panic!("entered the wrong cascade_property() implementation"), - }; - % if not property.derived_from: - if seen.get_${property.ident}() { - return - } - seen.set_${property.ident}(); - { - let custom_props = context.style().custom_properties(); - ::properties::substitute_variables_${property.ident}( - declared_value, &custom_props, |value| match *value { - DeclaredValue::Value(ref specified_value) => { - let computed = specified_value.to_computed_value(context); - context.mutate_style().mutate_${THIS_STYLE_STRUCT.trait_name_lower}() - .set_${property.ident}(computed); - } - DeclaredValue::WithVariables { .. } => unreachable!(), - DeclaredValue::Initial => { - // We assume that it's faster to use copy_*_from rather than - // set_*(get_initial_value()); - let initial_struct = C::initial_values() - .get_${THIS_STYLE_STRUCT.trait_name_lower}(); - context.mutate_style().mutate_${THIS_STYLE_STRUCT.trait_name_lower}() - .copy_${property.ident}_from(initial_struct); - }, - DeclaredValue::Inherit => { - // This is a bit slow, but this is rare so it shouldn't - // matter. - // - // FIXME: is it still? - *cacheable = false; - let inherited_struct = inherited_style.get_${THIS_STYLE_STRUCT.trait_name_lower}(); - context.mutate_style().mutate_${THIS_STYLE_STRUCT.trait_name_lower}() - .copy_${property.ident}_from(inherited_struct); - } - }, error_reporter - ); - } - - % if property.custom_cascade: - cascade_property_custom(declaration, - inherited_style, - context, - seen, - cacheable, - error_reporter); - % endif - % else: - // Do not allow stylesheets to set derived properties. - % endif - } - % if not property.derived_from: - pub fn parse_declared(context: &ParserContext, input: &mut Parser) - -> Result<DeclaredValue<SpecifiedValue>, ()> { - match input.try(CSSWideKeyword::parse) { - Ok(CSSWideKeyword::InheritKeyword) => Ok(DeclaredValue::Inherit), - Ok(CSSWideKeyword::InitialKeyword) => Ok(DeclaredValue::Initial), - Ok(CSSWideKeyword::UnsetKeyword) => Ok(DeclaredValue::${ - "Inherit" if THIS_STYLE_STRUCT.inherited else "Initial"}), - Err(()) => { - input.look_for_var_functions(); - let start = input.position(); - let specified = parse_specified(context, input); - if specified.is_err() { - while let Ok(_) = input.next() {} // Look for var() after the error. - } - let var = input.seen_var_functions(); - if specified.is_err() && var { - input.reset(start); - let (first_token_type, css) = try!( - ::custom_properties::parse_non_custom_with_var(input)); - return Ok(DeclaredValue::WithVariables { - css: css.into_owned(), - first_token_type: first_token_type, - base_url: context.base_url.clone(), - from_shorthand: None, - }) - } - specified - } - } - } - % endif - } - </%def> - - <%def name="longhand(name, **kwargs)"> - <%call expr="raw_longhand(name, **kwargs)"> - ${caller.body()} - % if not LONGHANDS_BY_NAME[name].derived_from: - pub fn parse_specified(context: &ParserContext, input: &mut Parser) - -> Result<DeclaredValue<SpecifiedValue>, ()> { - parse(context, input).map(DeclaredValue::Value) - } - % endif - </%call> - </%def> - - <%def name="single_keyword_computed(name, values, **kwargs)"> - <%call expr="longhand(name, keyword=Keyword(name, values.split(), **kwargs), **kwargs)"> - pub use self::computed_value::T as SpecifiedValue; - ${caller.body()} - pub mod computed_value { - define_css_keyword_enum! { T: - % for value in LONGHANDS_BY_NAME[name].keyword.values_for(CONFIG['product']): - "${value}" => ${to_rust_ident(value)}, - % endfor - } - } - #[inline] pub fn get_initial_value() -> computed_value::T { - computed_value::T::${to_rust_ident(values.split()[0])} - } - pub fn parse(_context: &ParserContext, input: &mut Parser) - -> Result<SpecifiedValue, ()> { - computed_value::T::parse(input) - } - </%call> - </%def> - - <%def name="single_keyword(name, values, **kwargs)"> - <%call expr="single_keyword_computed(name, values, **kwargs)"> - use values::computed::ComputedValueAsSpecified; - impl ComputedValueAsSpecified for SpecifiedValue {} - </%call> - </%def> - - <%def name="predefined_type(name, type, initial_value, parse_method='parse', products='gecko servo')"> - <%self:longhand name="${name}" products="${products}"> - #[allow(unused_imports)] - use app_units::Au; - pub type SpecifiedValue = specified::${type}; - pub mod computed_value { - pub use values::computed::${type} as T; - } - #[inline] pub fn get_initial_value() -> computed_value::T { ${initial_value} } - #[inline] pub fn parse(_context: &ParserContext, input: &mut Parser) - -> Result<SpecifiedValue, ()> { - specified::${type}::${parse_method}(input) - } - </%self:longhand> - </%def> - - - // CSS 2.1, Section 8 - Box model - - ${new_style_struct("Margin", is_inherited=False, gecko_name="nsStyleMargin")} - - % for side in ["top", "right", "bottom", "left"]: - ${predefined_type("margin-" + side, "LengthOrPercentageOrAuto", - "computed::LengthOrPercentageOrAuto::Length(Au(0))")} - % endfor - - ${new_style_struct("Padding", is_inherited=False, gecko_name="nsStylePadding")} - - % for side in ["top", "right", "bottom", "left"]: - ${predefined_type("padding-" + side, "LengthOrPercentage", - "computed::LengthOrPercentage::Length(Au(0))", - "parse_non_negative")} - % endfor - - ${new_style_struct("Border", is_inherited=False, gecko_name="nsStyleBorder", - additional_methods=[Method("border_" + side + "_is_none_or_hidden_and_has_nonzero_width", - "bool") for side in ["top", "right", "bottom", "left"]])} - - % for side in ["top", "right", "bottom", "left"]: - ${predefined_type("border-%s-color" % side, "CSSColor", "::cssparser::Color::CurrentColor")} - % endfor - - % for side in ["top", "right", "bottom", "left"]: - ${predefined_type("border-%s-style" % side, "BorderStyle", "specified::BorderStyle::none")} - % endfor - - % for side in ["top", "right", "bottom", "left"]: - <%self:longhand name="border-${side}-width"> - use app_units::Au; - use cssparser::ToCss; - use std::fmt; - - impl ToCss for SpecifiedValue { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - self.0.to_css(dest) - } - } - - #[inline] - pub fn parse(_context: &ParserContext, input: &mut Parser) - -> Result<SpecifiedValue, ()> { - specified::parse_border_width(input).map(SpecifiedValue) - } - #[derive(Debug, Clone, PartialEq, HeapSizeOf)] - pub struct SpecifiedValue(pub specified::Length); - pub mod computed_value { - use app_units::Au; - pub type T = Au; - } - #[inline] pub fn get_initial_value() -> computed_value::T { - Au::from_px(3) // medium - } - - impl ToComputedValue for SpecifiedValue { - type ComputedValue = computed_value::T; - - #[inline] - fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { - self.0.to_computed_value(context) - } - } - </%self:longhand> - % endfor - - // FIXME(#4126): when gfx supports painting it, make this Size2D<LengthOrPercentage> - % for corner in ["top-left", "top-right", "bottom-right", "bottom-left"]: - ${predefined_type("border-" + corner + "-radius", "BorderRadiusSize", - "computed::BorderRadiusSize::zero()", - "parse")} - % endfor - - ${new_style_struct("Outline", is_inherited=False, gecko_name="nsStyleOutline", - additional_methods=[Method("outline_is_none_or_hidden_and_has_nonzero_width", "bool")])} - - // TODO(pcwalton): `invert` - ${predefined_type("outline-color", "CSSColor", "::cssparser::Color::CurrentColor")} - - <%self:longhand name="outline-style"> - pub use values::specified::BorderStyle as SpecifiedValue; - pub fn get_initial_value() -> SpecifiedValue { SpecifiedValue::none } - pub mod computed_value { - pub use values::specified::BorderStyle as T; - } - pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { - match SpecifiedValue::parse(input) { - Ok(SpecifiedValue::hidden) => Err(()), - result => result - } - } - </%self:longhand> - - <%self:longhand name="outline-width"> - use app_units::Au; - use cssparser::ToCss; - use std::fmt; - use values::AuExtensionMethods; - - impl ToCss for SpecifiedValue { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - self.0.to_css(dest) - } - } - - pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { - specified::parse_border_width(input).map(SpecifiedValue) - } - #[derive(Debug, Clone, PartialEq, HeapSizeOf)] - pub struct SpecifiedValue(pub specified::Length); - pub mod computed_value { - use app_units::Au; - pub type T = Au; - } - pub use super::border_top_width::get_initial_value; - impl ToComputedValue for SpecifiedValue { - type ComputedValue = computed_value::T; - - #[inline] - fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { - self.0.to_computed_value(context) - } - } - </%self:longhand> - - ${predefined_type("outline-offset", "Length", "Au(0)")} - - ${new_style_struct("Position", is_inherited=False, gecko_name="nsStylePosition")} - - % for side in ["top", "right", "bottom", "left"]: - ${predefined_type(side, "LengthOrPercentageOrAuto", - "computed::LengthOrPercentageOrAuto::Auto")} - % endfor - - // CSS 2.1, Section 9 - Visual formatting model - - ${new_style_struct("Box", is_inherited=False, gecko_name="nsStyleDisplay", - additional_methods=[Method("clone_display", - "longhands::display::computed_value::T"), - Method("clone_position", - "longhands::position::computed_value::T"), - Method("is_floated", "bool"), - Method("overflow_x_is_visible", "bool"), - Method("overflow_y_is_visible", "bool"), - Method("transition_count", "usize")])} - - // TODO(SimonSapin): don't parse `inline-table`, since we don't support it - <%self:longhand name="display" custom_cascade="${CONFIG['product'] == 'servo'}"> - <% - values = """inline block inline-block - table inline-table table-row-group table-header-group table-footer-group - table-row table-column-group table-column table-cell table-caption - list-item flex - none - """.split() - experimental_values = set("flex".split()) - %> - pub use self::computed_value::T as SpecifiedValue; - use values::computed::{Context, ComputedValueAsSpecified}; - - pub mod computed_value { - #[allow(non_camel_case_types)] - #[derive(Clone, Eq, PartialEq, Copy, Hash, RustcEncodable, Debug, HeapSizeOf)] - #[derive(Deserialize, Serialize)] - pub enum T { - % for value in values: - ${to_rust_ident(value)}, - % endfor - } - - impl ::cssparser::ToCss for T { - fn to_css<W>(&self, dest: &mut W) -> ::std::fmt::Result - where W: ::std::fmt::Write { - match *self { - % for value in values: - T::${to_rust_ident(value)} => dest.write_str("${value}"), - % endfor - } - } - } - } - #[inline] pub fn get_initial_value() -> computed_value::T { - computed_value::T::${to_rust_ident(values[0])} - } - pub fn parse(_context: &ParserContext, input: &mut Parser) - -> Result<SpecifiedValue, ()> { - match_ignore_ascii_case! { try!(input.expect_ident()), - % for value in values: - "${value}" => { - % if value in experimental_values: - if !::util::prefs::get_pref("layout.${value}.enabled") - .as_boolean().unwrap_or(false) { - return Err(()) - } - % endif - Ok(computed_value::T::${to_rust_ident(value)}) - }, - % endfor - _ => Err(()) - } - } - - impl ComputedValueAsSpecified for SpecifiedValue {} - - % if CONFIG["product"] == "servo": - fn cascade_property_custom<C: ComputedValues>( - _declaration: &PropertyDeclaration, - _inherited_style: &C, - context: &mut computed::Context<C>, - _seen: &mut PropertyBitField, - _cacheable: &mut bool, - _error_reporter: &mut StdBox<ParseErrorReporter + Send>) { - longhands::_servo_display_for_hypothetical_box::derive_from_display(context); - longhands::_servo_text_decorations_in_effect::derive_from_display(context); - } - % endif - - </%self:longhand> - - ${single_keyword("position", "static absolute relative fixed", extra_gecko_values="sticky")} - - <%self:single_keyword_computed name="float" values="none left right" gecko_ffi_name="mFloats"> - impl ToComputedValue for SpecifiedValue { - type ComputedValue = computed_value::T; - - #[inline] - fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { - let positioned = matches!(context.style().get_box().clone_position(), - longhands::position::SpecifiedValue::absolute | - longhands::position::SpecifiedValue::fixed); - if positioned { - SpecifiedValue::none - } else { - *self - } - } - } - - </%self:single_keyword_computed> - - ${single_keyword("clear", "none left right both", gecko_ffi_name="mBreakType")} - - <%self:longhand name="-servo-display-for-hypothetical-box" derived_from="display" products="servo"> - pub use super::display::{SpecifiedValue, get_initial_value}; - pub use super::display::{parse}; - - pub mod computed_value { - pub type T = super::SpecifiedValue; - } - - #[inline] - pub fn derive_from_display<Cx: TContext>(context: &mut Cx) { - let d = context.style().get_box().clone_display(); - context.mutate_style().mutate_box().set__servo_display_for_hypothetical_box(d); - } - - </%self:longhand> - - ${switch_to_style_struct("Position")} - - <%self:longhand name="z-index"> - use values::computed::ComputedValueAsSpecified; - - impl ComputedValueAsSpecified for SpecifiedValue {} - pub type SpecifiedValue = computed_value::T; - pub mod computed_value { - use cssparser::ToCss; - use std::fmt; - - #[derive(PartialEq, Clone, Eq, Copy, Debug, HeapSizeOf)] - pub enum T { - Auto, - Number(i32), - } - - impl ToCss for T { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match *self { - T::Auto => dest.write_str("auto"), - T::Number(number) => write!(dest, "{}", number), - } - } - } - - impl T { - pub fn number_or_zero(self) -> i32 { - match self { - T::Auto => 0, - T::Number(value) => value, - } - } - } - } - #[inline] - pub fn get_initial_value() -> computed_value::T { - computed_value::T::Auto - } - fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { - if input.try(|input| input.expect_ident_matching("auto")).is_ok() { - Ok(computed_value::T::Auto) - } else { - specified::parse_integer(input).map(computed_value::T::Number) - } - } - </%self:longhand> - - ${new_style_struct("InheritedBox", is_inherited=True, gecko_name="nsStyleVisibility", - additional_methods=[Method("clone_direction", - "longhands::direction::computed_value::T"), - Method("clone_writing_mode", - "longhands::writing_mode::computed_value::T"), - Method("clone_text_orientation", - "longhands::text_orientation::computed_value::T")])} - - ${single_keyword("direction", "ltr rtl")} - - // CSS 2.1, Section 10 - Visual formatting model details - - ${switch_to_style_struct("Box")} - - ${predefined_type("width", "LengthOrPercentageOrAuto", - "computed::LengthOrPercentageOrAuto::Auto", - "parse_non_negative")} - - ${predefined_type("height", "LengthOrPercentageOrAuto", - "computed::LengthOrPercentageOrAuto::Auto", - "parse_non_negative")} - - ${switch_to_style_struct("Position")} - - ${predefined_type("min-width", "LengthOrPercentage", - "computed::LengthOrPercentage::Length(Au(0))", - "parse_non_negative")} - ${predefined_type("max-width", "LengthOrPercentageOrNone", - "computed::LengthOrPercentageOrNone::None", - "parse_non_negative")} - - ${predefined_type("min-height", "LengthOrPercentage", - "computed::LengthOrPercentage::Length(Au(0))", - "parse_non_negative")} - ${predefined_type("max-height", "LengthOrPercentageOrNone", - "computed::LengthOrPercentageOrNone::None", - "parse_non_negative")} - - ${new_style_struct("InheritedText", is_inherited=True, gecko_name="nsStyleText", - additional_methods=([Method("clone__servo_text_decorations_in_effect", - "longhands::_servo_text_decorations_in_effect::computed_value::T")] - if CONFIG["product"] == "servo" else []))} - - <%self:longhand name="line-height"> - use cssparser::ToCss; - use std::fmt; - use values::AuExtensionMethods; - use values::CSSFloat; - - #[derive(Debug, Clone, PartialEq, Copy, HeapSizeOf)] - pub enum SpecifiedValue { - Normal, - Number(CSSFloat), - LengthOrPercentage(specified::LengthOrPercentage), - } - - impl ToCss for SpecifiedValue { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match *self { - SpecifiedValue::Normal => dest.write_str("normal"), - SpecifiedValue::LengthOrPercentage(value) => value.to_css(dest), - SpecifiedValue::Number(number) => write!(dest, "{}", number), - } - } - } - /// normal | <number> | <length> | <percentage> - pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { - use cssparser::Token; - use std::ascii::AsciiExt; - input.try(specified::LengthOrPercentage::parse_non_negative) - .map(SpecifiedValue::LengthOrPercentage) - .or_else(|()| { - match try!(input.next()) { - Token::Number(ref value) if value.value >= 0. => { - Ok(SpecifiedValue::Number(value.value)) - } - Token::Ident(ref value) if value.eq_ignore_ascii_case("normal") => { - Ok(SpecifiedValue::Normal) - } - _ => Err(()), - } - }) - } - pub mod computed_value { - use app_units::Au; - use std::fmt; - use values::CSSFloat; - #[derive(PartialEq, Copy, Clone, HeapSizeOf, Debug)] - pub enum T { - Normal, - Length(Au), - Number(CSSFloat), - } - } - impl ToCss for computed_value::T { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match *self { - computed_value::T::Normal => dest.write_str("normal"), - computed_value::T::Length(length) => length.to_css(dest), - computed_value::T::Number(number) => write!(dest, "{}", number), - } - } - } - #[inline] - pub fn get_initial_value() -> computed_value::T { computed_value::T::Normal } - - impl ToComputedValue for SpecifiedValue { - type ComputedValue = computed_value::T; - - #[inline] - fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { - match *self { - SpecifiedValue::Normal => computed_value::T::Normal, - SpecifiedValue::Number(value) => computed_value::T::Number(value), - SpecifiedValue::LengthOrPercentage(value) => { - match value { - specified::LengthOrPercentage::Length(value) => - computed_value::T::Length(value.to_computed_value(context)), - specified::LengthOrPercentage::Percentage(specified::Percentage(value)) => { - let fr = specified::Length::FontRelative(specified::FontRelativeLength::Em(value)); - computed_value::T::Length(fr.to_computed_value(context)) - }, - specified::LengthOrPercentage::Calc(calc) => { - let calc = calc.to_computed_value(context); - let fr = specified::FontRelativeLength::Em(calc.percentage()); - let fr = specified::Length::FontRelative(fr); - computed_value::T::Length(calc.length() + fr.to_computed_value(context)) - } - } - } - } - } - } - </%self:longhand> - - ${switch_to_style_struct("Box")} - - <%self:longhand name="vertical-align"> - use cssparser::ToCss; - use std::fmt; - - <% vertical_align_keywords = ( - "baseline sub super top text-top middle bottom text-bottom".split()) %> - #[allow(non_camel_case_types)] - #[derive(Debug, Clone, PartialEq, Copy, HeapSizeOf)] - pub enum SpecifiedValue { - % for keyword in vertical_align_keywords: - ${to_rust_ident(keyword)}, - % endfor - LengthOrPercentage(specified::LengthOrPercentage), - } - - impl ToCss for SpecifiedValue { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match *self { - % for keyword in vertical_align_keywords: - SpecifiedValue::${to_rust_ident(keyword)} => dest.write_str("${keyword}"), - % endfor - SpecifiedValue::LengthOrPercentage(value) => value.to_css(dest), - } - } - } - /// baseline | sub | super | top | text-top | middle | bottom | text-bottom - /// | <percentage> | <length> - pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { - input.try(specified::LengthOrPercentage::parse) - .map(SpecifiedValue::LengthOrPercentage) - .or_else(|()| { - match_ignore_ascii_case! { try!(input.expect_ident()), - % for keyword in vertical_align_keywords: - "${keyword}" => Ok(SpecifiedValue::${to_rust_ident(keyword)}), - % endfor - _ => Err(()) - } - }) - } - pub mod computed_value { - use app_units::Au; - use std::fmt; - use values::AuExtensionMethods; - use values::{CSSFloat, computed}; - #[allow(non_camel_case_types)] - #[derive(PartialEq, Copy, Clone, HeapSizeOf, Debug)] - pub enum T { - % for keyword in vertical_align_keywords: - ${to_rust_ident(keyword)}, - % endfor - LengthOrPercentage(computed::LengthOrPercentage), - } - impl ::cssparser::ToCss for T { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match *self { - % for keyword in vertical_align_keywords: - T::${to_rust_ident(keyword)} => dest.write_str("${keyword}"), - % endfor - T::LengthOrPercentage(value) => value.to_css(dest), - } - } - } - } - #[inline] - pub fn get_initial_value() -> computed_value::T { computed_value::T::baseline } - - impl ToComputedValue for SpecifiedValue { - type ComputedValue = computed_value::T; - - #[inline] - fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { - match *self { - % for keyword in vertical_align_keywords: - SpecifiedValue::${to_rust_ident(keyword)} => { - computed_value::T::${to_rust_ident(keyword)} - } - % endfor - SpecifiedValue::LengthOrPercentage(value) => - computed_value::T::LengthOrPercentage(value.to_computed_value(context)), - } - } - } - </%self:longhand> - - - // CSS 2.1, Section 11 - Visual effects - - // Non-standard, see https://developer.mozilla.org/en-US/docs/Web/CSS/overflow-clip-box#Specifications - ${single_keyword("-servo-overflow-clip-box", "padding-box content-box", products="servo", - internal=True)} - - ${single_keyword("overflow-clip-box", "padding-box content-box", products="gecko", - internal=True)} - - // FIXME(pcwalton, #2742): Implement scrolling for `scroll` and `auto`. - ${single_keyword("overflow-x", "visible hidden scroll auto", gecko_constant_prefix="NS_STYLE_OVERFLOW")} - - // FIXME(pcwalton, #2742): Implement scrolling for `scroll` and `auto`. - <%self:longhand name="overflow-y"> - use super::overflow_x; - - use cssparser::ToCss; - use std::fmt; - - pub use self::computed_value::T as SpecifiedValue; - - impl ToCss for SpecifiedValue { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - self.0.to_css(dest) - } - } - - pub mod computed_value { - #[derive(Debug, Clone, Copy, PartialEq, HeapSizeOf)] - pub struct T(pub super::super::overflow_x::computed_value::T); - } - - impl ToComputedValue for SpecifiedValue { - type ComputedValue = computed_value::T; - - #[inline] - fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { - computed_value::T(self.0.to_computed_value(context)) - } - } - - pub fn get_initial_value() -> computed_value::T { - computed_value::T(overflow_x::get_initial_value()) - } - - pub fn parse(context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue,()> { - overflow_x::parse(context, input).map(SpecifiedValue) - } - </%self:longhand> - - // CSSOM View Module - // https://www.w3.org/TR/cssom-view-1/ - ${single_keyword("scroll-behavior", "auto smooth", products="gecko")} - - // Non-standard: https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-snap-type-x - ${single_keyword("scroll-snap-type-x", "none mandatory proximity", - products="gecko", gecko_constant_prefix="NS_STYLE_SCROLL_SNAP_TYPE")} - - // Non-standard: https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-snap-type-y - ${single_keyword("scroll-snap-type-y", "none mandatory proximity", - products="gecko", gecko_constant_prefix="NS_STYLE_SCROLL_SNAP_TYPE")} - - // Compositing and Blending Level 1 - // http://www.w3.org/TR/compositing-1/ - ${single_keyword("isolation", "auto isolate", products="gecko")} - - ${switch_to_style_struct("InheritedBox")} - - // TODO: collapse. Well, do tables first. - ${single_keyword("visibility", "visible hidden", extra_gecko_values="collapse", - gecko_ffi_name="mVisible")} - - // CSS 2.1, Section 12 - Generated content, automatic numbering, and lists - - ${new_style_struct("Counters", is_inherited=False, gecko_name="nsStyleContent")} - - <%self:longhand name="content"> - use cssparser::Token; - use std::ascii::AsciiExt; - use values::computed::ComputedValueAsSpecified; - - use super::list_style_type; - - pub use self::computed_value::T as SpecifiedValue; - pub use self::computed_value::ContentItem; - - impl ComputedValueAsSpecified for SpecifiedValue {} - - pub mod computed_value { - use super::super::list_style_type; - - use cssparser::{self, ToCss}; - use std::fmt; - - #[derive(Debug, PartialEq, Eq, Clone, HeapSizeOf)] - pub enum ContentItem { - /// Literal string content. - String(String), - /// `counter(name, style)`. - Counter(String, list_style_type::computed_value::T), - /// `counters(name, separator, style)`. - Counters(String, String, list_style_type::computed_value::T), - /// `open-quote`. - OpenQuote, - /// `close-quote`. - CloseQuote, - /// `no-open-quote`. - NoOpenQuote, - /// `no-close-quote`. - NoCloseQuote, - } - - impl ToCss for ContentItem { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match *self { - ContentItem::String(ref s) => { - cssparser::serialize_string(&**s, dest) - } - ContentItem::Counter(ref s, ref list_style_type) => { - try!(dest.write_str("counter(")); - try!(cssparser::serialize_identifier(&**s, dest)); - try!(dest.write_str(", ")); - try!(list_style_type.to_css(dest)); - dest.write_str(")") - } - ContentItem::Counters(ref s, ref separator, ref list_style_type) => { - try!(dest.write_str("counter(")); - try!(cssparser::serialize_identifier(&**s, dest)); - try!(dest.write_str(", ")); - try!(cssparser::serialize_string(&**separator, dest)); - try!(dest.write_str(", ")); - try!(list_style_type.to_css(dest)); - dest.write_str(")") - } - ContentItem::OpenQuote => dest.write_str("open-quote"), - ContentItem::CloseQuote => dest.write_str("close-quote"), - ContentItem::NoOpenQuote => dest.write_str("no-open-quote"), - ContentItem::NoCloseQuote => dest.write_str("no-close-quote"), - } - } - } - - #[allow(non_camel_case_types)] - #[derive(Debug, PartialEq, Eq, Clone, HeapSizeOf)] - pub enum T { - normal, - none, - Content(Vec<ContentItem>), - } - - impl ToCss for T { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match *self { - T::normal => dest.write_str("normal"), - T::none => dest.write_str("none"), - T::Content(ref content) => { - let mut iter = content.iter(); - try!(iter.next().unwrap().to_css(dest)); - for c in iter { - try!(dest.write_str(" ")); - try!(c.to_css(dest)); - } - Ok(()) - } - } - } - } - } - #[inline] - pub fn get_initial_value() -> computed_value::T { - computed_value::T::normal - } - - pub fn counter_name_is_illegal(name: &str) -> bool { - name.eq_ignore_ascii_case("none") || name.eq_ignore_ascii_case("inherit") || - name.eq_ignore_ascii_case("initial") - } - - // normal | none | [ <string> | <counter> | open-quote | close-quote | no-open-quote | - // no-close-quote ]+ - // TODO: <uri>, attr(<identifier>) - pub fn parse(context: &ParserContext, input: &mut Parser) - -> Result<SpecifiedValue, ()> { - if input.try(|input| input.expect_ident_matching("normal")).is_ok() { - return Ok(SpecifiedValue::normal) - } - if input.try(|input| input.expect_ident_matching("none")).is_ok() { - return Ok(SpecifiedValue::none) - } - let mut content = vec![]; - loop { - match input.next() { - Ok(Token::QuotedString(value)) => { - content.push(ContentItem::String(value.into_owned())) - } - Ok(Token::Function(name)) => { - content.push(try!(match_ignore_ascii_case! { name, - "counter" => input.parse_nested_block(|input| { - let name = try!(input.expect_ident()).into_owned(); - let style = input.try(|input| { - try!(input.expect_comma()); - list_style_type::parse(context, input) - }).unwrap_or(list_style_type::computed_value::T::decimal); - Ok(ContentItem::Counter(name, style)) - }), - "counters" => input.parse_nested_block(|input| { - let name = try!(input.expect_ident()).into_owned(); - try!(input.expect_comma()); - let separator = try!(input.expect_string()).into_owned(); - let style = input.try(|input| { - try!(input.expect_comma()); - list_style_type::parse(context, input) - }).unwrap_or(list_style_type::computed_value::T::decimal); - Ok(ContentItem::Counters(name, separator, style)) - }), - _ => return Err(()) - })); - } - Ok(Token::Ident(ident)) => { - match_ignore_ascii_case! { ident, - "open-quote" => content.push(ContentItem::OpenQuote), - "close-quote" => content.push(ContentItem::CloseQuote), - "no-open-quote" => content.push(ContentItem::NoOpenQuote), - "no-close-quote" => content.push(ContentItem::NoCloseQuote), - _ => return Err(()) - } - } - Err(_) => break, - _ => return Err(()) - } - } - if !content.is_empty() { - Ok(SpecifiedValue::Content(content)) - } else { - Err(()) - } - } - </%self:longhand> - - ${new_style_struct("List", is_inherited=True, gecko_name="nsStyleList")} - - ${single_keyword("list-style-position", "outside inside")} - - // TODO(pcwalton): Implement the full set of counter styles per CSS-COUNTER-STYLES [1] 6.1: - // - // decimal-leading-zero, armenian, upper-armenian, lower-armenian, georgian, lower-roman, - // upper-roman - // - // [1]: http://dev.w3.org/csswg/css-counter-styles/ - ${single_keyword("list-style-type", """ - disc none circle square decimal arabic-indic bengali cambodian cjk-decimal devanagari - gujarati gurmukhi kannada khmer lao malayalam mongolian myanmar oriya persian telugu thai - tibetan lower-alpha upper-alpha cjk-earthly-branch cjk-heavenly-stem lower-greek hiragana - hiragana-iroha katakana katakana-iroha disclosure-open disclosure-closed - """)} - - <%self:longhand name="list-style-image"> - use cssparser::{ToCss, Token}; - use std::fmt; - use url::Url; - use values::LocalToCss; - - #[derive(Debug, Clone, PartialEq, Eq, HeapSizeOf)] - pub enum SpecifiedValue { - None, - Url(Url), - } - - impl ToCss for SpecifiedValue { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match *self { - SpecifiedValue::None => dest.write_str("none"), - SpecifiedValue::Url(ref url) => url.to_css(dest), - } - } - } - - pub mod computed_value { - use cssparser::{ToCss, Token}; - use std::fmt; - use url::Url; - use values::LocalToCss; - - #[derive(Debug, Clone, PartialEq, HeapSizeOf)] - pub struct T(pub Option<Url>); - - impl ToCss for T { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match self.0 { - None => dest.write_str("none"), - Some(ref url) => url.to_css(dest), - } - } - } - } - - impl ToComputedValue for SpecifiedValue { - type ComputedValue = computed_value::T; - - #[inline] - fn to_computed_value<Cx: TContext>(&self, _context: &Cx) -> computed_value::T { - match *self { - SpecifiedValue::None => computed_value::T(None), - SpecifiedValue::Url(ref url) => computed_value::T(Some(url.clone())), - } - } - } - - pub fn parse(context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { - if input.try(|input| input.expect_ident_matching("none")).is_ok() { - Ok(SpecifiedValue::None) - } else { - Ok(SpecifiedValue::Url(context.parse_url(&*try!(input.expect_url())))) - } - } - #[inline] - pub fn get_initial_value() -> computed_value::T { - computed_value::T(None) - } - </%self:longhand> - - <%self:longhand name="quotes"> - use std::borrow::Cow; - use std::fmt; - use values::computed::ComputedValueAsSpecified; - - use cssparser::{ToCss, Token}; - - pub use self::computed_value::T as SpecifiedValue; - - pub mod computed_value { - #[derive(Debug, Clone, PartialEq, HeapSizeOf)] - pub struct T(pub Vec<(String,String)>); - } - - impl ComputedValueAsSpecified for SpecifiedValue {} - - impl ToCss for SpecifiedValue { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - let mut first = true; - for pair in &self.0 { - if !first { - try!(dest.write_str(" ")); - } - first = false; - try!(Token::QuotedString(Cow::from(&*pair.0)).to_css(dest)); - try!(dest.write_str(" ")); - try!(Token::QuotedString(Cow::from(&*pair.1)).to_css(dest)); - } - Ok(()) - } - } - - #[inline] - pub fn get_initial_value() -> computed_value::T { - computed_value::T(vec![ - ("\u{201c}".to_owned(), "\u{201d}".to_owned()), - ("\u{2018}".to_owned(), "\u{2019}".to_owned()), - ]) - } - - pub fn parse(_: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue,()> { - if input.try(|input| input.expect_ident_matching("none")).is_ok() { - return Ok(SpecifiedValue(Vec::new())) - } - - let mut quotes = Vec::new(); - loop { - let first = match input.next() { - Ok(Token::QuotedString(value)) => value.into_owned(), - Ok(_) => return Err(()), - Err(()) => break, - }; - let second = match input.next() { - Ok(Token::QuotedString(value)) => value.into_owned(), - _ => return Err(()), - }; - quotes.push((first, second)) - } - if !quotes.is_empty() { - Ok(SpecifiedValue(quotes)) - } else { - Err(()) - } - } - </%self:longhand> - - ${switch_to_style_struct("Counters")} - - <%self:longhand name="counter-increment"> - use std::fmt; - use super::content; - use values::computed::ComputedValueAsSpecified; - - use cssparser::{ToCss, Token, serialize_identifier}; - use std::borrow::{Cow, ToOwned}; - - pub use self::computed_value::T as SpecifiedValue; - - pub mod computed_value { - #[derive(Debug, Clone, PartialEq, HeapSizeOf)] - pub struct T(pub Vec<(String,i32)>); - } - - #[inline] - pub fn get_initial_value() -> computed_value::T { - computed_value::T(Vec::new()) - } - - impl ComputedValueAsSpecified for SpecifiedValue {} - - impl ToCss for SpecifiedValue { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - let mut first = true; - for pair in &self.0 { - if !first { - try!(dest.write_str(" ")); - } - first = false; - try!(serialize_identifier(&pair.0, dest)); - try!(write!(dest, " {}", pair.1)); - } - Ok(()) - } - } - - pub fn parse(_: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue,()> { - parse_common(1, input) - } - - pub fn parse_common(default_value: i32, input: &mut Parser) -> Result<SpecifiedValue,()> { - if input.try(|input| input.expect_ident_matching("none")).is_ok() { - return Ok(SpecifiedValue(Vec::new())) - } - - let mut counters = Vec::new(); - loop { - let counter_name = match input.next() { - Ok(Token::Ident(ident)) => (*ident).to_owned(), - Ok(_) => return Err(()), - Err(_) => break, - }; - if content::counter_name_is_illegal(&counter_name) { - return Err(()) - } - let counter_delta = - input.try(|input| specified::parse_integer(input)).unwrap_or(default_value); - counters.push((counter_name, counter_delta)) - } - - if !counters.is_empty() { - Ok(SpecifiedValue(counters)) - } else { - Err(()) - } - } - </%self:longhand> - - <%self:longhand name="counter-reset"> - pub use super::counter_increment::{SpecifiedValue, computed_value, get_initial_value}; - use super::counter_increment::{parse_common}; - - pub fn parse(_: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue,()> { - parse_common(0, input) - } - </%self:longhand> - - // CSS 2.1, Section 13 - Paged media - - ${switch_to_style_struct("Box")} - - ${single_keyword("page-break-after", "auto always avoid left right", products="gecko")} - ${single_keyword("page-break-before", "auto always avoid left right", products="gecko")} - ${single_keyword("page-break-inside", "auto avoid", - products="gecko", gecko_ffi_name="mBreakInside", gecko_constant_prefix="NS_STYLE_PAGE_BREAK")} - - // CSS 2.1, Section 14 - Colors and Backgrounds - - ${new_style_struct("Background", is_inherited=False, gecko_name="nsStyleBackground")} - ${predefined_type( - "background-color", "CSSColor", - "::cssparser::Color::RGBA(::cssparser::RGBA { red: 0., green: 0., blue: 0., alpha: 0. }) /* transparent */")} - - <%self:longhand name="background-image"> - use cssparser::ToCss; - use std::fmt; - use values::specified::Image; - use values::LocalToCss; - - pub mod computed_value { - use values::computed; - #[derive(Debug, Clone, PartialEq, HeapSizeOf)] - pub struct T(pub Option<computed::Image>); - } - - impl ToCss for computed_value::T { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match self.0 { - None => dest.write_str("none"), - Some(computed::Image::Url(ref url)) => url.to_css(dest), - Some(computed::Image::LinearGradient(ref gradient)) => - gradient.to_css(dest) - } - } - } - - #[derive(Debug, Clone, PartialEq, HeapSizeOf)] - pub struct SpecifiedValue(pub Option<Image>); - - impl ToCss for SpecifiedValue { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match *self { - SpecifiedValue(Some(ref image)) => image.to_css(dest), - SpecifiedValue(None) => dest.write_str("none"), - } - } - } - - #[inline] - pub fn get_initial_value() -> computed_value::T { - computed_value::T(None) - } - pub fn parse(context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { - if input.try(|input| input.expect_ident_matching("none")).is_ok() { - Ok(SpecifiedValue(None)) - } else { - Ok(SpecifiedValue(Some(try!(Image::parse(context, input))))) - } - } - impl ToComputedValue for SpecifiedValue { - type ComputedValue = computed_value::T; - - #[inline] - fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { - match *self { - SpecifiedValue(None) => computed_value::T(None), - SpecifiedValue(Some(ref image)) => - computed_value::T(Some(image.to_computed_value(context))), - } - } - } - </%self:longhand> - - <%self:longhand name="background-position"> - use cssparser::ToCss; - use std::fmt; - use values::AuExtensionMethods; - - pub mod computed_value { - use values::computed::LengthOrPercentage; - - #[derive(PartialEq, Copy, Clone, Debug, HeapSizeOf)] - pub struct T { - pub horizontal: LengthOrPercentage, - pub vertical: LengthOrPercentage, - } - } - - #[derive(Debug, Clone, PartialEq, Copy, HeapSizeOf)] - pub struct SpecifiedValue { - pub horizontal: specified::LengthOrPercentage, - pub vertical: specified::LengthOrPercentage, - } - - impl ToCss for SpecifiedValue { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - try!(self.horizontal.to_css(dest)); - try!(dest.write_str(" ")); - try!(self.vertical.to_css(dest)); - Ok(()) - } - } - - impl ToCss for computed_value::T { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - try!(self.horizontal.to_css(dest)); - try!(dest.write_str(" ")); - try!(self.vertical.to_css(dest)); - Ok(()) - } - } - - impl SpecifiedValue { - fn new(first: specified::PositionComponent, second: specified::PositionComponent) - -> Result<SpecifiedValue, ()> { - let (horiz, vert) = match (category(first), category(second)) { - // Don't allow two vertical keywords or two horizontal keywords. - (PositionCategory::HorizontalKeyword, PositionCategory::HorizontalKeyword) | - (PositionCategory::VerticalKeyword, PositionCategory::VerticalKeyword) => return Err(()), - - // Swap if both are keywords and vertical precedes horizontal. - (PositionCategory::VerticalKeyword, PositionCategory::HorizontalKeyword) | - (PositionCategory::VerticalKeyword, PositionCategory::OtherKeyword) | - (PositionCategory::OtherKeyword, PositionCategory::HorizontalKeyword) => (second, first), - - // By default, horizontal is first. - _ => (first, second), - }; - Ok(SpecifiedValue { - horizontal: horiz.to_length_or_percentage(), - vertical: vert.to_length_or_percentage(), - }) - } - } - - // Collapse `Position` into a few categories to simplify the above `match` expression. - enum PositionCategory { - HorizontalKeyword, - VerticalKeyword, - OtherKeyword, - LengthOrPercentage, - } - fn category(p: specified::PositionComponent) -> PositionCategory { - match p { - specified::PositionComponent::Left | - specified::PositionComponent::Right => - PositionCategory::HorizontalKeyword, - specified::PositionComponent::Top | - specified::PositionComponent::Bottom => - PositionCategory::VerticalKeyword, - specified::PositionComponent::Center => - PositionCategory::OtherKeyword, - specified::PositionComponent::LengthOrPercentage(_) => - PositionCategory::LengthOrPercentage, - } - } - - impl ToComputedValue for SpecifiedValue { - type ComputedValue = computed_value::T; - - #[inline] - fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { - computed_value::T { - horizontal: self.horizontal.to_computed_value(context), - vertical: self.vertical.to_computed_value(context), - } - } - } - - #[inline] - pub fn get_initial_value() -> computed_value::T { - computed_value::T { - horizontal: computed::LengthOrPercentage::Percentage(0.0), - vertical: computed::LengthOrPercentage::Percentage(0.0), - } - } - - pub fn parse(_context: &ParserContext, input: &mut Parser) - -> Result<SpecifiedValue, ()> { - let first = try!(specified::PositionComponent::parse(input)); - let second = input.try(specified::PositionComponent::parse) - .unwrap_or(specified::PositionComponent::Center); - SpecifiedValue::new(first, second) - } - </%self:longhand> - - ${single_keyword("background-repeat", "repeat repeat-x repeat-y no-repeat")} - - ${single_keyword("background-attachment", "scroll fixed")} - - ${single_keyword("background-clip", "border-box padding-box content-box")} - - ${single_keyword("background-origin", "padding-box border-box content-box")} - - <%self:longhand name="background-size"> - use cssparser::{ToCss, Token}; - use std::ascii::AsciiExt; - use std::fmt; - - pub mod computed_value { - use values::computed::LengthOrPercentageOrAuto; - - #[derive(PartialEq, Clone, Debug, HeapSizeOf)] - pub struct ExplicitSize { - pub width: LengthOrPercentageOrAuto, - pub height: LengthOrPercentageOrAuto, - } - - #[derive(PartialEq, Clone, Debug, HeapSizeOf)] - pub enum T { - Explicit(ExplicitSize), - Cover, - Contain, - } - } - - impl ToCss for computed_value::T { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match *self { - computed_value::T::Explicit(ref size) => size.to_css(dest), - computed_value::T::Cover => dest.write_str("cover"), - computed_value::T::Contain => dest.write_str("contain"), - } - } - } - - #[derive(Clone, PartialEq, Debug, HeapSizeOf)] - pub struct SpecifiedExplicitSize { - pub width: specified::LengthOrPercentageOrAuto, - pub height: specified::LengthOrPercentageOrAuto, - } - - impl ToCss for SpecifiedExplicitSize { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - try!(self.width.to_css(dest)); - try!(dest.write_str(" ")); - self.height.to_css(dest) - } - } - - impl ToCss for computed_value::ExplicitSize { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - try!(self.width.to_css(dest)); - try!(dest.write_str(" ")); - self.height.to_css(dest) - } - } - - - #[derive(Clone, PartialEq, Debug, HeapSizeOf)] - pub enum SpecifiedValue { - Explicit(SpecifiedExplicitSize), - Cover, - Contain, - } - - impl ToCss for SpecifiedValue { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match *self { - SpecifiedValue::Explicit(ref size) => size.to_css(dest), - SpecifiedValue::Cover => dest.write_str("cover"), - SpecifiedValue::Contain => dest.write_str("contain"), - } - } - } - - impl ToComputedValue for SpecifiedValue { - type ComputedValue = computed_value::T; - - #[inline] - fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { - match *self { - SpecifiedValue::Explicit(ref size) => { - computed_value::T::Explicit(computed_value::ExplicitSize { - width: size.width.to_computed_value(context), - height: size.height.to_computed_value(context), - }) - } - SpecifiedValue::Cover => computed_value::T::Cover, - SpecifiedValue::Contain => computed_value::T::Contain, - } - } - } - - #[inline] - pub fn get_initial_value() -> computed_value::T { - computed_value::T::Explicit(computed_value::ExplicitSize { - width: computed::LengthOrPercentageOrAuto::Auto, - height: computed::LengthOrPercentageOrAuto::Auto, - }) - } - - pub fn parse(_: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue,()> { - let width; - if let Ok(value) = input.try(|input| { - match input.next() { - Err(_) => Err(()), - Ok(Token::Ident(ref ident)) if ident.eq_ignore_ascii_case("cover") => { - Ok(SpecifiedValue::Cover) - } - Ok(Token::Ident(ref ident)) if ident.eq_ignore_ascii_case("contain") => { - Ok(SpecifiedValue::Contain) - } - Ok(_) => Err(()), - } - }) { - return Ok(value) - } else { - width = try!(specified::LengthOrPercentageOrAuto::parse(input)) - } - - let height; - if let Ok(value) = input.try(|input| { - match input.next() { - Err(_) => Ok(specified::LengthOrPercentageOrAuto::Auto), - Ok(_) => Err(()), - } - }) { - height = value - } else { - height = try!(specified::LengthOrPercentageOrAuto::parse(input)); - } - - Ok(SpecifiedValue::Explicit(SpecifiedExplicitSize { - width: width, - height: height, - })) - } - </%self:longhand> - - ${new_style_struct("Color", is_inherited=True, gecko_name="nsStyleColor", - additional_methods=[Method("clone_color", - "longhands::color::computed_value::T")])} - - <%self:raw_longhand name="color"> - use cssparser::Color as CSSParserColor; - use cssparser::RGBA; - use values::specified::{CSSColor, CSSRGBA}; - - impl ToComputedValue for SpecifiedValue { - type ComputedValue = computed_value::T; - - #[inline] - fn to_computed_value<Cx: TContext>(&self, _context: &Cx) -> computed_value::T { - self.parsed - } - } - - pub type SpecifiedValue = CSSRGBA; - pub mod computed_value { - use cssparser; - pub type T = cssparser::RGBA; - } - #[inline] pub fn get_initial_value() -> computed_value::T { - RGBA { red: 0., green: 0., blue: 0., alpha: 1. } /* black */ - } - pub fn parse_specified(_context: &ParserContext, input: &mut Parser) - -> Result<DeclaredValue<SpecifiedValue>, ()> { - let value = try!(CSSColor::parse(input)); - let rgba = match value.parsed { - CSSParserColor::RGBA(rgba) => rgba, - CSSParserColor::CurrentColor => return Ok(DeclaredValue::Inherit) - }; - Ok(DeclaredValue::Value(CSSRGBA { - parsed: rgba, - authored: value.authored, - })) - } - </%self:raw_longhand> - - // CSS 2.1, Section 15 - Fonts - - ${new_style_struct("Font", is_inherited=True, gecko_name="nsStyleFont", - additional_methods=[Method("clone_font_size", - "longhands::font_size::computed_value::T"), - Method("clone_font_weight", - "longhands::font_weight::computed_value::T"), - Method("compute_font_hash", is_mut=True)])} - - <%self:longhand name="font-family"> - use self::computed_value::FontFamily; - use values::computed::ComputedValueAsSpecified; - pub use self::computed_value::T as SpecifiedValue; - - const SERIF: &'static str = "serif"; - const SANS_SERIF: &'static str = "sans-serif"; - const CURSIVE: &'static str = "cursive"; - const FANTASY: &'static str = "fantasy"; - const MONOSPACE: &'static str = "monospace"; - - impl ComputedValueAsSpecified for SpecifiedValue {} - pub mod computed_value { - use cssparser::ToCss; - use std::fmt; - use string_cache::Atom; - - #[derive(Debug, PartialEq, Eq, Clone, Hash, HeapSizeOf, Deserialize, Serialize)] - pub enum FontFamily { - FamilyName(Atom), - // Generic, - Serif, - SansSerif, - Cursive, - Fantasy, - Monospace, - } - impl FontFamily { - #[inline] - pub fn name(&self) -> &str { - match *self { - FontFamily::FamilyName(ref name) => &*name, - FontFamily::Serif => super::SERIF, - FontFamily::SansSerif => super::SANS_SERIF, - FontFamily::Cursive => super::CURSIVE, - FontFamily::Fantasy => super::FANTASY, - FontFamily::Monospace => super::MONOSPACE - } - } - - pub fn from_atom(input: Atom) -> FontFamily { - let option = match_ignore_ascii_case! { &input, - super::SERIF => Some(FontFamily::Serif), - super::SANS_SERIF => Some(FontFamily::SansSerif), - super::CURSIVE => Some(FontFamily::Cursive), - super::FANTASY => Some(FontFamily::Fantasy), - super::MONOSPACE => Some(FontFamily::Monospace), - _ => None - }; - - match option { - Some(family) => family, - None => FontFamily::FamilyName(input) - } - } - } - impl ToCss for FontFamily { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - dest.write_str(self.name()) - } - } - impl ToCss for T { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - let mut iter = self.0.iter(); - try!(iter.next().unwrap().to_css(dest)); - for family in iter { - try!(dest.write_str(", ")); - try!(family.to_css(dest)); - } - Ok(()) - } - } - #[derive(Debug, Clone, PartialEq, Eq, Hash, HeapSizeOf)] - pub struct T(pub Vec<FontFamily>); - } - - #[inline] - pub fn get_initial_value() -> computed_value::T { - computed_value::T(vec![FontFamily::Serif]) - } - /// <family-name># - /// <family-name> = <string> | [ <ident>+ ] - /// TODO: <generic-family> - pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { - input.parse_comma_separated(parse_one_family).map(SpecifiedValue) - } - pub fn parse_one_family(input: &mut Parser) -> Result<FontFamily, ()> { - if let Ok(value) = input.try(|input| input.expect_string()) { - return Ok(FontFamily::FamilyName(Atom::from(&*value))) - } - let first_ident = try!(input.expect_ident()); - - match_ignore_ascii_case! { first_ident, - SERIF => return Ok(FontFamily::Serif), - SANS_SERIF => return Ok(FontFamily::SansSerif), - CURSIVE => return Ok(FontFamily::Cursive), - FANTASY => return Ok(FontFamily::Fantasy), - MONOSPACE => return Ok(FontFamily::Monospace), - _ => {} - } - let mut value = first_ident.into_owned(); - while let Ok(ident) = input.try(|input| input.expect_ident()) { - value.push_str(" "); - value.push_str(&ident); - } - Ok(FontFamily::FamilyName(Atom::from(value))) - } - </%self:longhand> - - - ${single_keyword("font-style", "normal italic oblique")} - ${single_keyword("font-variant", "normal small-caps")} - - <%self:longhand name="font-weight"> - use cssparser::ToCss; - use std::fmt; - - #[derive(Debug, Clone, PartialEq, Eq, Copy, HeapSizeOf)] - pub enum SpecifiedValue { - Bolder, - Lighter, - % for weight in range(100, 901, 100): - Weight${weight}, - % endfor - } - - impl ToCss for SpecifiedValue { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match *self { - SpecifiedValue::Bolder => dest.write_str("bolder"), - SpecifiedValue::Lighter => dest.write_str("lighter"), - % for weight in range(100, 901, 100): - SpecifiedValue::Weight${weight} => dest.write_str("${weight}"), - % endfor - } - } - } - /// normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 - pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { - input.try(|input| { - match_ignore_ascii_case! { try!(input.expect_ident()), - "bold" => Ok(SpecifiedValue::Weight700), - "normal" => Ok(SpecifiedValue::Weight400), - "bolder" => Ok(SpecifiedValue::Bolder), - "lighter" => Ok(SpecifiedValue::Lighter), - _ => Err(()) - } - }).or_else(|()| { - match try!(input.expect_integer()) { - 100 => Ok(SpecifiedValue::Weight100), - 200 => Ok(SpecifiedValue::Weight200), - 300 => Ok(SpecifiedValue::Weight300), - 400 => Ok(SpecifiedValue::Weight400), - 500 => Ok(SpecifiedValue::Weight500), - 600 => Ok(SpecifiedValue::Weight600), - 700 => Ok(SpecifiedValue::Weight700), - 800 => Ok(SpecifiedValue::Weight800), - 900 => Ok(SpecifiedValue::Weight900), - _ => Err(()) - } - }) - } - pub mod computed_value { - use std::fmt; - #[derive(PartialEq, Eq, Copy, Clone, Hash, Deserialize, Serialize, HeapSizeOf, Debug)] - pub enum T { - % for weight in range(100, 901, 100): - Weight${weight} = ${weight}, - % endfor - } - impl T { - #[inline] - pub fn is_bold(self) -> bool { - match self { - T::Weight900 | T::Weight800 | - T::Weight700 | T::Weight600 => true, - _ => false - } - } - } - } - impl ToCss for computed_value::T { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match *self { - % for weight in range(100, 901, 100): - computed_value::T::Weight${weight} => dest.write_str("${weight}"), - % endfor - } - } - } - #[inline] - pub fn get_initial_value() -> computed_value::T { - computed_value::T::Weight400 // normal - } - - impl ToComputedValue for SpecifiedValue { - type ComputedValue = computed_value::T; - - #[inline] - fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { - match *self { - % for weight in range(100, 901, 100): - SpecifiedValue::Weight${weight} => computed_value::T::Weight${weight}, - % endfor - SpecifiedValue::Bolder => match context.inherited_style().get_font().clone_font_weight() { - computed_value::T::Weight100 => computed_value::T::Weight400, - computed_value::T::Weight200 => computed_value::T::Weight400, - computed_value::T::Weight300 => computed_value::T::Weight400, - computed_value::T::Weight400 => computed_value::T::Weight700, - computed_value::T::Weight500 => computed_value::T::Weight700, - computed_value::T::Weight600 => computed_value::T::Weight900, - computed_value::T::Weight700 => computed_value::T::Weight900, - computed_value::T::Weight800 => computed_value::T::Weight900, - computed_value::T::Weight900 => computed_value::T::Weight900, - }, - SpecifiedValue::Lighter => match context.inherited_style().get_font().clone_font_weight() { - computed_value::T::Weight100 => computed_value::T::Weight100, - computed_value::T::Weight200 => computed_value::T::Weight100, - computed_value::T::Weight300 => computed_value::T::Weight100, - computed_value::T::Weight400 => computed_value::T::Weight100, - computed_value::T::Weight500 => computed_value::T::Weight100, - computed_value::T::Weight600 => computed_value::T::Weight400, - computed_value::T::Weight700 => computed_value::T::Weight400, - computed_value::T::Weight800 => computed_value::T::Weight700, - computed_value::T::Weight900 => computed_value::T::Weight700, - }, - } - } - } - </%self:longhand> - - <%self:longhand name="font-size"> - use app_units::Au; - use cssparser::ToCss; - use std::fmt; - use values::FONT_MEDIUM_PX; - use values::specified::{LengthOrPercentage, Length, Percentage}; - - impl ToCss for SpecifiedValue { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - self.0.to_css(dest) - } - } - - #[derive(Debug, Clone, PartialEq, HeapSizeOf)] - pub struct SpecifiedValue(pub specified::LengthOrPercentage); - pub mod computed_value { - use app_units::Au; - pub type T = Au; - } - #[inline] pub fn get_initial_value() -> computed_value::T { - Au::from_px(FONT_MEDIUM_PX) - } - - impl ToComputedValue for SpecifiedValue { - type ComputedValue = computed_value::T; - - #[inline] - fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { - match self.0 { - LengthOrPercentage::Length(Length::FontRelative(value)) => { - value.to_computed_value(context.inherited_style().get_font().clone_font_size(), - context.style().root_font_size()) - } - LengthOrPercentage::Length(Length::ServoCharacterWidth(value)) => { - value.to_computed_value(context.inherited_style().get_font().clone_font_size()) - } - LengthOrPercentage::Length(l) => { - l.to_computed_value(context) - } - LengthOrPercentage::Percentage(Percentage(value)) => { - context.inherited_style().get_font().clone_font_size().scale_by(value) - } - LengthOrPercentage::Calc(calc) => { - let calc = calc.to_computed_value(context); - calc.length() + context.inherited_style().get_font().clone_font_size() - .scale_by(calc.percentage()) - } - } - } - } - /// <length> | <percentage> | <absolute-size> | <relative-size> - pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { - use values::specified::{Length, LengthOrPercentage}; - - input.try(specified::LengthOrPercentage::parse_non_negative) - .or_else(|()| { - let ident = try!(input.expect_ident()); - specified::Length::from_str(&ident as &str) - .ok_or(()) - .map(specified::LengthOrPercentage::Length) - }) - .map(SpecifiedValue) - } - </%self:longhand> - - ${single_keyword("font-stretch", - "normal ultra-condensed extra-condensed condensed semi-condensed semi-expanded \ - expanded extra-expanded ultra-expanded")} - - ${single_keyword("font-kerning", "auto none normal", products="gecko")} - - // CSS 2.1, Section 16 - Text - - ${switch_to_style_struct("InheritedText")} - - <%self:longhand name="text-align"> - pub use self::computed_value::T as SpecifiedValue; - use values::computed::ComputedValueAsSpecified; - impl ComputedValueAsSpecified for SpecifiedValue {} - pub mod computed_value { - macro_rules! define_text_align { - ( $( $name: ident ( $string: expr ) => $discriminant: expr, )+ ) => { - define_css_keyword_enum! { T: - $( - $string => $name, - )+ - } - impl T { - pub fn to_u32(self) -> u32 { - match self { - $( - T::$name => $discriminant, - )+ - } - } - pub fn from_u32(discriminant: u32) -> Option<T> { - match discriminant { - $( - $discriminant => Some(T::$name), - )+ - _ => None - } - } - } - } - } - define_text_align! { - start("start") => 0, - end("end") => 1, - left("left") => 2, - right("right") => 3, - center("center") => 4, - justify("justify") => 5, - servo_center("-servo-center") => 6, - servo_left("-servo-left") => 7, - servo_right("-servo-right") => 8, - } - } - #[inline] pub fn get_initial_value() -> computed_value::T { - computed_value::T::start - } - pub fn parse(_context: &ParserContext, input: &mut Parser) - -> Result<SpecifiedValue, ()> { - computed_value::T::parse(input) - } - </%self:longhand> - - <%self:longhand name="letter-spacing"> - use cssparser::ToCss; - use std::fmt; - use values::AuExtensionMethods; - - #[derive(Debug, Clone, Copy, PartialEq, HeapSizeOf)] - pub enum SpecifiedValue { - Normal, - Specified(specified::Length), - } - - impl ToCss for SpecifiedValue { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match *self { - SpecifiedValue::Normal => dest.write_str("normal"), - SpecifiedValue::Specified(l) => l.to_css(dest), - } - } - } - - pub mod computed_value { - use app_units::Au; - #[derive(Debug, Clone, PartialEq, HeapSizeOf)] - pub struct T(pub Option<Au>); - } - - impl ToCss for computed_value::T { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match self.0 { - None => dest.write_str("normal"), - Some(l) => l.to_css(dest), - } - } - } - - #[inline] - pub fn get_initial_value() -> computed_value::T { - computed_value::T(None) - } - - impl ToComputedValue for SpecifiedValue { - type ComputedValue = computed_value::T; - - #[inline] - fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { - match *self { - SpecifiedValue::Normal => computed_value::T(None), - SpecifiedValue::Specified(l) => - computed_value::T(Some(l.to_computed_value(context))) - } - } - } - - pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { - if input.try(|input| input.expect_ident_matching("normal")).is_ok() { - Ok(SpecifiedValue::Normal) - } else { - specified::Length::parse_non_negative(input).map(SpecifiedValue::Specified) - } - } - </%self:longhand> - - <%self:longhand name="word-spacing"> - use cssparser::ToCss; - use std::fmt; - use values::AuExtensionMethods; - - #[derive(Debug, Clone, Copy, PartialEq, HeapSizeOf)] - pub enum SpecifiedValue { - Normal, - Specified(specified::Length), // FIXME(SimonSapin) support percentages - } - - impl ToCss for SpecifiedValue { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match *self { - SpecifiedValue::Normal => dest.write_str("normal"), - SpecifiedValue::Specified(l) => l.to_css(dest), - } - } - } - - pub mod computed_value { - use app_units::Au; - #[derive(Debug, Clone, PartialEq, HeapSizeOf)] - pub struct T(pub Option<Au>); - } - - impl ToCss for computed_value::T { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match self.0 { - None => dest.write_str("normal"), - Some(l) => l.to_css(dest), - } - } - } - - #[inline] - pub fn get_initial_value() -> computed_value::T { - computed_value::T(None) - } - - impl ToComputedValue for SpecifiedValue { - type ComputedValue = computed_value::T; - - #[inline] - fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { - match *self { - SpecifiedValue::Normal => computed_value::T(None), - SpecifiedValue::Specified(l) => - computed_value::T(Some(l.to_computed_value(context))) - } - } - } - - pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { - if input.try(|input| input.expect_ident_matching("normal")).is_ok() { - Ok(SpecifiedValue::Normal) - } else { - specified::Length::parse_non_negative(input).map(SpecifiedValue::Specified) - } - } - </%self:longhand> - - ${predefined_type("text-indent", "LengthOrPercentage", "computed::LengthOrPercentage::Length(Au(0))")} - - // Also known as "word-wrap" (which is more popular because of IE), but this is the preferred - // name per CSS-TEXT 6.2. - ${single_keyword("overflow-wrap", "normal break-word", gecko_ffi_name="mWordWrap", - gecko_constant_prefix="NS_STYLE_WORDWRAP")} - - // TODO(pcwalton): Support `word-break: keep-all` once we have better CJK support. - ${single_keyword("word-break", "normal break-all", extra_gecko_values="keep-all", - gecko_constant_prefix="NS_STYLE_WORDBREAK")} - - // TODO(pcwalton): Support `text-justify: distribute`. - ${single_keyword("text-justify", "auto none inter-word", products="servo")} - - ${new_style_struct("Text", is_inherited=False, gecko_name="nsStyleTextReset", - additional_methods=[Method("has_underline", "bool"), - Method("has_overline", "bool"), - Method("has_line_through", "bool")])} - - ${single_keyword("text-overflow", "clip ellipsis")} - - ${single_keyword("unicode-bidi", "normal embed isolate bidi-override isolate-override plaintext")} - - <%self:longhand name="text-decoration" custom_cascade="${CONFIG['product'] == 'servo'}"> - use cssparser::ToCss; - use std::fmt; - use values::computed::ComputedValueAsSpecified; - - impl ComputedValueAsSpecified for SpecifiedValue {} - - #[derive(PartialEq, Eq, Copy, Clone, Debug, HeapSizeOf)] - pub struct SpecifiedValue { - pub underline: bool, - pub overline: bool, - pub line_through: bool, - // 'blink' is accepted in the parser but ignored. - // Just not blinking the text is a conforming implementation per CSS 2.1. - } - - impl ToCss for SpecifiedValue { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - let mut space = false; - if self.underline { - try!(dest.write_str("underline")); - space = true; - } - if self.overline { - if space { - try!(dest.write_str(" ")); - } - try!(dest.write_str("overline")); - space = true; - } - if self.line_through { - if space { - try!(dest.write_str(" ")); - } - try!(dest.write_str("line-through")); - } - Ok(()) - } - } - pub mod computed_value { - pub type T = super::SpecifiedValue; - #[allow(non_upper_case_globals)] - pub const none: T = super::SpecifiedValue { - underline: false, overline: false, line_through: false - }; - } - #[inline] pub fn get_initial_value() -> computed_value::T { - computed_value::none - } - /// none | [ underline || overline || line-through || blink ] - pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { - let mut result = SpecifiedValue { - underline: false, overline: false, line_through: false, - }; - if input.try(|input| input.expect_ident_matching("none")).is_ok() { - return Ok(result) - } - let mut blink = false; - let mut empty = true; - while let Ok(ident) = input.expect_ident() { - match_ignore_ascii_case! { ident, - "underline" => if result.underline { return Err(()) } - else { empty = false; result.underline = true }, - "overline" => if result.overline { return Err(()) } - else { empty = false; result.overline = true }, - "line-through" => if result.line_through { return Err(()) } - else { empty = false; result.line_through = true }, - "blink" => if blink { return Err(()) } - else { empty = false; blink = true }, - _ => break - } - } - if !empty { Ok(result) } else { Err(()) } - } - - % if CONFIG["product"] == "servo": - fn cascade_property_custom<C: ComputedValues>( - _declaration: &PropertyDeclaration, - _inherited_style: &C, - context: &mut computed::Context<C>, - _seen: &mut PropertyBitField, - _cacheable: &mut bool, - _error_reporter: &mut StdBox<ParseErrorReporter + Send>) { - longhands::_servo_text_decorations_in_effect::derive_from_text_decoration(context); - } - % endif - </%self:longhand> - - ${single_keyword("text-decoration-style", "-moz-none solid double dotted dashed wavy", - products="gecko")} - - ${switch_to_style_struct("InheritedText")} - - <%self:longhand name="-servo-text-decorations-in-effect" - derived_from="display text-decoration" products="servo"> - use cssparser::{RGBA, ToCss}; - use std::fmt; - - use values::computed::ComputedValueAsSpecified; - use properties::style_struct_traits::{Box, Color, Text}; - - impl ComputedValueAsSpecified for SpecifiedValue {} - - #[derive(Clone, PartialEq, Copy, Debug, HeapSizeOf)] - pub struct SpecifiedValue { - pub underline: Option<RGBA>, - pub overline: Option<RGBA>, - pub line_through: Option<RGBA>, - } - - pub mod computed_value { - pub type T = super::SpecifiedValue; - } - - impl ToCss for SpecifiedValue { - fn to_css<W>(&self, _: &mut W) -> fmt::Result where W: fmt::Write { - // Web compat doesn't matter here. - Ok(()) - } - } - - #[inline] - pub fn get_initial_value() -> computed_value::T { - SpecifiedValue { - underline: None, - overline: None, - line_through: None, - } - } - - fn maybe<Cx: TContext>(flag: bool, context: &Cx) -> Option<RGBA> { - if flag { - Some(context.style().get_color().clone_color()) - } else { - None - } - } - - fn derive<Cx: TContext>(context: &Cx) -> computed_value::T { - // Start with no declarations if this is an atomic inline-level box; otherwise, start with the - // declarations in effect and add in the text decorations that this block specifies. - let mut result = match context.style().get_box().clone_display() { - super::display::computed_value::T::inline_block | - super::display::computed_value::T::inline_table => SpecifiedValue { - underline: None, - overline: None, - line_through: None, - }, - _ => context.inherited_style().get_inheritedtext().clone__servo_text_decorations_in_effect() - }; - - result.underline = maybe(context.style().get_text().has_underline() - || result.underline.is_some(), context); - result.overline = maybe(context.style().get_text().has_overline() - || result.overline.is_some(), context); - result.line_through = maybe(context.style().get_text().has_line_through() - || result.line_through.is_some(), context); - - result - } - - #[inline] - pub fn derive_from_text_decoration<Cx: TContext>(context: &mut Cx) { - let derived = derive(context); - context.mutate_style().mutate_inheritedtext().set__servo_text_decorations_in_effect(derived); - } - - #[inline] - pub fn derive_from_display<Cx: TContext>(context: &mut Cx) { - let derived = derive(context); - context.mutate_style().mutate_inheritedtext().set__servo_text_decorations_in_effect(derived); - } - </%self:longhand> - - <%self:single_keyword_computed name="white-space" values="normal pre nowrap pre-wrap pre-line", - gecko_constant_prefix="NS_STYLE_WHITESPACE"> - use values::computed::ComputedValueAsSpecified; - impl ComputedValueAsSpecified for SpecifiedValue {} - - impl SpecifiedValue { - pub fn allow_wrap(&self) -> bool { - match *self { - SpecifiedValue::nowrap | - SpecifiedValue::pre => false, - SpecifiedValue::normal | - SpecifiedValue::pre_wrap | - SpecifiedValue::pre_line => true, - } - } - - pub fn preserve_newlines(&self) -> bool { - match *self { - SpecifiedValue::normal | - SpecifiedValue::nowrap => false, - SpecifiedValue::pre | - SpecifiedValue::pre_wrap | - SpecifiedValue::pre_line => true, - } - } - - pub fn preserve_spaces(&self) -> bool { - match *self { - SpecifiedValue::normal | - SpecifiedValue::nowrap | - SpecifiedValue::pre_line => false, - SpecifiedValue::pre | - SpecifiedValue::pre_wrap => true, - } - } - } - </%self:single_keyword_computed> - - // TODO(pcwalton): `full-width` - ${single_keyword("text-transform", "none capitalize uppercase lowercase", - extra_gecko_values="full-width")} - - ${single_keyword("text-rendering", "auto optimizespeed optimizelegibility geometricprecision")} - - // CSS Text Module Level 3 - // https://www.w3.org/TR/css-text-3/ - ${single_keyword("hyphens", "none manual auto", products="gecko")} - - // CSS Ruby Layout Module Level 1 - // https://www.w3.org/TR/css-ruby-1/ - ${single_keyword("ruby-align", "start center space-between space-around", products="gecko")} - - ${single_keyword("ruby-position", "over under", products="gecko")} - - // CSS 2.1, Section 17 - Tables - ${new_style_struct("Table", is_inherited=False, gecko_name="nsStyleTable")} - - ${single_keyword("table-layout", "auto fixed", gecko_ffi_name="mLayoutStrategy")} - - ${new_style_struct("InheritedTable", is_inherited=True, gecko_name="nsStyleTableBorder")} - - ${single_keyword("border-collapse", "separate collapse", gecko_constant_prefix="NS_STYLE_BORDER")} - - ${single_keyword("empty-cells", "show hide", gecko_constant_prefix="NS_STYLE_TABLE_EMPTY_CELLS")} - - ${single_keyword("caption-side", "top bottom", extra_gecko_values="right left top-outside bottom-outside")} - - <%self:longhand name="border-spacing"> - use app_units::Au; - use values::AuExtensionMethods; - - use cssparser::ToCss; - use std::fmt; - - pub mod computed_value { - use app_units::Au; - - #[derive(Clone, Copy, Debug, PartialEq, RustcEncodable, HeapSizeOf)] - pub struct T { - pub horizontal: Au, - pub vertical: Au, - } - } - - #[derive(Clone, Debug, PartialEq, HeapSizeOf)] - pub struct SpecifiedValue { - pub horizontal: specified::Length, - pub vertical: specified::Length, - } - - #[inline] - pub fn get_initial_value() -> computed_value::T { - computed_value::T { - horizontal: Au(0), - vertical: Au(0), - } - } - - impl ToCss for SpecifiedValue { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - try!(self.horizontal.to_css(dest)); - try!(dest.write_str(" ")); - self.vertical.to_css(dest) - } - } - - impl ToCss for computed_value::T { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - try!(self.horizontal.to_css(dest)); - try!(dest.write_str(" ")); - self.vertical.to_css(dest) - } - } - - impl ToComputedValue for SpecifiedValue { - type ComputedValue = computed_value::T; - - #[inline] - fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { - computed_value::T { - horizontal: self.horizontal.to_computed_value(context), - vertical: self.vertical.to_computed_value(context), - } - } - } - - pub fn parse(_: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue,()> { - let mut lengths = [ None, None ]; - for i in 0..2 { - match specified::Length::parse_non_negative(input) { - Err(()) => break, - Ok(length) => lengths[i] = Some(length), - } - } - if input.next().is_ok() { - return Err(()) - } - match (lengths[0], lengths[1]) { - (None, None) => Err(()), - (Some(length), None) => { - Ok(SpecifiedValue { - horizontal: length, - vertical: length, - }) - } - (Some(horizontal), Some(vertical)) => { - Ok(SpecifiedValue { - horizontal: horizontal, - vertical: vertical, - }) - } - (None, Some(_)) => panic!("shouldn't happen"), - } - } - </%self:longhand> - - // CSS Fragmentation Module Level 3 - // https://www.w3.org/TR/css-break-3/ - ${switch_to_style_struct("Border")} - - ${single_keyword("box-decoration-break", "slice clone", products="gecko")} - - // CSS Writing Modes Level 3 - // http://dev.w3.org/csswg/css-writing-modes/ - ${switch_to_style_struct("InheritedBox")} - - ${single_keyword("writing-mode", "horizontal-tb vertical-rl vertical-lr", experimental=True)} - - // FIXME(SimonSapin): Add 'mixed' and 'upright' (needs vertical text support) - // FIXME(SimonSapin): initial (first) value should be 'mixed', when that's implemented - ${single_keyword("text-orientation", "sideways sideways-left sideways-right", experimental=True)} - - // CSS Color Module Level 4 - // https://drafts.csswg.org/css-color/ - ${single_keyword("color-adjust", "economy exact", products="gecko")} - - // CSS Basic User Interface Module Level 3 - // http://dev.w3.org/csswg/css-ui/ - ${switch_to_style_struct("Box")} - - ${single_keyword("resize", "none both horizontal vertical", products="gecko")} - - ${switch_to_style_struct("Position")} - - ${single_keyword("box-sizing", "content-box border-box")} - - ${new_style_struct("Pointing", is_inherited=True, gecko_name="nsStyleUserInterface")} - - <%self:longhand name="cursor"> - pub use self::computed_value::T as SpecifiedValue; - use values::computed::ComputedValueAsSpecified; - - impl ComputedValueAsSpecified for SpecifiedValue {} - - pub mod computed_value { - use cssparser::ToCss; - use std::fmt; - use style_traits::cursor::Cursor; - - #[derive(Clone, PartialEq, Eq, Copy, Debug, HeapSizeOf)] - pub enum T { - AutoCursor, - SpecifiedCursor(Cursor), - } - - impl ToCss for T { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match *self { - T::AutoCursor => dest.write_str("auto"), - T::SpecifiedCursor(c) => c.to_css(dest), - } - } - } - } - - #[inline] - pub fn get_initial_value() -> computed_value::T { - computed_value::T::AutoCursor - } - pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { - use std::ascii::AsciiExt; - use style_traits::cursor::Cursor; - let ident = try!(input.expect_ident()); - if ident.eq_ignore_ascii_case("auto") { - Ok(SpecifiedValue::AutoCursor) - } else { - Cursor::from_css_keyword(&ident) - .map(SpecifiedValue::SpecifiedCursor) - } - } - </%self:longhand> - - // NB: `pointer-events: auto` (and use of `pointer-events` in anything that isn't SVG, in fact) - // is nonstandard, slated for CSS4-UI. - // TODO(pcwalton): SVG-only values. - ${single_keyword("pointer-events", "auto none")} - - - ${new_style_struct("Column", is_inherited=False, gecko_name="nsStyleColumn")} - - <%self:longhand name="column-width" experimental="True"> - use cssparser::ToCss; - use std::fmt; - use values::AuExtensionMethods; - - #[derive(Debug, Clone, Copy, PartialEq, HeapSizeOf)] - pub enum SpecifiedValue { - Auto, - Specified(specified::Length), - } - - impl ToCss for SpecifiedValue { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match *self { - SpecifiedValue::Auto => dest.write_str("auto"), - SpecifiedValue::Specified(l) => l.to_css(dest), - } - } - } - - pub mod computed_value { - use app_units::Au; - #[derive(Debug, Clone, PartialEq, HeapSizeOf)] - pub struct T(pub Option<Au>); - } - - impl ToCss for computed_value::T { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match self.0 { - None => dest.write_str("auto"), - Some(l) => l.to_css(dest), - } - } - } - - #[inline] - pub fn get_initial_value() -> computed_value::T { - computed_value::T(None) - } - - impl ToComputedValue for SpecifiedValue { - type ComputedValue = computed_value::T; - - #[inline] - fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { - match *self { - SpecifiedValue::Auto => computed_value::T(None), - SpecifiedValue::Specified(l) => - computed_value::T(Some(l.to_computed_value(context))) - } - } - } - - pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { - if input.try(|input| input.expect_ident_matching("auto")).is_ok() { - Ok(SpecifiedValue::Auto) - } else { - specified::Length::parse_non_negative(input).map(SpecifiedValue::Specified) - } - } - </%self:longhand> - - <%self:longhand name="column-count" experimental="True"> - use cssparser::ToCss; - use std::fmt; - - #[derive(Debug, Clone, Copy, PartialEq, HeapSizeOf)] - pub enum SpecifiedValue { - Auto, - Specified(u32), - } - - impl ToCss for SpecifiedValue { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match *self { - SpecifiedValue::Auto => dest.write_str("auto"), - SpecifiedValue::Specified(count) => write!(dest, "{}", count), - } - } - } - - pub mod computed_value { - #[derive(Debug, Clone, PartialEq, HeapSizeOf)] - pub struct T(pub Option<u32>); - } - - impl ToCss for computed_value::T { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match self.0 { - None => dest.write_str("auto"), - Some(count) => write!(dest, "{}", count), - } - } - } - - #[inline] - pub fn get_initial_value() -> computed_value::T { - computed_value::T(None) - } - - impl ToComputedValue for SpecifiedValue { - type ComputedValue = computed_value::T; - - #[inline] - fn to_computed_value<Cx: TContext>(&self, _context: &Cx) -> computed_value::T { - match *self { - SpecifiedValue::Auto => computed_value::T(None), - SpecifiedValue::Specified(count) => - computed_value::T(Some(count)) - } - } - } - - pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { - if input.try(|input| input.expect_ident_matching("auto")).is_ok() { - Ok(SpecifiedValue::Auto) - } else { - let count = try!(specified::parse_integer(input)); - // Zero is invalid - if count <= 0 { - return Err(()) - } - Ok(SpecifiedValue::Specified(count as u32)) - } - } - </%self:longhand> - - <%self:longhand name="column-gap" experimental="True"> - use cssparser::ToCss; - use std::fmt; - use values::AuExtensionMethods; - - #[derive(Debug, Clone, Copy, PartialEq, HeapSizeOf)] - pub enum SpecifiedValue { - Normal, - Specified(specified::Length), - } - - impl ToCss for SpecifiedValue { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match *self { - SpecifiedValue::Normal => dest.write_str("normal"), - SpecifiedValue::Specified(l) => l.to_css(dest), - } - } - } - - pub mod computed_value { - use app_units::Au; - #[derive(Debug, Clone, PartialEq, HeapSizeOf)] - pub struct T(pub Option<Au>); - } - - impl ToCss for computed_value::T { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match self.0 { - None => dest.write_str("normal"), - Some(l) => l.to_css(dest), - } - } - } - - #[inline] - pub fn get_initial_value() -> computed_value::T { - computed_value::T(None) - } - - impl ToComputedValue for SpecifiedValue { - type ComputedValue = computed_value::T; - - #[inline] - fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { - match *self { - SpecifiedValue::Normal => computed_value::T(None), - SpecifiedValue::Specified(l) => - computed_value::T(Some(l.to_computed_value(context))) - } - } - } - - pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { - if input.try(|input| input.expect_ident_matching("normal")).is_ok() { - Ok(SpecifiedValue::Normal) - } else { - specified::Length::parse_non_negative(input).map(SpecifiedValue::Specified) - } - } - </%self:longhand> - - // Box-shadow, etc. - ${new_style_struct("Effects", is_inherited=False, gecko_name="nsStyleEffects")} - - <%self:longhand name="opacity"> - use cssparser::ToCss; - use std::fmt; - use values::CSSFloat; - - impl ToCss for SpecifiedValue { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - self.0.to_css(dest) - } - } - - #[derive(Debug, Clone, PartialEq, HeapSizeOf)] - pub struct SpecifiedValue(pub CSSFloat); - pub mod computed_value { - use values::CSSFloat; - pub type T = CSSFloat; - } - #[inline] - pub fn get_initial_value() -> computed_value::T { - 1.0 - } - - impl ToComputedValue for SpecifiedValue { - type ComputedValue = computed_value::T; - - #[inline] - fn to_computed_value<Cx: TContext>(&self, _context: &Cx) -> computed_value::T { - if self.0 < 0.0 { - 0.0 - } else if self.0 > 1.0 { - 1.0 - } else { - self.0 - } - } - } - fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { - specified::parse_number(input).map(SpecifiedValue) - } - </%self:longhand> - - <%self:longhand name="box-shadow"> - use cssparser::{self, ToCss}; - use std::fmt; - use values::AuExtensionMethods; - - #[derive(Debug, Clone, PartialEq, HeapSizeOf)] - pub struct SpecifiedValue(Vec<SpecifiedBoxShadow>); - - #[derive(Debug, Clone, PartialEq, HeapSizeOf)] - pub struct SpecifiedBoxShadow { - pub offset_x: specified::Length, - pub offset_y: specified::Length, - pub blur_radius: specified::Length, - pub spread_radius: specified::Length, - pub color: Option<specified::CSSColor>, - pub inset: bool, - } - - impl ToCss for SpecifiedValue { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - let mut iter = self.0.iter(); - if let Some(shadow) = iter.next() { - try!(shadow.to_css(dest)); - } else { - try!(dest.write_str("none")); - return Ok(()) - } - for shadow in iter { - try!(dest.write_str(", ")); - try!(shadow.to_css(dest)); - } - Ok(()) - } - } - - impl ToCss for SpecifiedBoxShadow { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - if self.inset { - try!(dest.write_str("inset ")); - } - try!(self.blur_radius.to_css(dest)); - try!(dest.write_str(" ")); - try!(self.spread_radius.to_css(dest)); - try!(dest.write_str(" ")); - try!(self.offset_x.to_css(dest)); - try!(dest.write_str(" ")); - try!(self.offset_y.to_css(dest)); - - if let Some(ref color) = self.color { - try!(dest.write_str(" ")); - try!(color.to_css(dest)); - } - Ok(()) - } - } - - pub mod computed_value { - use app_units::Au; - use std::fmt; - use values::computed; - - #[derive(Clone, PartialEq, HeapSizeOf, Debug)] - pub struct T(pub Vec<BoxShadow>); - - #[derive(Clone, PartialEq, Copy, HeapSizeOf, Debug)] - pub struct BoxShadow { - pub offset_x: Au, - pub offset_y: Au, - pub blur_radius: Au, - pub spread_radius: Au, - pub color: computed::CSSColor, - pub inset: bool, - } - } - - impl ToCss for computed_value::T { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - let mut iter = self.0.iter(); - if let Some(shadow) = iter.next() { - try!(shadow.to_css(dest)); - } else { - try!(dest.write_str("none")); - return Ok(()) - } - for shadow in iter { - try!(dest.write_str(", ")); - try!(shadow.to_css(dest)); - } - Ok(()) - } - } - - impl ToCss for computed_value::BoxShadow { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - if self.inset { - try!(dest.write_str("inset ")); - } - try!(self.blur_radius.to_css(dest)); - try!(dest.write_str(" ")); - try!(self.spread_radius.to_css(dest)); - try!(dest.write_str(" ")); - try!(self.offset_x.to_css(dest)); - try!(dest.write_str(" ")); - try!(self.offset_y.to_css(dest)); - try!(dest.write_str(" ")); - try!(self.color.to_css(dest)); - Ok(()) - } - } - - #[inline] - pub fn get_initial_value() -> computed_value::T { - computed_value::T(Vec::new()) - } - - pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { - if input.try(|input| input.expect_ident_matching("none")).is_ok() { - Ok(SpecifiedValue(Vec::new())) - } else { - input.parse_comma_separated(parse_one_box_shadow).map(SpecifiedValue) - } - } - - impl ToComputedValue for SpecifiedValue { - type ComputedValue = computed_value::T; - - #[inline] - fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { - computed_value::T(self.0.iter().map(|value| compute_one_box_shadow(value, context)).collect()) - } - } - - pub fn compute_one_box_shadow<Cx: TContext>(value: &SpecifiedBoxShadow, context: &Cx) - -> computed_value::BoxShadow { - computed_value::BoxShadow { - offset_x: value.offset_x.to_computed_value(context), - offset_y: value.offset_y.to_computed_value(context), - blur_radius: value.blur_radius.to_computed_value(context), - spread_radius: value.spread_radius.to_computed_value(context), - color: value.color - .as_ref() - .map(|color| color.parsed) - .unwrap_or(cssparser::Color::CurrentColor), - inset: value.inset, - } - } - - pub fn parse_one_box_shadow(input: &mut Parser) -> Result<SpecifiedBoxShadow, ()> { - use app_units::Au; - let mut lengths = [specified::Length::Absolute(Au(0)); 4]; - let mut lengths_parsed = false; - let mut color = None; - let mut inset = false; - - loop { - if !inset { - if input.try(|input| input.expect_ident_matching("inset")).is_ok() { - inset = true; - continue - } - } - if !lengths_parsed { - if let Ok(value) = input.try(specified::Length::parse) { - lengths[0] = value; - let mut length_parsed_count = 1; - while length_parsed_count < 4 { - if let Ok(value) = input.try(specified::Length::parse) { - lengths[length_parsed_count] = value - } else { - break - } - length_parsed_count += 1; - } - - // The first two lengths must be specified. - if length_parsed_count < 2 { - return Err(()) - } - - lengths_parsed = true; - continue - } - } - if color.is_none() { - if let Ok(value) = input.try(specified::CSSColor::parse) { - color = Some(value); - continue - } - } - break - } - - // Lengths must be specified. - if !lengths_parsed { - return Err(()) - } - - Ok(SpecifiedBoxShadow { - offset_x: lengths[0], - offset_y: lengths[1], - blur_radius: lengths[2], - spread_radius: lengths[3], - color: color, - inset: inset, - }) - } - </%self:longhand> - - <%self:longhand name="clip"> - use cssparser::ToCss; - use std::fmt; - use values::AuExtensionMethods; - - // NB: `top` and `left` are 0 if `auto` per CSS 2.1 11.1.2. - - pub mod computed_value { - use app_units::Au; - - #[derive(Clone, PartialEq, Eq, Copy, Debug, HeapSizeOf)] - pub struct ClipRect { - pub top: Au, - pub right: Option<Au>, - pub bottom: Option<Au>, - pub left: Au, - } - - #[derive(Debug, Clone, PartialEq, HeapSizeOf)] - pub struct T(pub Option<ClipRect>); - } - - impl ToCss for computed_value::T { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match self.0 { - None => dest.write_str("auto"), - Some(rect) => { - try!(dest.write_str("rect(")); - try!(rect.top.to_css(dest)); - try!(dest.write_str(", ")); - if let Some(right) = rect.right { - try!(right.to_css(dest)); - try!(dest.write_str(", ")); - } else { - try!(dest.write_str("auto, ")); - } - - if let Some(bottom) = rect.bottom { - try!(bottom.to_css(dest)); - try!(dest.write_str(", ")); - } else { - try!(dest.write_str("auto, ")); - } - - try!(rect.left.to_css(dest)); - try!(dest.write_str(")")); - Ok(()) - } - } - } - } - - #[derive(Clone, Debug, PartialEq, Copy, HeapSizeOf)] - pub struct SpecifiedClipRect { - pub top: specified::Length, - pub right: Option<specified::Length>, - pub bottom: Option<specified::Length>, - pub left: specified::Length, - } - - #[derive(Clone, Debug, PartialEq, Copy, HeapSizeOf)] - pub struct SpecifiedValue(Option<SpecifiedClipRect>); - - impl ToCss for SpecifiedClipRect { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - try!(dest.write_str("rect(")); - - try!(self.top.to_css(dest)); - try!(dest.write_str(", ")); - - if let Some(right) = self.right { - try!(right.to_css(dest)); - try!(dest.write_str(", ")); - } else { - try!(dest.write_str("auto, ")); - } - - if let Some(bottom) = self.bottom { - try!(bottom.to_css(dest)); - try!(dest.write_str(", ")); - } else { - try!(dest.write_str("auto, ")); - } - - try!(self.left.to_css(dest)); - - try!(dest.write_str(")")); - Ok(()) - } - } - - impl ToCss for SpecifiedValue { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - if let Some(ref rect) = self.0 { - rect.to_css(dest) - } else { - dest.write_str("auto") - } - } - } - - #[inline] - pub fn get_initial_value() -> computed_value::T { - computed_value::T(None) - } - - impl ToComputedValue for SpecifiedValue { - type ComputedValue = computed_value::T; - - #[inline] - fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { - computed_value::T(self.0.map(|value| computed_value::ClipRect { - top: value.top.to_computed_value(context), - right: value.right.map(|right| right.to_computed_value(context)), - bottom: value.bottom.map(|bottom| bottom.to_computed_value(context)), - left: value.left.to_computed_value(context), - })) - } - } - - pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { - use app_units::Au; - use std::ascii::AsciiExt; - use values::specified::Length; - - if input.try(|input| input.expect_ident_matching("auto")).is_ok() { - return Ok(SpecifiedValue(None)) - } - if !try!(input.expect_function()).eq_ignore_ascii_case("rect") { - return Err(()) - } - let sides = try!(input.parse_nested_block(|input| { - input.parse_comma_separated(|input| { - if input.try(|input| input.expect_ident_matching("auto")).is_ok() { - Ok(None) - } else { - Length::parse(input).map(Some) - } - }) - })); - if sides.len() == 4 { - Ok(SpecifiedValue(Some(SpecifiedClipRect { - top: sides[0].unwrap_or(Length::Absolute(Au(0))), - right: sides[1], - bottom: sides[2], - left: sides[3].unwrap_or(Length::Absolute(Au(0))), - }))) - } else { - Err(()) - } - } - </%self:longhand> - - ${switch_to_style_struct("InheritedText")} - - <%self:longhand name="text-shadow"> - use cssparser::{self, ToCss}; - use std::fmt; - use values::AuExtensionMethods; - - #[derive(Clone, PartialEq, Debug, HeapSizeOf)] - pub struct SpecifiedValue(Vec<SpecifiedTextShadow>); - - #[derive(Clone, PartialEq, Debug, HeapSizeOf)] - pub struct SpecifiedTextShadow { - pub offset_x: specified::Length, - pub offset_y: specified::Length, - pub blur_radius: specified::Length, - pub color: Option<specified::CSSColor>, - } - - pub mod computed_value { - use app_units::Au; - use cssparser::Color; - - #[derive(Clone, PartialEq, Debug, HeapSizeOf)] - pub struct T(pub Vec<TextShadow>); - - #[derive(Clone, PartialEq, Debug, HeapSizeOf)] - pub struct TextShadow { - pub offset_x: Au, - pub offset_y: Au, - pub blur_radius: Au, - pub color: Color, - } - } - - impl ToCss for computed_value::T { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - let mut iter = self.0.iter(); - if let Some(shadow) = iter.next() { - try!(shadow.to_css(dest)); - } else { - try!(dest.write_str("none")); - return Ok(()) - } - for shadow in iter { - try!(dest.write_str(", ")); - try!(shadow.to_css(dest)); - } - Ok(()) - } - } - - impl ToCss for computed_value::TextShadow { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - try!(self.offset_x.to_css(dest)); - try!(dest.write_str(" ")); - try!(self.offset_y.to_css(dest)); - try!(dest.write_str(" ")); - try!(self.blur_radius.to_css(dest)); - try!(dest.write_str(" ")); - try!(self.color.to_css(dest)); - Ok(()) - } - } - - impl ToCss for SpecifiedValue { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - let mut iter = self.0.iter(); - if let Some(shadow) = iter.next() { - try!(shadow.to_css(dest)); - } else { - try!(dest.write_str("none")); - return Ok(()) - } - for shadow in iter { - try!(dest.write_str(", ")); - try!(shadow.to_css(dest)); - } - Ok(()) - } - } - - impl ToCss for SpecifiedTextShadow { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - try!(self.offset_x.to_css(dest)); - try!(dest.write_str(" ")); - try!(self.offset_y.to_css(dest)); - try!(dest.write_str(" ")); - try!(self.blur_radius.to_css(dest)); - - if let Some(ref color) = self.color { - try!(dest.write_str(" ")); - try!(color.to_css(dest)); - } - Ok(()) - } - } - - #[inline] - pub fn get_initial_value() -> computed_value::T { - computed_value::T(Vec::new()) - } - - pub fn parse(_: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue,()> { - if input.try(|input| input.expect_ident_matching("none")).is_ok() { - Ok(SpecifiedValue(Vec::new())) - } else { - input.parse_comma_separated(parse_one_text_shadow).map(SpecifiedValue) - } - } - - fn parse_one_text_shadow(input: &mut Parser) -> Result<SpecifiedTextShadow,()> { - use app_units::Au; - let mut lengths = [specified::Length::Absolute(Au(0)); 3]; - let mut lengths_parsed = false; - let mut color = None; - - loop { - if !lengths_parsed { - if let Ok(value) = input.try(specified::Length::parse) { - lengths[0] = value; - let mut length_parsed_count = 1; - while length_parsed_count < 3 { - if let Ok(value) = input.try(specified::Length::parse) { - lengths[length_parsed_count] = value - } else { - break - } - length_parsed_count += 1; - } - - // The first two lengths must be specified. - if length_parsed_count < 2 { - return Err(()) - } - - lengths_parsed = true; - continue - } - } - if color.is_none() { - if let Ok(value) = input.try(specified::CSSColor::parse) { - color = Some(value); - continue - } - } - break - } - - // Lengths must be specified. - if !lengths_parsed { - return Err(()) - } - - Ok(SpecifiedTextShadow { - offset_x: lengths[0], - offset_y: lengths[1], - blur_radius: lengths[2], - color: color, - }) - } - - impl ToComputedValue for SpecifiedValue { - type ComputedValue = computed_value::T; - - fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { - computed_value::T(self.0.iter().map(|value| { - computed_value::TextShadow { - offset_x: value.offset_x.to_computed_value(context), - offset_y: value.offset_y.to_computed_value(context), - blur_radius: value.blur_radius.to_computed_value(context), - color: value.color - .as_ref() - .map(|color| color.parsed) - .unwrap_or(cssparser::Color::CurrentColor), - } - }).collect()) - } - } - </%self:longhand> - - ${switch_to_style_struct("Effects")} - - <%self:longhand name="filter"> - //pub use self::computed_value::T as SpecifiedValue; - use cssparser::ToCss; - use std::fmt; - use values::AuExtensionMethods; - use values::CSSFloat; - use values::specified::{Angle, Length}; - - #[derive(Debug, Clone, PartialEq, HeapSizeOf)] - pub struct SpecifiedValue(Vec<SpecifiedFilter>); - - // TODO(pcwalton): `drop-shadow` - #[derive(Clone, PartialEq, Debug, HeapSizeOf)] - pub enum SpecifiedFilter { - Blur(Length), - Brightness(CSSFloat), - Contrast(CSSFloat), - Grayscale(CSSFloat), - HueRotate(Angle), - Invert(CSSFloat), - Opacity(CSSFloat), - Saturate(CSSFloat), - Sepia(CSSFloat), - } - - pub mod computed_value { - use app_units::Au; - use values::CSSFloat; - use values::specified::{Angle}; - - #[derive(Clone, PartialEq, Debug, HeapSizeOf, Deserialize, Serialize)] - pub enum Filter { - Blur(Au), - Brightness(CSSFloat), - Contrast(CSSFloat), - Grayscale(CSSFloat), - HueRotate(Angle), - Invert(CSSFloat), - Opacity(CSSFloat), - Saturate(CSSFloat), - Sepia(CSSFloat), - } - - #[derive(Clone, PartialEq, Debug, HeapSizeOf, Deserialize, Serialize)] - pub struct T { pub filters: Vec<Filter> } - - impl T { - /// Creates a new filter pipeline. - #[inline] - pub fn new(filters: Vec<Filter>) -> T { - T - { - filters: filters, - } - } - - /// Adds a new filter to the filter pipeline. - #[inline] - pub fn push(&mut self, filter: Filter) { - self.filters.push(filter) - } - - /// Returns true if this filter pipeline is empty and false otherwise. - #[inline] - pub fn is_empty(&self) -> bool { - self.filters.is_empty() - } - - /// Returns the resulting opacity of this filter pipeline. - #[inline] - pub fn opacity(&self) -> CSSFloat { - let mut opacity = 1.0; - - for filter in &self.filters { - if let Filter::Opacity(ref opacity_value) = *filter { - opacity *= *opacity_value - } - } - opacity - } - } - } - - impl ToCss for computed_value::T { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - let mut iter = self.filters.iter(); - if let Some(filter) = iter.next() { - try!(filter.to_css(dest)); - } else { - try!(dest.write_str("none")); - return Ok(()) - } - for filter in iter { - try!(dest.write_str(" ")); - try!(filter.to_css(dest)); - } - Ok(()) - } - } - - impl ToCss for SpecifiedValue { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - let mut iter = self.0.iter(); - if let Some(filter) = iter.next() { - try!(filter.to_css(dest)); - } else { - try!(dest.write_str("none")); - return Ok(()) - } - for filter in iter { - try!(dest.write_str(" ")); - try!(filter.to_css(dest)); - } - Ok(()) - } - } - - impl ToCss for computed_value::Filter { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match *self { - computed_value::Filter::Blur(value) => { - try!(dest.write_str("blur(")); - try!(value.to_css(dest)); - try!(dest.write_str(")")); - } - computed_value::Filter::Brightness(value) => try!(write!(dest, "brightness({})", value)), - computed_value::Filter::Contrast(value) => try!(write!(dest, "contrast({})", value)), - computed_value::Filter::Grayscale(value) => try!(write!(dest, "grayscale({})", value)), - computed_value::Filter::HueRotate(value) => { - try!(dest.write_str("hue-rotate(")); - try!(value.to_css(dest)); - try!(dest.write_str(")")); - } - computed_value::Filter::Invert(value) => try!(write!(dest, "invert({})", value)), - computed_value::Filter::Opacity(value) => try!(write!(dest, "opacity({})", value)), - computed_value::Filter::Saturate(value) => try!(write!(dest, "saturate({})", value)), - computed_value::Filter::Sepia(value) => try!(write!(dest, "sepia({})", value)), - } - Ok(()) - } - } - - impl ToCss for SpecifiedFilter { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match *self { - SpecifiedFilter::Blur(value) => { - try!(dest.write_str("blur(")); - try!(value.to_css(dest)); - try!(dest.write_str(")")); - } - SpecifiedFilter::Brightness(value) => try!(write!(dest, "brightness({})", value)), - SpecifiedFilter::Contrast(value) => try!(write!(dest, "contrast({})", value)), - SpecifiedFilter::Grayscale(value) => try!(write!(dest, "grayscale({})", value)), - SpecifiedFilter::HueRotate(value) => { - try!(dest.write_str("hue-rotate(")); - try!(value.to_css(dest)); - try!(dest.write_str(")")); - } - SpecifiedFilter::Invert(value) => try!(write!(dest, "invert({})", value)), - SpecifiedFilter::Opacity(value) => try!(write!(dest, "opacity({})", value)), - SpecifiedFilter::Saturate(value) => try!(write!(dest, "saturate({})", value)), - SpecifiedFilter::Sepia(value) => try!(write!(dest, "sepia({})", value)), - } - Ok(()) - } - } - - #[inline] - pub fn get_initial_value() -> computed_value::T { - computed_value::T::new(Vec::new()) - } - - pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { - let mut filters = Vec::new(); - if input.try(|input| input.expect_ident_matching("none")).is_ok() { - return Ok(SpecifiedValue(filters)) - } - loop { - if let Ok(function_name) = input.try(|input| input.expect_function()) { - filters.push(try!(input.parse_nested_block(|input| { - match_ignore_ascii_case! { function_name, - "blur" => specified::Length::parse_non_negative(input).map(SpecifiedFilter::Blur), - "brightness" => parse_factor(input).map(SpecifiedFilter::Brightness), - "contrast" => parse_factor(input).map(SpecifiedFilter::Contrast), - "grayscale" => parse_factor(input).map(SpecifiedFilter::Grayscale), - "hue-rotate" => Angle::parse(input).map(SpecifiedFilter::HueRotate), - "invert" => parse_factor(input).map(SpecifiedFilter::Invert), - "opacity" => parse_factor(input).map(SpecifiedFilter::Opacity), - "saturate" => parse_factor(input).map(SpecifiedFilter::Saturate), - "sepia" => parse_factor(input).map(SpecifiedFilter::Sepia), - _ => Err(()) - } - }))); - } else if filters.is_empty() { - return Err(()) - } else { - return Ok(SpecifiedValue(filters)) - } - } - } - - fn parse_factor(input: &mut Parser) -> Result<::values::CSSFloat, ()> { - use cssparser::Token; - match input.next() { - Ok(Token::Number(value)) => Ok(value.value), - Ok(Token::Percentage(value)) => Ok(value.unit_value), - _ => Err(()) - } - } - - impl ToComputedValue for SpecifiedValue { - type ComputedValue = computed_value::T; - - fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { - computed_value::T{ filters: self.0.iter().map(|value| { - match *value { - SpecifiedFilter::Blur(factor) => - computed_value::Filter::Blur(factor.to_computed_value(context)), - SpecifiedFilter::Brightness(factor) => computed_value::Filter::Brightness(factor), - SpecifiedFilter::Contrast(factor) => computed_value::Filter::Contrast(factor), - SpecifiedFilter::Grayscale(factor) => computed_value::Filter::Grayscale(factor), - SpecifiedFilter::HueRotate(factor) => computed_value::Filter::HueRotate(factor), - SpecifiedFilter::Invert(factor) => computed_value::Filter::Invert(factor), - SpecifiedFilter::Opacity(factor) => computed_value::Filter::Opacity(factor), - SpecifiedFilter::Saturate(factor) => computed_value::Filter::Saturate(factor), - SpecifiedFilter::Sepia(factor) => computed_value::Filter::Sepia(factor), - } - }).collect() } - } - } - </%self:longhand> - - <%self:longhand name="transform"> - use app_units::Au; - use values::CSSFloat; - - use cssparser::ToCss; - use std::fmt; - - pub mod computed_value { - use values::CSSFloat; - use values::computed; - - #[derive(Clone, Copy, Debug, PartialEq, HeapSizeOf)] - pub struct ComputedMatrix { - pub m11: CSSFloat, pub m12: CSSFloat, pub m13: CSSFloat, pub m14: CSSFloat, - pub m21: CSSFloat, pub m22: CSSFloat, pub m23: CSSFloat, pub m24: CSSFloat, - pub m31: CSSFloat, pub m32: CSSFloat, pub m33: CSSFloat, pub m34: CSSFloat, - pub m41: CSSFloat, pub m42: CSSFloat, pub m43: CSSFloat, pub m44: CSSFloat, - } - - impl ComputedMatrix { - pub fn identity() -> ComputedMatrix { - ComputedMatrix { - m11: 1.0, m12: 0.0, m13: 0.0, m14: 0.0, - m21: 0.0, m22: 1.0, m23: 0.0, m24: 0.0, - m31: 0.0, m32: 0.0, m33: 1.0, m34: 0.0, - m41: 0.0, m42: 0.0, m43: 0.0, m44: 1.0 - } - } - } - - #[derive(Clone, Debug, PartialEq, HeapSizeOf)] - pub enum ComputedOperation { - Matrix(ComputedMatrix), - Skew(computed::Angle, computed::Angle), - Translate(computed::LengthOrPercentage, - computed::LengthOrPercentage, - computed::Length), - Scale(CSSFloat, CSSFloat, CSSFloat), - Rotate(CSSFloat, CSSFloat, CSSFloat, computed::Angle), - Perspective(computed::Length), - } - - #[derive(Clone, Debug, PartialEq, HeapSizeOf)] - pub struct T(pub Option<Vec<ComputedOperation>>); - } - - pub use self::computed_value::ComputedMatrix as SpecifiedMatrix; - - fn parse_two_lengths_or_percentages(input: &mut Parser) - -> Result<(specified::LengthOrPercentage, - specified::LengthOrPercentage),()> { - let first = try!(specified::LengthOrPercentage::parse(input)); - let second = input.try(|input| { - try!(input.expect_comma()); - specified::LengthOrPercentage::parse(input) - }).unwrap_or(specified::LengthOrPercentage::zero()); - Ok((first, second)) - } - - fn parse_two_floats(input: &mut Parser) -> Result<(CSSFloat,CSSFloat),()> { - let first = try!(specified::parse_number(input)); - let second = input.try(|input| { - try!(input.expect_comma()); - specified::parse_number(input) - }).unwrap_or(first); - Ok((first, second)) - } - - fn parse_two_angles(input: &mut Parser) -> Result<(specified::Angle, specified::Angle),()> { - let first = try!(specified::Angle::parse(input)); - let second = input.try(|input| { - try!(input.expect_comma()); - specified::Angle::parse(input) - }).unwrap_or(specified::Angle(0.0)); - Ok((first, second)) - } - - #[derive(Copy, Clone, Debug, PartialEq, HeapSizeOf)] - enum TranslateKind { - Translate, - TranslateX, - TranslateY, - TranslateZ, - Translate3D, - } - - #[derive(Clone, Debug, PartialEq, HeapSizeOf)] - enum SpecifiedOperation { - Matrix(SpecifiedMatrix), - Skew(specified::Angle, specified::Angle), - Translate(TranslateKind, - specified::LengthOrPercentage, - specified::LengthOrPercentage, - specified::Length), - Scale(CSSFloat, CSSFloat, CSSFloat), - Rotate(CSSFloat, CSSFloat, CSSFloat, specified::Angle), - Perspective(specified::Length), - } - - impl ToCss for computed_value::T { - fn to_css<W>(&self, _: &mut W) -> fmt::Result where W: fmt::Write { - // TODO(pcwalton) - Ok(()) - } - } - - impl ToCss for SpecifiedOperation { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match *self { - // todo(gw): implement serialization for transform - // types other than translate. - SpecifiedOperation::Matrix(_m) => { - Ok(()) - } - SpecifiedOperation::Skew(_sx, _sy) => { - Ok(()) - } - SpecifiedOperation::Translate(kind, tx, ty, tz) => { - match kind { - TranslateKind::Translate => { - try!(dest.write_str("translate(")); - try!(tx.to_css(dest)); - try!(dest.write_str(", ")); - try!(ty.to_css(dest)); - dest.write_str(")") - } - TranslateKind::TranslateX => { - try!(dest.write_str("translateX(")); - try!(tx.to_css(dest)); - dest.write_str(")") - } - TranslateKind::TranslateY => { - try!(dest.write_str("translateY(")); - try!(ty.to_css(dest)); - dest.write_str(")") - } - TranslateKind::TranslateZ => { - try!(dest.write_str("translateZ(")); - try!(tz.to_css(dest)); - dest.write_str(")") - } - TranslateKind::Translate3D => { - try!(dest.write_str("translate3d(")); - try!(tx.to_css(dest)); - try!(dest.write_str(", ")); - try!(ty.to_css(dest)); - try!(dest.write_str(", ")); - try!(tz.to_css(dest)); - dest.write_str(")") - } - } - } - SpecifiedOperation::Scale(_sx, _sy, _sz) => { - Ok(()) - } - SpecifiedOperation::Rotate(_ax, _ay, _az, _angle) => { - Ok(()) - } - SpecifiedOperation::Perspective(_p) => { - Ok(()) - } - } - } - } - - #[derive(Clone, Debug, PartialEq, HeapSizeOf)] - pub struct SpecifiedValue(Vec<SpecifiedOperation>); - - impl ToCss for SpecifiedValue { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - let mut first = true; - for operation in &self.0 { - if !first { - try!(dest.write_str(" ")); - } - first = false; - try!(operation.to_css(dest)) - } - Ok(()) - } - } - - #[inline] - pub fn get_initial_value() -> computed_value::T { - computed_value::T(None) - } - - pub fn parse(_: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue,()> { - if input.try(|input| input.expect_ident_matching("none")).is_ok() { - return Ok(SpecifiedValue(Vec::new())) - } - - let mut result = Vec::new(); - loop { - let name = match input.expect_function() { - Ok(name) => name, - Err(_) => break, - }; - match_ignore_ascii_case! { - name, - "matrix" => { - try!(input.parse_nested_block(|input| { - let values = try!(input.parse_comma_separated(|input| { - specified::parse_number(input) - })); - if values.len() != 6 { - return Err(()) - } - result.push(SpecifiedOperation::Matrix( - SpecifiedMatrix { - m11: values[0], m12: values[1], m13: 0.0, m14: 0.0, - m21: values[2], m22: values[3], m23: 0.0, m24: 0.0, - m31: 0.0, m32: 0.0, m33: 1.0, m34: 0.0, - m41: values[4], m42: values[5], m43: 0.0, m44: 1.0 - })); - Ok(()) - })) - }, - "matrix3d" => { - try!(input.parse_nested_block(|input| { - let values = try!(input.parse_comma_separated(|input| { - specified::parse_number(input) - })); - if values.len() != 16 { - return Err(()) - } - result.push(SpecifiedOperation::Matrix( - SpecifiedMatrix { - m11: values[ 0], m12: values[ 1], m13: values[ 2], m14: values[ 3], - m21: values[ 4], m22: values[ 5], m23: values[ 6], m24: values[ 7], - m31: values[ 8], m32: values[ 9], m33: values[10], m34: values[11], - m41: values[12], m42: values[13], m43: values[14], m44: values[15] - })); - Ok(()) - })) - }, - "translate" => { - try!(input.parse_nested_block(|input| { - let (tx, ty) = try!(parse_two_lengths_or_percentages(input)); - result.push(SpecifiedOperation::Translate(TranslateKind::Translate, - tx, - ty, - specified::Length::Absolute(Au(0)))); - Ok(()) - })) - }, - "translatex" => { - try!(input.parse_nested_block(|input| { - let tx = try!(specified::LengthOrPercentage::parse(input)); - result.push(SpecifiedOperation::Translate( - TranslateKind::TranslateX, - tx, - specified::LengthOrPercentage::zero(), - specified::Length::Absolute(Au(0)))); - Ok(()) - })) - }, - "translatey" => { - try!(input.parse_nested_block(|input| { - let ty = try!(specified::LengthOrPercentage::parse(input)); - result.push(SpecifiedOperation::Translate( - TranslateKind::TranslateY, - specified::LengthOrPercentage::zero(), - ty, - specified::Length::Absolute(Au(0)))); - Ok(()) - })) - }, - "translatez" => { - try!(input.parse_nested_block(|input| { - let tz = try!(specified::Length::parse(input)); - result.push(SpecifiedOperation::Translate( - TranslateKind::TranslateZ, - specified::LengthOrPercentage::zero(), - specified::LengthOrPercentage::zero(), - tz)); - Ok(()) - })) - }, - "translate3d" => { - try!(input.parse_nested_block(|input| { - let tx = try!(specified::LengthOrPercentage::parse(input)); - try!(input.expect_comma()); - let ty = try!(specified::LengthOrPercentage::parse(input)); - try!(input.expect_comma()); - let tz = try!(specified::Length::parse(input)); - result.push(SpecifiedOperation::Translate( - TranslateKind::Translate3D, - tx, - ty, - tz)); - Ok(()) - })) - - }, - "scale" => { - try!(input.parse_nested_block(|input| { - let (sx, sy) = try!(parse_two_floats(input)); - result.push(SpecifiedOperation::Scale(sx, sy, 1.0)); - Ok(()) - })) - }, - "scalex" => { - try!(input.parse_nested_block(|input| { - let sx = try!(specified::parse_number(input)); - result.push(SpecifiedOperation::Scale(sx, 1.0, 1.0)); - Ok(()) - })) - }, - "scaley" => { - try!(input.parse_nested_block(|input| { - let sy = try!(specified::parse_number(input)); - result.push(SpecifiedOperation::Scale(1.0, sy, 1.0)); - Ok(()) - })) - }, - "scalez" => { - try!(input.parse_nested_block(|input| { - let sz = try!(specified::parse_number(input)); - result.push(SpecifiedOperation::Scale(1.0, 1.0, sz)); - Ok(()) - })) - }, - "scale3d" => { - try!(input.parse_nested_block(|input| { - let sx = try!(specified::parse_number(input)); - try!(input.expect_comma()); - let sy = try!(specified::parse_number(input)); - try!(input.expect_comma()); - let sz = try!(specified::parse_number(input)); - result.push(SpecifiedOperation::Scale(sx, sy, sz)); - Ok(()) - })) - }, - "rotate" => { - try!(input.parse_nested_block(|input| { - let theta = try!(specified::Angle::parse(input)); - result.push(SpecifiedOperation::Rotate(0.0, 0.0, 1.0, theta)); - Ok(()) - })) - }, - "rotatex" => { - try!(input.parse_nested_block(|input| { - let theta = try!(specified::Angle::parse(input)); - result.push(SpecifiedOperation::Rotate(1.0, 0.0, 0.0, theta)); - Ok(()) - })) - }, - "rotatey" => { - try!(input.parse_nested_block(|input| { - let theta = try!(specified::Angle::parse(input)); - result.push(SpecifiedOperation::Rotate(0.0, 1.0, 0.0, theta)); - Ok(()) - })) - }, - "rotatez" => { - try!(input.parse_nested_block(|input| { - let theta = try!(specified::Angle::parse(input)); - result.push(SpecifiedOperation::Rotate(0.0, 0.0, 1.0, theta)); - Ok(()) - })) - }, - "rotate3d" => { - try!(input.parse_nested_block(|input| { - let ax = try!(specified::parse_number(input)); - try!(input.expect_comma()); - let ay = try!(specified::parse_number(input)); - try!(input.expect_comma()); - let az = try!(specified::parse_number(input)); - try!(input.expect_comma()); - let theta = try!(specified::Angle::parse(input)); - // TODO(gw): Check the axis can be normalized!! - result.push(SpecifiedOperation::Rotate(ax, ay, az, theta)); - Ok(()) - })) - }, - "skew" => { - try!(input.parse_nested_block(|input| { - let (theta_x, theta_y) = try!(parse_two_angles(input)); - result.push(SpecifiedOperation::Skew(theta_x, theta_y)); - Ok(()) - })) - }, - "skewx" => { - try!(input.parse_nested_block(|input| { - let theta_x = try!(specified::Angle::parse(input)); - result.push(SpecifiedOperation::Skew(theta_x, specified::Angle(0.0))); - Ok(()) - })) - }, - "skewy" => { - try!(input.parse_nested_block(|input| { - let theta_y = try!(specified::Angle::parse(input)); - result.push(SpecifiedOperation::Skew(specified::Angle(0.0), theta_y)); - Ok(()) - })) - }, - "perspective" => { - try!(input.parse_nested_block(|input| { - let d = try!(specified::Length::parse(input)); - result.push(SpecifiedOperation::Perspective(d)); - Ok(()) - })) - }, - _ => return Err(()) - } - } - - if !result.is_empty() { - Ok(SpecifiedValue(result)) - } else { - Err(()) - } - } - - impl ToComputedValue for SpecifiedValue { - type ComputedValue = computed_value::T; - - #[inline] - fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { - if self.0.is_empty() { - return computed_value::T(None) - } - - let mut result = vec!(); - for operation in &self.0 { - match *operation { - SpecifiedOperation::Matrix(ref matrix) => { - result.push(computed_value::ComputedOperation::Matrix(*matrix)); - } - SpecifiedOperation::Translate(_, ref tx, ref ty, ref tz) => { - result.push(computed_value::ComputedOperation::Translate(tx.to_computed_value(context), - ty.to_computed_value(context), - tz.to_computed_value(context))); - } - SpecifiedOperation::Scale(sx, sy, sz) => { - result.push(computed_value::ComputedOperation::Scale(sx, sy, sz)); - } - SpecifiedOperation::Rotate(ax, ay, az, theta) => { - result.push(computed_value::ComputedOperation::Rotate(ax, ay, az, theta)); - } - SpecifiedOperation::Skew(theta_x, theta_y) => { - result.push(computed_value::ComputedOperation::Skew(theta_x, theta_y)); - } - SpecifiedOperation::Perspective(d) => { - result.push(computed_value::ComputedOperation::Perspective(d.to_computed_value(context))); - } - }; - } - - computed_value::T(Some(result)) - } - } - </%self:longhand> - - pub struct OriginParseResult { - horizontal: Option<specified::LengthOrPercentage>, - vertical: Option<specified::LengthOrPercentage>, - depth: Option<specified::Length> - } - - pub fn parse_origin(_: &ParserContext, input: &mut Parser) -> Result<OriginParseResult,()> { - use values::specified::{LengthOrPercentage, Percentage}; - let (mut horizontal, mut vertical, mut depth) = (None, None, None); - loop { - if let Err(_) = input.try(|input| { - let token = try!(input.expect_ident()); - match_ignore_ascii_case! { - token, - "left" => { - if horizontal.is_none() { - horizontal = Some(LengthOrPercentage::Percentage(Percentage(0.0))) - } else { - return Err(()) - } - }, - "center" => { - if horizontal.is_none() { - horizontal = Some(LengthOrPercentage::Percentage(Percentage(0.5))) - } else if vertical.is_none() { - vertical = Some(LengthOrPercentage::Percentage(Percentage(0.5))) - } else { - return Err(()) - } - }, - "right" => { - if horizontal.is_none() { - horizontal = Some(LengthOrPercentage::Percentage(Percentage(1.0))) - } else { - return Err(()) - } - }, - "top" => { - if vertical.is_none() { - vertical = Some(LengthOrPercentage::Percentage(Percentage(0.0))) - } else { - return Err(()) - } - }, - "bottom" => { - if vertical.is_none() { - vertical = Some(LengthOrPercentage::Percentage(Percentage(1.0))) - } else { - return Err(()) - } - }, - _ => return Err(()) - } - Ok(()) - }) { - match LengthOrPercentage::parse(input) { - Ok(value) => { - if horizontal.is_none() { - horizontal = Some(value); - } else if vertical.is_none() { - vertical = Some(value); - } else if let LengthOrPercentage::Length(length) = value { - depth = Some(length); - } else { - break; - } - } - _ => break, - } - } - } - - if horizontal.is_some() || vertical.is_some() { - Ok(OriginParseResult { - horizontal: horizontal, - vertical: vertical, - depth: depth, - }) - } else { - Err(()) - } - } - - ${single_keyword("backface-visibility", "visible hidden")} - - ${single_keyword("transform-box", "border-box fill-box view-box", products="gecko")} - - ${single_keyword("transform-style", "auto flat preserve-3d")} - - <%self:longhand name="transform-origin"> - use app_units::Au; - use values::AuExtensionMethods; - use values::specified::{Length, LengthOrPercentage, Percentage}; - - use cssparser::ToCss; - use std::fmt; - - pub mod computed_value { - use values::computed::{Length, LengthOrPercentage}; - - #[derive(Clone, Copy, Debug, PartialEq, HeapSizeOf)] - pub struct T { - pub horizontal: LengthOrPercentage, - pub vertical: LengthOrPercentage, - pub depth: Length, - } - } - - #[derive(Clone, Copy, Debug, PartialEq, HeapSizeOf)] - pub struct SpecifiedValue { - horizontal: LengthOrPercentage, - vertical: LengthOrPercentage, - depth: Length, - } - - impl ToCss for computed_value::T { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - try!(self.horizontal.to_css(dest)); - try!(dest.write_str(" ")); - try!(self.vertical.to_css(dest)); - try!(dest.write_str(" ")); - self.depth.to_css(dest) - } - } - - impl ToCss for SpecifiedValue { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - try!(self.horizontal.to_css(dest)); - try!(dest.write_str(" ")); - try!(self.vertical.to_css(dest)); - try!(dest.write_str(" ")); - self.depth.to_css(dest) - } - } - - #[inline] - pub fn get_initial_value() -> computed_value::T { - computed_value::T { - horizontal: computed::LengthOrPercentage::Percentage(0.5), - vertical: computed::LengthOrPercentage::Percentage(0.5), - depth: Au(0), - } - } - - pub fn parse(context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue,()> { - let result = try!(super::parse_origin(context, input)); - Ok(SpecifiedValue { - horizontal: result.horizontal.unwrap_or(LengthOrPercentage::Percentage(Percentage(0.5))), - vertical: result.vertical.unwrap_or(LengthOrPercentage::Percentage(Percentage(0.5))), - depth: result.depth.unwrap_or(Length::Absolute(Au(0))), - }) - } - - impl ToComputedValue for SpecifiedValue { - type ComputedValue = computed_value::T; - - #[inline] - fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { - computed_value::T { - horizontal: self.horizontal.to_computed_value(context), - vertical: self.vertical.to_computed_value(context), - depth: self.depth.to_computed_value(context), - } - } - } - </%self:longhand> - - ${predefined_type("perspective", - "LengthOrNone", - "computed::LengthOrNone::None")} - - <%self:longhand name="perspective-origin"> - use values::specified::{LengthOrPercentage, Percentage}; - - use cssparser::ToCss; - use std::fmt; - - pub mod computed_value { - use values::computed::LengthOrPercentage; - - #[derive(Clone, Copy, Debug, PartialEq, HeapSizeOf)] - pub struct T { - pub horizontal: LengthOrPercentage, - pub vertical: LengthOrPercentage, - } - } - - impl ToCss for computed_value::T { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - try!(self.horizontal.to_css(dest)); - try!(dest.write_str(" ")); - self.vertical.to_css(dest) - } - } - - #[derive(Clone, Copy, Debug, PartialEq, HeapSizeOf)] - pub struct SpecifiedValue { - horizontal: LengthOrPercentage, - vertical: LengthOrPercentage, - } - - impl ToCss for SpecifiedValue { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - try!(self.horizontal.to_css(dest)); - try!(dest.write_str(" ")); - self.vertical.to_css(dest) - } - } - - #[inline] - pub fn get_initial_value() -> computed_value::T { - computed_value::T { - horizontal: computed::LengthOrPercentage::Percentage(0.5), - vertical: computed::LengthOrPercentage::Percentage(0.5), - } - } - - pub fn parse(context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue,()> { - let result = try!(super::parse_origin(context, input)); - match result.depth { - Some(_) => Err(()), - None => Ok(SpecifiedValue { - horizontal: result.horizontal.unwrap_or(LengthOrPercentage::Percentage(Percentage(0.5))), - vertical: result.vertical.unwrap_or(LengthOrPercentage::Percentage(Percentage(0.5))), - }) - } - } - - impl ToComputedValue for SpecifiedValue { - type ComputedValue = computed_value::T; - - #[inline] - fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { - computed_value::T { - horizontal: self.horizontal.to_computed_value(context), - vertical: self.vertical.to_computed_value(context), - } - } - } - </%self:longhand> - - ${single_keyword("mix-blend-mode", - """normal multiply screen overlay darken lighten color-dodge - color-burn hard-light soft-light difference exclusion hue - saturation color luminosity""", gecko_constant_prefix="NS_STYLE_BLEND")} - - // CSS Image Values and Replaced Content Module Level 3 - // https://drafts.csswg.org/css-images-3/ - - ${switch_to_style_struct("Position")} - - ${single_keyword("object-fit", "fill contain cover none scale-down", products="gecko")} - - ${switch_to_style_struct("InheritedBox")} - - <%self:longhand name="image-rendering"> - - pub mod computed_value { - use cssparser::ToCss; - use std::fmt; - - #[derive(Copy, Clone, Debug, PartialEq, HeapSizeOf, Deserialize, Serialize)] - pub enum T { - Auto, - CrispEdges, - Pixelated, - } - - impl ToCss for T { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match *self { - T::Auto => dest.write_str("auto"), - T::CrispEdges => dest.write_str("crisp-edges"), - T::Pixelated => dest.write_str("pixelated"), - } - } - } - } - - pub type SpecifiedValue = computed_value::T; - - #[inline] - pub fn get_initial_value() -> computed_value::T { - computed_value::T::Auto - } - - pub fn parse(_: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue,()> { - // According to to CSS-IMAGES-3, `optimizespeed` and `optimizequality` are synonyms for - // `auto`. - match_ignore_ascii_case! { - try!(input.expect_ident()), - "auto" => Ok(computed_value::T::Auto), - "optimizespeed" => Ok(computed_value::T::Auto), - "optimizequality" => Ok(computed_value::T::Auto), - "crisp-edges" => Ok(computed_value::T::CrispEdges), - "pixelated" => Ok(computed_value::T::Pixelated), - _ => Err(()) - } - } - - impl ToComputedValue for SpecifiedValue { - type ComputedValue = computed_value::T; - - #[inline] - fn to_computed_value<Cx: TContext>(&self, _: &Cx) -> computed_value::T { - *self - } - } - </%self:longhand> - - ${switch_to_style_struct("Box")} - - // TODO(pcwalton): Multiple transitions. - <%self:longhand name="transition-duration"> - use values::specified::Time; - - pub use self::computed_value::T as SpecifiedValue; - pub use values::specified::Time as SingleSpecifiedValue; - - pub mod computed_value { - use cssparser::ToCss; - use std::fmt; - use values::computed::{TContext, ToComputedValue}; - - pub use values::computed::Time as SingleComputedValue; - - #[derive(Debug, Clone, PartialEq, HeapSizeOf)] - pub struct T(pub Vec<SingleComputedValue>); - - impl ToComputedValue for T { - type ComputedValue = T; - - #[inline] - fn to_computed_value<Cx: TContext>(&self, _: &Cx) -> T { - (*self).clone() - } - } - - impl ToCss for T { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - if self.0.is_empty() { - return dest.write_str("none") - } - for (i, value) in self.0.iter().enumerate() { - if i != 0 { - try!(dest.write_str(", ")) - } - try!(value.to_css(dest)) - } - Ok(()) - } - } - } - - #[inline] - pub fn parse_one(input: &mut Parser) -> Result<SingleSpecifiedValue,()> { - Time::parse(input) - } - - #[inline] - pub fn get_initial_value() -> computed_value::T { - computed_value::T(vec![get_initial_single_value()]) - } - - #[inline] - pub fn get_initial_single_value() -> Time { - Time(0.0) - } - - pub fn parse(_: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue,()> { - Ok(SpecifiedValue(try!(input.parse_comma_separated(parse_one)))) - } - </%self:longhand> - - // TODO(pcwalton): Lots more timing functions. - // TODO(pcwalton): Multiple transitions. - <%self:longhand name="transition-timing-function"> - use self::computed_value::{StartEnd, TransitionTimingFunction}; - - use euclid::point::Point2D; - - pub use self::computed_value::SingleComputedValue as SingleSpecifiedValue; - pub use self::computed_value::T as SpecifiedValue; - - static EASE: TransitionTimingFunction = TransitionTimingFunction::CubicBezier(Point2D { - x: 0.25, - y: 0.1, - }, Point2D { - x: 0.25, - y: 1.0, - }); - static LINEAR: TransitionTimingFunction = TransitionTimingFunction::CubicBezier(Point2D { - x: 0.0, - y: 0.0, - }, Point2D { - x: 1.0, - y: 1.0, - }); - static EASE_IN: TransitionTimingFunction = TransitionTimingFunction::CubicBezier(Point2D { - x: 0.42, - y: 0.0, - }, Point2D { - x: 1.0, - y: 1.0, - }); - static EASE_OUT: TransitionTimingFunction = TransitionTimingFunction::CubicBezier(Point2D { - x: 0.0, - y: 0.0, - }, Point2D { - x: 0.58, - y: 1.0, - }); - static EASE_IN_OUT: TransitionTimingFunction = - TransitionTimingFunction::CubicBezier(Point2D { - x: 0.42, - y: 0.0, - }, Point2D { - x: 0.58, - y: 1.0, - }); - static STEP_START: TransitionTimingFunction = - TransitionTimingFunction::Steps(1, StartEnd::Start); - static STEP_END: TransitionTimingFunction = - TransitionTimingFunction::Steps(1, StartEnd::End); - - pub mod computed_value { - use cssparser::ToCss; - use euclid::point::Point2D; - use std::fmt; - - pub use self::TransitionTimingFunction as SingleComputedValue; - - #[derive(Copy, Clone, Debug, PartialEq, HeapSizeOf)] - pub enum TransitionTimingFunction { - CubicBezier(Point2D<f32>, Point2D<f32>), - Steps(u32, StartEnd), - } - - impl ToCss for TransitionTimingFunction { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match *self { - TransitionTimingFunction::CubicBezier(p1, p2) => { - try!(dest.write_str("cubic-bezier(")); - try!(p1.x.to_css(dest)); - try!(dest.write_str(", ")); - try!(p1.y.to_css(dest)); - try!(dest.write_str(", ")); - try!(p2.x.to_css(dest)); - try!(dest.write_str(", ")); - try!(p2.y.to_css(dest)); - dest.write_str(")") - } - TransitionTimingFunction::Steps(steps, start_end) => { - try!(dest.write_str("steps(")); - try!(steps.to_css(dest)); - try!(dest.write_str(", ")); - try!(start_end.to_css(dest)); - dest.write_str(")") - } - } - } - } - - #[derive(Copy, Clone, Debug, PartialEq, HeapSizeOf)] - pub enum StartEnd { - Start, - End, - } - - impl ToCss for StartEnd { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match *self { - StartEnd::Start => dest.write_str("start"), - StartEnd::End => dest.write_str("end"), - } - } - } - - #[derive(Clone, Debug, PartialEq, HeapSizeOf)] - pub struct T(pub Vec<TransitionTimingFunction>); - - impl ToCss for T { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - if self.0.is_empty() { - return dest.write_str("none") - } - for (i, value) in self.0.iter().enumerate() { - if i != 0 { - try!(dest.write_str(", ")) - } - try!(value.to_css(dest)) - } - Ok(()) - } - } - } - - impl ToComputedValue for SpecifiedValue { - type ComputedValue = computed_value::T; - - #[inline] - fn to_computed_value<Cx: TContext>(&self, _: &Cx) -> computed_value::T { - (*self).clone() - } - } - - #[inline] - pub fn get_initial_value() -> computed_value::T { - computed_value::T(vec![get_initial_single_value()]) - } - - #[inline] - pub fn get_initial_single_value() -> TransitionTimingFunction { - EASE - } - - pub fn parse_one(input: &mut Parser) -> Result<SingleSpecifiedValue,()> { - if let Ok(function_name) = input.try(|input| input.expect_function()) { - return match_ignore_ascii_case! { - function_name, - "cubic-bezier" => { - let (mut p1x, mut p1y, mut p2x, mut p2y) = (0.0, 0.0, 0.0, 0.0); - try!(input.parse_nested_block(|input| { - p1x = try!(specified::parse_number(input)); - try!(input.expect_comma()); - p1y = try!(specified::parse_number(input)); - try!(input.expect_comma()); - p2x = try!(specified::parse_number(input)); - try!(input.expect_comma()); - p2y = try!(specified::parse_number(input)); - Ok(()) - })); - let (p1, p2) = (Point2D::new(p1x, p1y), Point2D::new(p2x, p2y)); - Ok(TransitionTimingFunction::CubicBezier(p1, p2)) - }, - "steps" => { - let (mut step_count, mut start_end) = (0, computed_value::StartEnd::Start); - try!(input.parse_nested_block(|input| { - step_count = try!(specified::parse_integer(input)); - try!(input.expect_comma()); - start_end = try!(match_ignore_ascii_case! { - try!(input.expect_ident()), - "start" => Ok(computed_value::StartEnd::Start), - "end" => Ok(computed_value::StartEnd::End), - _ => Err(()) - }); - Ok(()) - })); - Ok(TransitionTimingFunction::Steps(step_count as u32, start_end)) - }, - _ => Err(()) - } - } - match_ignore_ascii_case! { - try!(input.expect_ident()), - "ease" => Ok(EASE), - "linear" => Ok(LINEAR), - "ease-in" => Ok(EASE_IN), - "ease-out" => Ok(EASE_OUT), - "ease-in-out" => Ok(EASE_IN_OUT), - "step-start" => Ok(STEP_START), - "step-end" => Ok(STEP_END), - _ => Err(()) - } - } - - pub fn parse(_: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue,()> { - Ok(SpecifiedValue(try!(input.parse_comma_separated(parse_one)))) - } - </%self:longhand> - - // TODO(pcwalton): Lots more properties. - <%self:longhand name="transition-property"> - use self::computed_value::TransitionProperty; - - pub use self::computed_value::SingleComputedValue as SingleSpecifiedValue; - pub use self::computed_value::T as SpecifiedValue; - - pub mod computed_value { - use cssparser::ToCss; - use std::fmt; - - pub use self::TransitionProperty as SingleComputedValue; - - #[derive(Copy, Clone, Debug, PartialEq, HeapSizeOf)] - pub enum TransitionProperty { - All, - BackgroundColor, - BackgroundPosition, - BorderBottomColor, - BorderBottomWidth, - BorderLeftColor, - BorderLeftWidth, - BorderRightColor, - BorderRightWidth, - BorderSpacing, - BorderTopColor, - BorderTopWidth, - Bottom, - Color, - Clip, - FontSize, - FontWeight, - Height, - Left, - LetterSpacing, - LineHeight, - MarginBottom, - MarginLeft, - MarginRight, - MarginTop, - MaxHeight, - MaxWidth, - MinHeight, - MinWidth, - Opacity, - OutlineColor, - OutlineWidth, - PaddingBottom, - PaddingLeft, - PaddingRight, - PaddingTop, - Right, - TextIndent, - TextShadow, - Top, - Transform, - VerticalAlign, - Visibility, - Width, - WordSpacing, - ZIndex, - } - - pub static ALL_TRANSITION_PROPERTIES: [TransitionProperty; 45] = [ - TransitionProperty::BackgroundColor, - TransitionProperty::BackgroundPosition, - TransitionProperty::BorderBottomColor, - TransitionProperty::BorderBottomWidth, - TransitionProperty::BorderLeftColor, - TransitionProperty::BorderLeftWidth, - TransitionProperty::BorderRightColor, - TransitionProperty::BorderRightWidth, - TransitionProperty::BorderSpacing, - TransitionProperty::BorderTopColor, - TransitionProperty::BorderTopWidth, - TransitionProperty::Bottom, - TransitionProperty::Color, - TransitionProperty::Clip, - TransitionProperty::FontSize, - TransitionProperty::FontWeight, - TransitionProperty::Height, - TransitionProperty::Left, - TransitionProperty::LetterSpacing, - TransitionProperty::LineHeight, - TransitionProperty::MarginBottom, - TransitionProperty::MarginLeft, - TransitionProperty::MarginRight, - TransitionProperty::MarginTop, - TransitionProperty::MaxHeight, - TransitionProperty::MaxWidth, - TransitionProperty::MinHeight, - TransitionProperty::MinWidth, - TransitionProperty::Opacity, - TransitionProperty::OutlineColor, - TransitionProperty::OutlineWidth, - TransitionProperty::PaddingBottom, - TransitionProperty::PaddingLeft, - TransitionProperty::PaddingRight, - TransitionProperty::PaddingTop, - TransitionProperty::Right, - TransitionProperty::TextIndent, - TransitionProperty::TextShadow, - TransitionProperty::Top, - TransitionProperty::Transform, - TransitionProperty::VerticalAlign, - TransitionProperty::Visibility, - TransitionProperty::Width, - TransitionProperty::WordSpacing, - TransitionProperty::ZIndex, - ]; - - impl ToCss for TransitionProperty { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match *self { - TransitionProperty::All => dest.write_str("all"), - TransitionProperty::BackgroundColor => dest.write_str("background-color"), - TransitionProperty::BackgroundPosition => dest.write_str("background-position"), - TransitionProperty::BorderBottomColor => dest.write_str("border-bottom-color"), - TransitionProperty::BorderBottomWidth => dest.write_str("border-bottom-width"), - TransitionProperty::BorderLeftColor => dest.write_str("border-left-color"), - TransitionProperty::BorderLeftWidth => dest.write_str("border-left-width"), - TransitionProperty::BorderRightColor => dest.write_str("border-right-color"), - TransitionProperty::BorderRightWidth => dest.write_str("border-right-width"), - TransitionProperty::BorderSpacing => dest.write_str("border-spacing"), - TransitionProperty::BorderTopColor => dest.write_str("border-top-color"), - TransitionProperty::BorderTopWidth => dest.write_str("border-top-width"), - TransitionProperty::Bottom => dest.write_str("bottom"), - TransitionProperty::Color => dest.write_str("color"), - TransitionProperty::Clip => dest.write_str("clip"), - TransitionProperty::FontSize => dest.write_str("font-size"), - TransitionProperty::FontWeight => dest.write_str("font-weight"), - TransitionProperty::Height => dest.write_str("height"), - TransitionProperty::Left => dest.write_str("left"), - TransitionProperty::LetterSpacing => dest.write_str("letter-spacing"), - TransitionProperty::LineHeight => dest.write_str("line-height"), - TransitionProperty::MarginBottom => dest.write_str("margin-bottom"), - TransitionProperty::MarginLeft => dest.write_str("margin-left"), - TransitionProperty::MarginRight => dest.write_str("margin-right"), - TransitionProperty::MarginTop => dest.write_str("margin-top"), - TransitionProperty::MaxHeight => dest.write_str("max-height"), - TransitionProperty::MaxWidth => dest.write_str("max-width"), - TransitionProperty::MinHeight => dest.write_str("min-height"), - TransitionProperty::MinWidth => dest.write_str("min-width"), - TransitionProperty::Opacity => dest.write_str("opacity"), - TransitionProperty::OutlineColor => dest.write_str("outline-color"), - TransitionProperty::OutlineWidth => dest.write_str("outline-width"), - TransitionProperty::PaddingBottom => dest.write_str("padding-bottom"), - TransitionProperty::PaddingLeft => dest.write_str("padding-left"), - TransitionProperty::PaddingRight => dest.write_str("padding-right"), - TransitionProperty::PaddingTop => dest.write_str("padding-top"), - TransitionProperty::Right => dest.write_str("right"), - TransitionProperty::TextIndent => dest.write_str("text-indent"), - TransitionProperty::TextShadow => dest.write_str("text-shadow"), - TransitionProperty::Top => dest.write_str("top"), - TransitionProperty::Transform => dest.write_str("transform"), - TransitionProperty::VerticalAlign => dest.write_str("vertical-align"), - TransitionProperty::Visibility => dest.write_str("visibility"), - TransitionProperty::Width => dest.write_str("width"), - TransitionProperty::WordSpacing => dest.write_str("word-spacing"), - TransitionProperty::ZIndex => dest.write_str("z-index"), - } - } - } - - #[derive(Clone, Debug, PartialEq, HeapSizeOf)] - pub struct T(pub Vec<SingleComputedValue>); - - impl ToCss for T { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - if self.0.is_empty() { - return dest.write_str("none") - } - for (i, value) in self.0.iter().enumerate() { - if i != 0 { - try!(dest.write_str(", ")) - } - try!(value.to_css(dest)) - } - Ok(()) - } - } - } - - #[inline] - pub fn get_initial_value() -> computed_value::T { - computed_value::T(Vec::new()) - } - - pub fn parse_one(input: &mut Parser) -> Result<SingleSpecifiedValue,()> { - match_ignore_ascii_case! { - try!(input.expect_ident()), - "all" => Ok(TransitionProperty::All), - "background-color" => Ok(TransitionProperty::BackgroundColor), - "background-position" => Ok(TransitionProperty::BackgroundPosition), - "border-bottom-color" => Ok(TransitionProperty::BorderBottomColor), - "border-bottom-width" => Ok(TransitionProperty::BorderBottomWidth), - "border-left-color" => Ok(TransitionProperty::BorderLeftColor), - "border-left-width" => Ok(TransitionProperty::BorderLeftWidth), - "border-right-color" => Ok(TransitionProperty::BorderRightColor), - "border-right-width" => Ok(TransitionProperty::BorderRightWidth), - "border-spacing" => Ok(TransitionProperty::BorderSpacing), - "border-top-color" => Ok(TransitionProperty::BorderTopColor), - "border-top-width" => Ok(TransitionProperty::BorderTopWidth), - "bottom" => Ok(TransitionProperty::Bottom), - "color" => Ok(TransitionProperty::Color), - "clip" => Ok(TransitionProperty::Clip), - "font-size" => Ok(TransitionProperty::FontSize), - "font-weight" => Ok(TransitionProperty::FontWeight), - "height" => Ok(TransitionProperty::Height), - "left" => Ok(TransitionProperty::Left), - "letter-spacing" => Ok(TransitionProperty::LetterSpacing), - "line-height" => Ok(TransitionProperty::LineHeight), - "margin-bottom" => Ok(TransitionProperty::MarginBottom), - "margin-left" => Ok(TransitionProperty::MarginLeft), - "margin-right" => Ok(TransitionProperty::MarginRight), - "margin-top" => Ok(TransitionProperty::MarginTop), - "max-height" => Ok(TransitionProperty::MaxHeight), - "max-width" => Ok(TransitionProperty::MaxWidth), - "min-height" => Ok(TransitionProperty::MinHeight), - "min-width" => Ok(TransitionProperty::MinWidth), - "opacity" => Ok(TransitionProperty::Opacity), - "outline-color" => Ok(TransitionProperty::OutlineColor), - "outline-width" => Ok(TransitionProperty::OutlineWidth), - "padding-bottom" => Ok(TransitionProperty::PaddingBottom), - "padding-left" => Ok(TransitionProperty::PaddingLeft), - "padding-right" => Ok(TransitionProperty::PaddingRight), - "padding-top" => Ok(TransitionProperty::PaddingTop), - "right" => Ok(TransitionProperty::Right), - "text-indent" => Ok(TransitionProperty::TextIndent), - "text-shadow" => Ok(TransitionProperty::TextShadow), - "top" => Ok(TransitionProperty::Top), - "transform" => Ok(TransitionProperty::Transform), - "vertical-align" => Ok(TransitionProperty::VerticalAlign), - "visibility" => Ok(TransitionProperty::Visibility), - "width" => Ok(TransitionProperty::Width), - "word-spacing" => Ok(TransitionProperty::WordSpacing), - "z-index" => Ok(TransitionProperty::ZIndex), - _ => Err(()) - } - } - - pub fn parse(_: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue,()> { - Ok(SpecifiedValue(try!(input.parse_comma_separated(parse_one)))) - } - - impl ToComputedValue for SpecifiedValue { - type ComputedValue = computed_value::T; - - #[inline] - fn to_computed_value<Cx: TContext>(&self, _: &Cx) -> computed_value::T { - (*self).clone() - } - } - </%self:longhand> - - <%self:longhand name="transition-delay"> - pub use properties::longhands::transition_duration::{SingleSpecifiedValue, SpecifiedValue}; - pub use properties::longhands::transition_duration::{computed_value}; - pub use properties::longhands::transition_duration::{get_initial_single_value}; - pub use properties::longhands::transition_duration::{get_initial_value, parse, parse_one}; - </%self:longhand> - - // CSS Flexible Box Layout Module Level 1 - // http://www.w3.org/TR/css3-flexbox/ - - ${switch_to_style_struct("Position")} - - // Flex container properties - ${single_keyword("flex-direction", "row row-reverse column column-reverse", experimental=True)} - - // https://drafts.csswg.org/css-flexbox/#propdef-order - <%self:longhand name="order"> - use values::computed::ComputedValueAsSpecified; - - impl ComputedValueAsSpecified for SpecifiedValue {} - - pub type SpecifiedValue = computed_value::T; - - pub mod computed_value { - pub type T = i32; - } - - #[inline] - pub fn get_initial_value() -> computed_value::T { - 0 - } - - fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { - specified::parse_integer(input) - } - </%self:longhand> - - ${single_keyword("flex-wrap", "nowrap wrap wrap-reverse", products="gecko")} - - // SVG 1.1 (Second Edition) - // https://www.w3.org/TR/SVG/ - ${new_style_struct("SVGInherited", is_inherited=True, gecko_name="nsStyleSVG")} - - // Section 10 - Text - - ${single_keyword("text-anchor", "start middle end", products="gecko")} - - // Section 11 - Painting: Filling, Stroking and Marker Symbols - ${single_keyword("color-interpolation", "auto sRGB linearRGB", products="gecko")} - - ${single_keyword("color-interpolation-filters", "auto sRGB linearRGB", - products="gecko", gecko_constant_prefix="NS_STYLE_COLOR_INTERPOLATION")} - - ${single_keyword("fill-rule", "nonzero evenodd", products="gecko")} - - ${single_keyword("shape-rendering", "auto optimizeSpeed crispEdges geometricPrecision", - products="gecko")} - - ${single_keyword("stroke-linecap", "butt round square", products="gecko")} - - ${single_keyword("stroke-linejoin", "miter round bevel", products="gecko")} - - // Section 14 - Clipping, Masking and Compositing - ${single_keyword("clip-rule", "nonzero evenodd", - products="gecko", gecko_constant_prefix="NS_STYLE_FILL_RULE")} - - ${new_style_struct("SVG", is_inherited=False, gecko_name="nsStyleSVGReset")} - - ${single_keyword("dominant-baseline", - """auto use-script no-change reset-size ideographic alphabetic hanging - mathematical central middle text-after-edge text-before-edge""", - products="gecko")} - - ${single_keyword("vector-effect", "none non-scaling-stroke", products="gecko")} - - // CSS Masking Module Level 1 - // https://www.w3.org/TR/css-masking-1/ - ${single_keyword("mask-type", "luminance alpha", products="gecko")} -} - - -pub mod shorthands { - use cssparser::Parser; - use parser::ParserContext; - use values::specified; - - <%def name="shorthand(name, sub_properties, experimental=False)"> - <% - shorthand = Shorthand(name, sub_properties.split(), experimental=experimental) - SHORTHANDS.append(shorthand) - %> - pub mod ${shorthand.ident} { - use cssparser::Parser; - use parser::ParserContext; - use properties::{longhands, PropertyDeclaration, DeclaredValue, Shorthand}; - - pub struct Longhands { - % for sub_property in shorthand.sub_properties: - pub ${sub_property.ident}: - Option<longhands::${sub_property.ident}::SpecifiedValue>, - % endfor - } - - pub fn parse(context: &ParserContext, input: &mut Parser, - declarations: &mut Vec<PropertyDeclaration>) - -> Result<(), ()> { - input.look_for_var_functions(); - let start = input.position(); - let value = input.parse_entirely(|input| parse_value(context, input)); - if value.is_err() { - while let Ok(_) = input.next() {} // Look for var() after the error. - } - let var = input.seen_var_functions(); - if let Ok(value) = value { - % for sub_property in shorthand.sub_properties: - declarations.push(PropertyDeclaration::${sub_property.camel_case}( - match value.${sub_property.ident} { - Some(value) => DeclaredValue::Value(value), - None => DeclaredValue::Initial, - } - )); - % endfor - Ok(()) - } else if var { - input.reset(start); - let (first_token_type, css) = try!( - ::custom_properties::parse_non_custom_with_var(input)); - % for sub_property in shorthand.sub_properties: - declarations.push(PropertyDeclaration::${sub_property.camel_case}( - DeclaredValue::WithVariables { - css: css.clone().into_owned(), - first_token_type: first_token_type, - base_url: context.base_url.clone(), - from_shorthand: Some(Shorthand::${shorthand.camel_case}), - } - )); - % endfor - Ok(()) - } else { - Err(()) - } - } - - #[allow(unused_variables)] - pub fn parse_value(context: &ParserContext, input: &mut Parser) -> Result<Longhands, ()> { - ${caller.body()} - } - } - </%def> - - fn parse_four_sides<F, T>(input: &mut Parser, parse_one: F) -> Result<(T, T, T, T), ()> - where F: Fn(&mut Parser) -> Result<T, ()>, F: Copy, T: Clone { - // zero or more than four values is invalid. - // one value sets them all - // two values set (top, bottom) and (left, right) - // three values set top, (left, right) and bottom - // four values set them in order - let top = try!(parse_one(input)); - let right; - let bottom; - let left; - match input.try(parse_one) { - Err(()) => { - right = top.clone(); - bottom = top.clone(); - left = top.clone(); - } - Ok(value) => { - right = value; - match input.try(parse_one) { - Err(()) => { - bottom = top.clone(); - left = right.clone(); - } - Ok(value) => { - bottom = value; - match input.try(parse_one) { - Err(()) => { - left = right.clone(); - } - Ok(value) => { - left = value; - } - } - - } - } - - } - } - Ok((top, right, bottom, left)) - } - - <%def name="four_sides_shorthand(name, sub_property_pattern, parser_function)"> - <%self:shorthand name="${name}" sub_properties="${ - ' '.join(sub_property_pattern % side - for side in ['top', 'right', 'bottom', 'left'])}"> - use super::parse_four_sides; - use values::specified; - let _unused = context; - let (top, right, bottom, left) = try!(parse_four_sides(input, ${parser_function})); - Ok(Longhands { - % for side in ["top", "right", "bottom", "left"]: - ${to_rust_ident(sub_property_pattern % side)}: Some(${side}), - % endfor - }) - </%self:shorthand> - </%def> - - // TODO: other background-* properties - <%self:shorthand name="background" - sub_properties="background-color background-position background-repeat background-attachment - background-image background-size background-origin background-clip"> - use properties::longhands::{background_color, background_position, background_repeat, background_attachment}; - use properties::longhands::{background_image, background_size, background_origin, background_clip}; - - let mut color = None; - let mut image = None; - let mut position = None; - let mut repeat = None; - let mut size = None; - let mut attachment = None; - let mut any = false; - let mut origin = None; - let mut clip = None; - - loop { - if position.is_none() { - if let Ok(value) = input.try(|input| background_position::parse(context, input)) { - position = Some(value); - any = true; - - // Parse background size, if applicable. - size = input.try(|input| { - try!(input.expect_delim('/')); - background_size::parse(context, input) - }).ok(); - - continue - } - } - if color.is_none() { - if let Ok(value) = input.try(|input| background_color::parse(context, input)) { - color = Some(value); - any = true; - continue - } - } - if image.is_none() { - if let Ok(value) = input.try(|input| background_image::parse(context, input)) { - image = Some(value); - any = true; - continue - } - } - if repeat.is_none() { - if let Ok(value) = input.try(|input| background_repeat::parse(context, input)) { - repeat = Some(value); - any = true; - continue - } - } - if attachment.is_none() { - if let Ok(value) = input.try(|input| background_attachment::parse(context, input)) { - attachment = Some(value); - any = true; - continue - } - } - if origin.is_none() { - if let Ok(value) = input.try(|input| background_origin::parse(context, input)) { - origin = Some(value); - any = true; - continue - } - } - if clip.is_none() { - if let Ok(value) = input.try(|input| background_clip::parse(context, input)) { - clip = Some(value); - any = true; - continue - } - } - break - } - - if any { - Ok(Longhands { - background_color: color, - background_image: image, - background_position: position, - background_repeat: repeat, - background_attachment: attachment, - background_size: size, - background_origin: origin, - background_clip: clip, - }) - } else { - Err(()) - } - </%self:shorthand> - - ${four_sides_shorthand("margin", "margin-%s", "specified::LengthOrPercentageOrAuto::parse")} - ${four_sides_shorthand("padding", "padding-%s", "specified::LengthOrPercentage::parse")} - - ${four_sides_shorthand("border-color", "border-%s-color", "specified::CSSColor::parse")} - ${four_sides_shorthand("border-style", "border-%s-style", - "specified::BorderStyle::parse")} - <%self:shorthand name="border-width" sub_properties="${ - ' '.join('border-%s-width' % side - for side in ['top', 'right', 'bottom', 'left'])}"> - use super::parse_four_sides; - use values::specified; - let _unused = context; - let (top, right, bottom, left) = try!(parse_four_sides(input, specified::parse_border_width)); - Ok(Longhands { - % for side in ["top", "right", "bottom", "left"]: - ${to_rust_ident('border-%s-width' % side)}: - Some(longhands::${to_rust_ident('border-%s-width' % side)}::SpecifiedValue(${side})), - % endfor - }) - </%self:shorthand> - - - pub fn parse_border(context: &ParserContext, input: &mut Parser) - -> Result<(Option<specified::CSSColor>, - Option<specified::BorderStyle>, - Option<specified::Length>), ()> { - use values::specified; - let _unused = context; - let mut color = None; - let mut style = None; - let mut width = None; - let mut any = false; - loop { - if color.is_none() { - if let Ok(value) = input.try(specified::CSSColor::parse) { - color = Some(value); - any = true; - continue - } - } - if style.is_none() { - if let Ok(value) = input.try(specified::BorderStyle::parse) { - style = Some(value); - any = true; - continue - } - } - if width.is_none() { - if let Ok(value) = input.try(specified::parse_border_width) { - width = Some(value); - any = true; - continue - } - } - break - } - if any { Ok((color, style, width)) } else { Err(()) } - } - - - % for side in ["top", "right", "bottom", "left"]: - <%self:shorthand name="border-${side}" sub_properties="${' '.join( - 'border-%s-%s' % (side, prop) - for prop in ['color', 'style', 'width'] - )}"> - let (color, style, width) = try!(super::parse_border(context, input)); - Ok(Longhands { - border_${side}_color: color, - border_${side}_style: style, - border_${side}_width: - width.map(longhands::${to_rust_ident('border-%s-width' % side)}::SpecifiedValue), - }) - </%self:shorthand> - % endfor - - <%self:shorthand name="border" sub_properties="${' '.join( - 'border-%s-%s' % (side, prop) - for side in ['top', 'right', 'bottom', 'left'] - for prop in ['color', 'style', 'width'] - )}"> - let (color, style, width) = try!(super::parse_border(context, input)); - Ok(Longhands { - % for side in ["top", "right", "bottom", "left"]: - border_${side}_color: color.clone(), - border_${side}_style: style, - border_${side}_width: - width.map(longhands::${to_rust_ident('border-%s-width' % side)}::SpecifiedValue), - % endfor - }) - </%self:shorthand> - - <%self:shorthand name="border-radius" sub_properties="${' '.join( - 'border-%s-radius' % (corner) - for corner in ['top-left', 'top-right', 'bottom-right', 'bottom-left'] - )}"> - use app_units::Au; - use values::specified::{Length, LengthOrPercentage}; - use values::specified::BorderRadiusSize; - - let _ignored = context; - - fn parse_one_set_of_border_values(mut input: &mut Parser) - -> Result<[LengthOrPercentage; 4], ()> { - let mut count = 0; - let mut values = [LengthOrPercentage::Length(Length::Absolute(Au(0))); 4]; - while count < 4 { - if let Ok(value) = input.try(LengthOrPercentage::parse) { - values[count] = value; - count += 1; - } else { - break - } - } - - match count { - 1 => Ok([values[0], values[0], values[0], values[0]]), - 2 => Ok([values[0], values[1], values[0], values[1]]), - 3 => Ok([values[0], values[1], values[2], values[1]]), - 4 => Ok([values[0], values[1], values[2], values[3]]), - _ => Err(()), - } - } - - fn parse_one_set_of_border_radii(mut input: &mut Parser) - -> Result<[BorderRadiusSize; 4], ()> { - let widths = try!(parse_one_set_of_border_values(input)); - let mut heights = widths.clone(); - let mut radii_values = [BorderRadiusSize::zero(); 4]; - if input.try(|input| input.expect_delim('/')).is_ok() { - heights = try!(parse_one_set_of_border_values(input)); - } - for i in 0..radii_values.len() { - radii_values[i] = BorderRadiusSize::new(widths[i], heights[i]); - } - Ok(radii_values) - } - - let radii = try!(parse_one_set_of_border_radii(input)); - Ok(Longhands { - border_top_left_radius: Some(radii[0]), - border_top_right_radius: Some(radii[1]), - border_bottom_right_radius: Some(radii[2]), - border_bottom_left_radius: Some(radii[3]), - }) - </%self:shorthand> - - <%self:shorthand name="outline" sub_properties="outline-color outline-style outline-width"> - use properties::longhands::outline_width; - use values::specified; - - let _unused = context; - let mut color = None; - let mut style = None; - let mut width = None; - let mut any = false; - loop { - if color.is_none() { - if let Ok(value) = input.try(specified::CSSColor::parse) { - color = Some(value); - any = true; - continue - } - } - if style.is_none() { - if let Ok(value) = input.try(specified::BorderStyle::parse) { - style = Some(value); - any = true; - continue - } - } - if width.is_none() { - if let Ok(value) = input.try(|input| outline_width::parse(context, input)) { - width = Some(value); - any = true; - continue - } - } - break - } - if any { - Ok(Longhands { - outline_color: color, - outline_style: style, - outline_width: width, - }) - } else { - Err(()) - } - </%self:shorthand> - - <%self:shorthand name="font" sub_properties="font-style font-variant font-weight - font-size line-height font-family"> - use properties::longhands::{font_style, font_variant, font_weight, font_size, - line_height, font_family}; - let mut nb_normals = 0; - let mut style = None; - let mut variant = None; - let mut weight = None; - let size; - loop { - // Special-case 'normal' because it is valid in each of - // font-style, font-weight and font-variant. - // Leaves the values to None, 'normal' is the initial value for each of them. - if input.try(|input| input.expect_ident_matching("normal")).is_ok() { - nb_normals += 1; - continue; - } - if style.is_none() { - if let Ok(value) = input.try(|input| font_style::parse(context, input)) { - style = Some(value); - continue - } - } - if weight.is_none() { - if let Ok(value) = input.try(|input| font_weight::parse(context, input)) { - weight = Some(value); - continue - } - } - if variant.is_none() { - if let Ok(value) = input.try(|input| font_variant::parse(context, input)) { - variant = Some(value); - continue - } - } - size = Some(try!(font_size::parse(context, input))); - break - } - #[inline] - fn count<T>(opt: &Option<T>) -> u8 { - if opt.is_some() { 1 } else { 0 } - } - if size.is_none() || (count(&style) + count(&weight) + count(&variant) + nb_normals) > 3 { - return Err(()) - } - let line_height = if input.try(|input| input.expect_delim('/')).is_ok() { - Some(try!(line_height::parse(context, input))) - } else { - None - }; - let family = try!(input.parse_comma_separated(font_family::parse_one_family)); - Ok(Longhands { - font_style: style, - font_variant: variant, - font_weight: weight, - font_size: size, - line_height: line_height, - font_family: Some(font_family::SpecifiedValue(family)) - }) - </%self:shorthand> - - // Per CSS-TEXT 6.2, "for legacy reasons, UAs must treat `word-wrap` as an alternate name for - // the `overflow-wrap` property, as if it were a shorthand of `overflow-wrap`." - <%self:shorthand name="word-wrap" sub_properties="overflow-wrap"> - use properties::longhands::overflow_wrap; - Ok(Longhands { - overflow_wrap: Some(try!(overflow_wrap::parse(context, input))), - }) - </%self:shorthand> - - <%self:shorthand name="list-style" - sub_properties="list-style-image list-style-position list-style-type"> - use properties::longhands::{list_style_image, list_style_position, list_style_type}; - - // `none` is ambiguous until we've finished parsing the shorthands, so we count the number - // of times we see it. - let mut nones = 0u8; - let (mut image, mut position, mut list_style_type, mut any) = (None, None, None, false); - loop { - if input.try(|input| input.expect_ident_matching("none")).is_ok() { - nones = nones + 1; - if nones > 2 { - return Err(()) - } - any = true; - continue - } - - if list_style_type.is_none() { - if let Ok(value) = input.try(|input| list_style_type::parse(context, input)) { - list_style_type = Some(value); - any = true; - continue - } - } - - if image.is_none() { - if let Ok(value) = input.try(|input| list_style_image::parse(context, input)) { - image = Some(value); - any = true; - continue - } - } - - if position.is_none() { - if let Ok(value) = input.try(|input| list_style_position::parse(context, input)) { - position = Some(value); - any = true; - continue - } - } - break - } - - // If there are two `none`s, then we can't have a type or image; if there is one `none`, - // then we can't have both a type *and* an image; if there is no `none` then we're fine as - // long as we parsed something. - match (any, nones, list_style_type, image) { - (true, 2, None, None) => { - Ok(Longhands { - list_style_position: position, - list_style_image: Some(list_style_image::SpecifiedValue::None), - list_style_type: Some(list_style_type::SpecifiedValue::none), - }) - } - (true, 1, None, Some(image)) => { - Ok(Longhands { - list_style_position: position, - list_style_image: Some(image), - list_style_type: Some(list_style_type::SpecifiedValue::none), - }) - } - (true, 1, Some(list_style_type), None) => { - Ok(Longhands { - list_style_position: position, - list_style_image: Some(list_style_image::SpecifiedValue::None), - list_style_type: Some(list_style_type), - }) - } - (true, 1, None, None) => { - Ok(Longhands { - list_style_position: position, - list_style_image: Some(list_style_image::SpecifiedValue::None), - list_style_type: Some(list_style_type::SpecifiedValue::none), - }) - } - (true, 0, list_style_type, image) => { - Ok(Longhands { - list_style_position: position, - list_style_image: image, - list_style_type: list_style_type, - }) - } - _ => Err(()), - } - </%self:shorthand> - - <%self:shorthand name="columns" sub_properties="column-count column-width" experimental="True"> - use properties::longhands::{column_count, column_width}; - let mut column_count = None; - let mut column_width = None; - let mut autos = 0; - - loop { - if input.try(|input| input.expect_ident_matching("auto")).is_ok() { - // Leave the options to None, 'auto' is the initial value. - autos += 1; - continue - } - - if column_count.is_none() { - if let Ok(value) = input.try(|input| column_count::parse(context, input)) { - column_count = Some(value); - continue - } - } - - if column_width.is_none() { - if let Ok(value) = input.try(|input| column_width::parse(context, input)) { - column_width = Some(value); - continue - } - } - - break - } - - let values = autos + column_count.iter().len() + column_width.iter().len(); - if values == 0 || values > 2 { - Err(()) - } else { - Ok(Longhands { - column_count: column_count, - column_width: column_width, - }) - } - </%self:shorthand> - - <%self:shorthand name="overflow" sub_properties="overflow-x overflow-y"> - use properties::longhands::{overflow_x, overflow_y}; - - let overflow = try!(overflow_x::parse(context, input)); - Ok(Longhands { - overflow_x: Some(overflow), - overflow_y: Some(overflow_y::SpecifiedValue(overflow)), - }) - </%self:shorthand> - - <%self:shorthand name="transition" - sub_properties="transition-property transition-duration transition-timing-function - transition-delay"> - use properties::longhands::{transition_delay, transition_duration, transition_property}; - use properties::longhands::{transition_timing_function}; - - struct SingleTransition { - transition_property: transition_property::SingleSpecifiedValue, - transition_duration: transition_duration::SingleSpecifiedValue, - transition_timing_function: transition_timing_function::SingleSpecifiedValue, - transition_delay: transition_delay::SingleSpecifiedValue, - } - - fn parse_one_transition(input: &mut Parser) -> Result<SingleTransition,()> { - let (mut property, mut duration) = (None, None); - let (mut timing_function, mut delay) = (None, None); - loop { - if property.is_none() { - if let Ok(value) = input.try(|input| transition_property::parse_one(input)) { - property = Some(value); - continue - } - } - - if duration.is_none() { - if let Ok(value) = input.try(|input| transition_duration::parse_one(input)) { - duration = Some(value); - continue - } - } - - if timing_function.is_none() { - if let Ok(value) = input.try(|input| { - transition_timing_function::parse_one(input) - }) { - timing_function = Some(value); - continue - } - } - - if delay.is_none() { - if let Ok(value) = input.try(|input| transition_delay::parse_one(input)) { - delay = Some(value); - continue; - } - } - - break - } - - if let Some(property) = property { - Ok(SingleTransition { - transition_property: property, - transition_duration: - duration.unwrap_or(transition_duration::get_initial_single_value()), - transition_timing_function: - timing_function.unwrap_or( - transition_timing_function::get_initial_single_value()), - transition_delay: - delay.unwrap_or(transition_delay::get_initial_single_value()), - }) - } else { - Err(()) - } - } - - if input.try(|input| input.expect_ident_matching("none")).is_ok() { - return Ok(Longhands { - transition_property: None, - transition_duration: None, - transition_timing_function: None, - transition_delay: None, - }) - } - - let results = try!(input.parse_comma_separated(parse_one_transition)); - let (mut properties, mut durations) = (Vec::new(), Vec::new()); - let (mut timing_functions, mut delays) = (Vec::new(), Vec::new()); - for result in results { - properties.push(result.transition_property); - durations.push(result.transition_duration); - timing_functions.push(result.transition_timing_function); - delays.push(result.transition_delay); - } - - Ok(Longhands { - transition_property: Some(transition_property::SpecifiedValue(properties)), - transition_duration: Some(transition_duration::SpecifiedValue(durations)), - transition_timing_function: - Some(transition_timing_function::SpecifiedValue(timing_functions)), - transition_delay: Some(transition_delay::SpecifiedValue(delays)), - }) - </%self:shorthand> -} - - -// TODO(SimonSapin): Convert this to a syntax extension rather than a Mako template. -// Maybe submit for inclusion in libstd? -mod property_bit_field { - - pub struct PropertyBitField { - storage: [u32; (${len(LONGHANDS)} - 1 + 32) / 32] - } - - impl PropertyBitField { - #[inline] - pub fn new() -> PropertyBitField { - PropertyBitField { storage: [0; (${len(LONGHANDS)} - 1 + 32) / 32] } - } - - #[inline] - fn get(&self, bit: usize) -> bool { - (self.storage[bit / 32] & (1 << (bit % 32))) != 0 - } - #[inline] - fn set(&mut self, bit: usize) { - self.storage[bit / 32] |= 1 << (bit % 32) - } - % for i, property in enumerate(LONGHANDS): - % if not property.derived_from: - #[allow(non_snake_case)] - #[inline] - pub fn get_${property.ident}(&self) -> bool { - self.get(${i}) - } - #[allow(non_snake_case)] - #[inline] - pub fn set_${property.ident}(&mut self) { - self.set(${i}) - } - % endif - % endfor - } -} - -% for property in LONGHANDS: - % if not property.derived_from: - #[allow(non_snake_case)] - fn substitute_variables_${property.ident}<F>( - value: &DeclaredValue<longhands::${property.ident}::SpecifiedValue>, - custom_properties: &Option<Arc<::custom_properties::ComputedValuesMap>>, - f: F, - error_reporter: &mut StdBox<ParseErrorReporter + Send>) - where F: FnOnce(&DeclaredValue<longhands::${property.ident}::SpecifiedValue>) - { - if let DeclaredValue::WithVariables { - ref css, first_token_type, ref base_url, from_shorthand - } = *value { - substitute_variables_${property.ident}_slow(css, - first_token_type, - base_url, - from_shorthand, - custom_properties, - f, - error_reporter); - } else { - f(value); - } - } - - #[allow(non_snake_case)] - #[inline(never)] - fn substitute_variables_${property.ident}_slow<F>( - css: &String, - first_token_type: TokenSerializationType, - base_url: &Url, - from_shorthand: Option<Shorthand>, - custom_properties: &Option<Arc<::custom_properties::ComputedValuesMap>>, - f: F, - error_reporter: &mut StdBox<ParseErrorReporter + Send>) - where F: FnOnce(&DeclaredValue<longhands::${property.ident}::SpecifiedValue>) { - f(& - ::custom_properties::substitute(css, first_token_type, custom_properties) - .and_then(|css| { - // As of this writing, only the base URL is used for property values: - // - // FIXME(pcwalton): Cloning the error reporter is slow! But so are custom - // properties, so whatever... - let context = ParserContext::new( - ::stylesheets::Origin::Author, base_url, (*error_reporter).clone()); - Parser::new(&css).parse_entirely(|input| { - match from_shorthand { - None => { - longhands::${property.ident}::parse_specified(&context, input) - } - % for shorthand in SHORTHANDS: - % if property in shorthand.sub_properties: - Some(Shorthand::${shorthand.camel_case}) => { - shorthands::${shorthand.ident}::parse_value(&context, input) - .map(|result| match result.${property.ident} { - Some(value) => DeclaredValue::Value(value), - None => DeclaredValue::Initial, - }) - } - % endif - % endfor - _ => unreachable!() - } - }) - }) - .unwrap_or( - // Invalid at computed-value time. - DeclaredValue::${"Inherit" if property.style_struct.inherited else "Initial"} - ) - ); - } - % endif -% endfor - -/// Declarations are stored in reverse order. -/// Overridden declarations are skipped. -#[derive(Debug, PartialEq, HeapSizeOf)] -pub struct PropertyDeclarationBlock { - #[ignore_heap_size_of = "#7038"] - pub important: Arc<Vec<PropertyDeclaration>>, - #[ignore_heap_size_of = "#7038"] - pub normal: Arc<Vec<PropertyDeclaration>>, -} - -pub fn parse_style_attribute(input: &str, base_url: &Url, error_reporter: StdBox<ParseErrorReporter + Send>) - -> PropertyDeclarationBlock { - let context = ParserContext::new(Origin::Author, base_url, error_reporter); - parse_property_declaration_list(&context, &mut Parser::new(input)) -} - -pub fn parse_one_declaration(name: &str, input: &str, base_url: &Url, error_reporter: StdBox<ParseErrorReporter + Send>) - -> Result<Vec<PropertyDeclaration>, ()> { - let context = ParserContext::new(Origin::Author, base_url, error_reporter); - let mut results = vec![]; - match PropertyDeclaration::parse(name, &context, &mut Parser::new(input), &mut results) { - PropertyDeclarationParseResult::ValidOrIgnoredDeclaration => Ok(results), - _ => Err(()) - } -} - -struct PropertyDeclarationParser<'a, 'b: 'a> { - context: &'a ParserContext<'b>, -} - - -/// Default methods reject all at rules. -impl<'a, 'b> AtRuleParser for PropertyDeclarationParser<'a, 'b> { - type Prelude = (); - type AtRule = (Vec<PropertyDeclaration>, bool); -} - - -impl<'a, 'b> DeclarationParser for PropertyDeclarationParser<'a, 'b> { - type Declaration = (Vec<PropertyDeclaration>, bool); - - fn parse_value(&self, name: &str, input: &mut Parser) -> Result<(Vec<PropertyDeclaration>, bool), ()> { - let mut results = vec![]; - try!(input.parse_until_before(Delimiter::Bang, |input| { - match PropertyDeclaration::parse(name, self.context, input, &mut results) { - PropertyDeclarationParseResult::ValidOrIgnoredDeclaration => Ok(()), - _ => Err(()) - } - })); - let important = input.try(parse_important).is_ok(); - Ok((results, important)) - } -} - - -pub fn parse_property_declaration_list(context: &ParserContext, input: &mut Parser) - -> PropertyDeclarationBlock { - let mut important_declarations = Vec::new(); - let mut normal_declarations = Vec::new(); - let parser = PropertyDeclarationParser { - context: context, - }; - let mut iter = DeclarationListParser::new(input, parser); - while let Some(declaration) = iter.next() { - match declaration { - Ok((results, important)) => { - if important { - important_declarations.extend(results); - } else { - normal_declarations.extend(results); - } - } - Err(range) => { - let pos = range.start; - let message = format!("Unsupported property declaration: '{}'", - iter.input.slice(range)); - log_css_error(iter.input, pos, &*message, &context); - } - } - } - PropertyDeclarationBlock { - important: Arc::new(deduplicate_property_declarations(important_declarations)), - normal: Arc::new(deduplicate_property_declarations(normal_declarations)), - } -} - - -/// Only keep the last declaration for any given property. -/// The input is in source order, output in reverse source order. -fn deduplicate_property_declarations(declarations: Vec<PropertyDeclaration>) - -> Vec<PropertyDeclaration> { - let mut deduplicated = vec![]; - let mut seen = PropertyBitField::new(); - let mut seen_custom = Vec::new(); - for declaration in declarations.into_iter().rev() { - match declaration { - % for property in LONGHANDS: - PropertyDeclaration::${property.camel_case}(..) => { - % if not property.derived_from: - if seen.get_${property.ident}() { - continue - } - seen.set_${property.ident}() - % else: - unreachable!(); - % endif - }, - % endfor - PropertyDeclaration::Custom(ref name, _) => { - if seen_custom.contains(name) { - continue - } - seen_custom.push(name.clone()) - } - } - deduplicated.push(declaration) - } - deduplicated -} - - -#[derive(Copy, Clone, PartialEq, Eq, Debug)] -pub enum CSSWideKeyword { - InitialKeyword, - InheritKeyword, - UnsetKeyword, -} - -impl CSSWideKeyword { - pub fn parse(input: &mut Parser) -> Result<CSSWideKeyword, ()> { - match_ignore_ascii_case! { try!(input.expect_ident()), - "initial" => Ok(CSSWideKeyword::InitialKeyword), - "inherit" => Ok(CSSWideKeyword::InheritKeyword), - "unset" => Ok(CSSWideKeyword::UnsetKeyword), - _ => Err(()) - } - } -} - -#[derive(Clone, Copy, Eq, PartialEq, Debug, HeapSizeOf)] -pub enum Shorthand { - % for property in SHORTHANDS: - ${property.camel_case}, - % endfor -} - -impl Shorthand { - pub fn from_name(name: &str) -> Option<Shorthand> { - match_ignore_ascii_case! { name, - % for property in SHORTHANDS: - "${property.name}" => Some(Shorthand::${property.camel_case}), - % endfor - _ => None - } - } - - pub fn longhands(&self) -> &'static [&'static str] { - % for property in SHORTHANDS: - static ${property.ident.upper()}: &'static [&'static str] = &[ - % for sub in property.sub_properties: - "${sub.name}", - % endfor - ]; - % endfor - match *self { - % for property in SHORTHANDS: - Shorthand::${property.camel_case} => ${property.ident.upper()}, - % endfor - } - } -} - -#[derive(Clone, PartialEq, Eq, Debug, HeapSizeOf)] -pub enum DeclaredValue<T> { - Value(T), - WithVariables { - css: String, - first_token_type: TokenSerializationType, - base_url: Url, - from_shorthand: Option<Shorthand>, - }, - Initial, - Inherit, - // There is no Unset variant here. - // The 'unset' keyword is represented as either Initial or Inherit, - // depending on whether the property is inherited. -} - -impl<T: ToCss> ToCss for DeclaredValue<T> { - fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match *self { - DeclaredValue::Value(ref inner) => inner.to_css(dest), - DeclaredValue::WithVariables { ref css, from_shorthand: None, .. } => { - dest.write_str(css) - } - // https://drafts.csswg.org/css-variables/#variables-in-shorthands - DeclaredValue::WithVariables { .. } => Ok(()), - DeclaredValue::Initial => dest.write_str("initial"), - DeclaredValue::Inherit => dest.write_str("inherit"), - } - } -} - -#[derive(PartialEq, Clone, Debug, HeapSizeOf)] -pub enum PropertyDeclaration { - % for property in LONGHANDS: - ${property.camel_case}(DeclaredValue<longhands::${property.ident}::SpecifiedValue>), - % endfor - Custom(::custom_properties::Name, DeclaredValue<::custom_properties::SpecifiedValue>), -} - - -#[derive(Eq, PartialEq, Copy, Clone)] -pub enum PropertyDeclarationParseResult { - UnknownProperty, - ExperimentalProperty, - InvalidValue, - ValidOrIgnoredDeclaration, -} - -#[derive(Eq, PartialEq, Clone)] -pub enum PropertyDeclarationName { - Longhand(&'static str), - Custom(::custom_properties::Name), - Internal -} - -impl PartialEq<str> for PropertyDeclarationName { - fn eq(&self, other: &str) -> bool { - match *self { - PropertyDeclarationName::Longhand(n) => n == other, - PropertyDeclarationName::Custom(ref n) => { - ::custom_properties::parse_name(other) == Ok(&**n) - } - PropertyDeclarationName::Internal => false, - } - } -} - -impl fmt::Display for PropertyDeclarationName { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match *self { - PropertyDeclarationName::Longhand(n) => f.write_str(n), - PropertyDeclarationName::Custom(ref n) => { - try!(f.write_str("--")); - f.write_str(n) - } - PropertyDeclarationName::Internal => Ok(()), - } - } -} - -impl PropertyDeclaration { - pub fn name(&self) -> PropertyDeclarationName { - match *self { - % for property in LONGHANDS: - PropertyDeclaration::${property.camel_case}(..) => - % if not property.derived_from: - PropertyDeclarationName::Longhand("${property.name}"), - % else: - PropertyDeclarationName::Internal, - % endif - % endfor - PropertyDeclaration::Custom(ref name, _) => { - PropertyDeclarationName::Custom(name.clone()) - } - } - } - - pub fn value(&self) -> String { - match *self { - % for property in LONGHANDS: - PropertyDeclaration::${property.camel_case} - % if not property.derived_from: - (ref value) => value.to_css_string(), - % else: - (_) => panic!("unsupported property declaration: ${property.name}"), - % endif - % endfor - PropertyDeclaration::Custom(_, ref value) => value.to_css_string(), - } - } - - /// If this is a pending-substitution value from the given shorthand, return that value - // Extra space here because < seems to be removed by Mako when immediately followed by &. - // ↓ - pub fn with_variables_from_shorthand(&self, shorthand: Shorthand) -> Option< &str> { - match *self { - % for property in LONGHANDS: - PropertyDeclaration::${property.camel_case}(ref value) => match *value { - DeclaredValue::WithVariables { ref css, from_shorthand: Some(s), .. } - if s == shorthand => { - Some(&**css) - } - _ => None - }, - % endfor - PropertyDeclaration::Custom(..) => None, - } - } - - /// Return whether this is a pending-substitution value. - /// https://drafts.csswg.org/css-variables/#variables-in-shorthands - pub fn with_variables(&self) -> bool { - match *self { - % for property in LONGHANDS: - PropertyDeclaration::${property.camel_case}(ref value) => match *value { - DeclaredValue::WithVariables { .. } => true, - _ => false, - }, - % endfor - PropertyDeclaration::Custom(_, ref value) => match *value { - DeclaredValue::WithVariables { .. } => true, - _ => false, - } - } - } - - pub fn matches(&self, name: &str) -> bool { - match *self { - % for property in LONGHANDS: - PropertyDeclaration::${property.camel_case}(..) => - % if not property.derived_from: - name.eq_ignore_ascii_case("${property.name}"), - % else: - false, - % endif - % endfor - PropertyDeclaration::Custom(ref declaration_name, _) => { - ::custom_properties::parse_name(name) == Ok(&**declaration_name) - } - } - } - - pub fn parse(name: &str, context: &ParserContext, input: &mut Parser, - result_list: &mut Vec<PropertyDeclaration>) -> PropertyDeclarationParseResult { - if let Ok(name) = ::custom_properties::parse_name(name) { - let value = match input.try(CSSWideKeyword::parse) { - Ok(CSSWideKeyword::UnsetKeyword) | // Custom properties are alawys inherited - Ok(CSSWideKeyword::InheritKeyword) => DeclaredValue::Inherit, - Ok(CSSWideKeyword::InitialKeyword) => DeclaredValue::Initial, - Err(()) => match ::custom_properties::parse(input) { - Ok(value) => DeclaredValue::Value(value), - Err(()) => return PropertyDeclarationParseResult::InvalidValue, - } - }; - result_list.push(PropertyDeclaration::Custom(Atom::from(name), value)); - return PropertyDeclarationParseResult::ValidOrIgnoredDeclaration; - } - match_ignore_ascii_case! { name, - % for property in LONGHANDS: - % if not property.derived_from: - "${property.name}" => { - % if property.internal: - if context.stylesheet_origin != Origin::UserAgent { - return PropertyDeclarationParseResult::UnknownProperty - } - % endif - % if property.experimental: - if !::util::prefs::get_pref("${property.experimental}") - .as_boolean().unwrap_or(false) { - return PropertyDeclarationParseResult::ExperimentalProperty - } - % endif - match longhands::${property.ident}::parse_declared(context, input) { - Ok(value) => { - result_list.push(PropertyDeclaration::${property.camel_case}(value)); - PropertyDeclarationParseResult::ValidOrIgnoredDeclaration - }, - Err(()) => PropertyDeclarationParseResult::InvalidValue, - } - }, - % else: - "${property.name}" => PropertyDeclarationParseResult::UnknownProperty, - % endif - % endfor - % for shorthand in SHORTHANDS: - "${shorthand.name}" => { - % if shorthand.internal: - if context.stylesheet_origin != Origin::UserAgent { - return PropertyDeclarationParseResult::UnknownProperty - } - % endif - % if shorthand.experimental: - if !::util::prefs::get_pref("${shorthand.experimental}") - .as_boolean().unwrap_or(false) { - return PropertyDeclarationParseResult::ExperimentalProperty - } - % endif - match input.try(CSSWideKeyword::parse) { - Ok(CSSWideKeyword::InheritKeyword) => { - % for sub_property in shorthand.sub_properties: - result_list.push( - PropertyDeclaration::${sub_property.camel_case}( - DeclaredValue::Inherit)); - % endfor - PropertyDeclarationParseResult::ValidOrIgnoredDeclaration - }, - Ok(CSSWideKeyword::InitialKeyword) => { - % for sub_property in shorthand.sub_properties: - result_list.push( - PropertyDeclaration::${sub_property.camel_case}( - DeclaredValue::Initial)); - % endfor - PropertyDeclarationParseResult::ValidOrIgnoredDeclaration - }, - Ok(CSSWideKeyword::UnsetKeyword) => { - % for sub_property in shorthand.sub_properties: - result_list.push(PropertyDeclaration::${sub_property.camel_case}( - DeclaredValue::${"Inherit" if sub_property.style_struct.inherited else "Initial"} - )); - % endfor - PropertyDeclarationParseResult::ValidOrIgnoredDeclaration - }, - Err(()) => match shorthands::${shorthand.ident}::parse(context, input, result_list) { - Ok(()) => PropertyDeclarationParseResult::ValidOrIgnoredDeclaration, - Err(()) => PropertyDeclarationParseResult::InvalidValue, - } - } - }, - % endfor - - _ => PropertyDeclarationParseResult::UnknownProperty - } - } -} - -pub mod style_struct_traits { - use super::longhands; - - % for style_struct in active_style_structs(): - pub trait ${style_struct.trait_name}: Clone { - % for longhand in style_struct.longhands: - #[allow(non_snake_case)] - fn set_${longhand.ident}(&mut self, v: longhands::${longhand.ident}::computed_value::T); - #[allow(non_snake_case)] - fn copy_${longhand.ident}_from(&mut self, other: &Self); - % endfor - % for additional in style_struct.additional_methods: - #[allow(non_snake_case)] - ${additional.declare()} - % endfor - } - % endfor -} - -pub mod style_structs { - use fnv::FnvHasher; - use super::longhands; - use std::hash::{Hash, Hasher}; - - % for style_struct in active_style_structs(): - % if style_struct.trait_name == "Font": - #[derive(Clone, HeapSizeOf, Debug)] - % else: - #[derive(PartialEq, Clone, HeapSizeOf)] - % endif - pub struct ${style_struct.servo_struct_name} { - % for longhand in style_struct.longhands: - pub ${longhand.ident}: longhands::${longhand.ident}::computed_value::T, - % endfor - % if style_struct.trait_name == "Font": - pub hash: u64, - % endif - } - % if style_struct.trait_name == "Font": - - impl PartialEq for ${style_struct.servo_struct_name} { - fn eq(&self, other: &${style_struct.servo_struct_name}) -> bool { - self.hash == other.hash - % for longhand in style_struct.longhands: - && self.${longhand.ident} == other.${longhand.ident} - % endfor - } - } - % endif - - impl super::style_struct_traits::${style_struct.trait_name} for ${style_struct.servo_struct_name} { - % for longhand in style_struct.longhands: - fn set_${longhand.ident}(&mut self, v: longhands::${longhand.ident}::computed_value::T) { - self.${longhand.ident} = v; - } - fn copy_${longhand.ident}_from(&mut self, other: &Self) { - self.${longhand.ident} = other.${longhand.ident}.clone(); - } - % endfor - % if style_struct.trait_name == "Border": - % for side in ["top", "right", "bottom", "left"]: - fn border_${side}_is_none_or_hidden_and_has_nonzero_width(&self) -> bool { - self.border_${side}_style.none_or_hidden() && - self.border_${side}_width != ::app_units::Au(0) - } - % endfor - % elif style_struct.trait_name == "Box": - fn clone_display(&self) -> longhands::display::computed_value::T { - self.display.clone() - } - fn clone_position(&self) -> longhands::position::computed_value::T { - self.position.clone() - } - fn is_floated(&self) -> bool { - self.float != longhands::float::SpecifiedValue::none - } - fn overflow_x_is_visible(&self) -> bool { - self.overflow_x == longhands::overflow_x::computed_value::T::visible - } - fn overflow_y_is_visible(&self) -> bool { - self.overflow_y.0 == longhands::overflow_x::computed_value::T::visible - } - fn transition_count(&self) -> usize { - self.transition_property.0.len() - } - % elif style_struct.trait_name == "Color": - fn clone_color(&self) -> longhands::color::computed_value::T { - self.color.clone() - } - % elif style_struct.trait_name == "Font": - fn clone_font_size(&self) -> longhands::font_size::computed_value::T { - self.font_size.clone() - } - fn clone_font_weight(&self) -> longhands::font_weight::computed_value::T { - self.font_weight.clone() - } - fn compute_font_hash(&mut self) { - // Corresponds to the fields in `gfx::font_template::FontTemplateDescriptor`. - let mut hasher: FnvHasher = Default::default(); - hasher.write_u16(self.font_weight as u16); - self.font_stretch.hash(&mut hasher); - self.font_family.hash(&mut hasher); - self.hash = hasher.finish() - } - % elif style_struct.trait_name == "InheritedBox": - fn clone_direction(&self) -> longhands::direction::computed_value::T { - self.direction.clone() - } - fn clone_writing_mode(&self) -> longhands::writing_mode::computed_value::T { - self.writing_mode.clone() - } - fn clone_text_orientation(&self) -> longhands::text_orientation::computed_value::T { - self.text_orientation.clone() - } - % elif style_struct.trait_name == "InheritedText" and CONFIG["product"] == "servo": - fn clone__servo_text_decorations_in_effect(&self) -> - longhands::_servo_text_decorations_in_effect::computed_value::T { - self._servo_text_decorations_in_effect.clone() - } - % elif style_struct.trait_name == "Outline": - fn outline_is_none_or_hidden_and_has_nonzero_width(&self) -> bool { - self.outline_style.none_or_hidden() && self.outline_width != ::app_units::Au(0) - } - % elif style_struct.trait_name == "Text": - fn has_underline(&self) -> bool { - self.text_decoration.underline - } - fn has_overline(&self) -> bool { - self.text_decoration.overline - } - fn has_line_through(&self) -> bool { - self.text_decoration.line_through - } - % endif - } - - % endfor -} - -pub trait ComputedValues : Clone + Send + Sync + 'static { - % for style_struct in active_style_structs(): - type Concrete${style_struct.trait_name}: style_struct_traits::${style_struct.trait_name}; - % endfor - - // Temporary bailout case for stuff we haven't made work with the trait - // yet - panics for non-Servo implementations. - // - // Used only for animations. Don't use it in other places. - fn as_servo<'a>(&'a self) -> &'a ServoComputedValues; - fn as_servo_mut<'a>(&'a mut self) -> &'a mut ServoComputedValues; - - fn new(custom_properties: Option<Arc<::custom_properties::ComputedValuesMap>>, - shareable: bool, - writing_mode: WritingMode, - root_font_size: Au, - % for style_struct in active_style_structs(): - ${style_struct.ident}: Arc<Self::Concrete${style_struct.trait_name}>, - % endfor - ) -> Self; - - fn initial_values() -> &'static Self; - - fn do_cascade_property<F: FnOnce(&Vec<Option<CascadePropertyFn<Self>>>)>(f: F); - - % for style_struct in active_style_structs(): - fn clone_${style_struct.trait_name_lower}(&self) -> - Arc<Self::Concrete${style_struct.trait_name}>; - fn get_${style_struct.trait_name_lower}<'a>(&'a self) -> - &'a Self::Concrete${style_struct.trait_name}; - fn mutate_${style_struct.trait_name_lower}<'a>(&'a mut self) -> - &'a mut Self::Concrete${style_struct.trait_name}; - % endfor - - fn custom_properties(&self) -> Option<Arc<::custom_properties::ComputedValuesMap>>; - fn root_font_size(&self) -> Au; - fn set_root_font_size(&mut self, size: Au); - fn set_writing_mode(&mut self, mode: WritingMode); - fn is_multicol(&self) -> bool; -} - -#[derive(Clone, HeapSizeOf)] -pub struct ServoComputedValues { - % for style_struct in active_style_structs(): - ${style_struct.ident}: Arc<style_structs::${style_struct.servo_struct_name}>, - % endfor - custom_properties: Option<Arc<::custom_properties::ComputedValuesMap>>, - shareable: bool, - pub writing_mode: WritingMode, - pub root_font_size: Au, -} - -impl ComputedValues for ServoComputedValues { - % for style_struct in active_style_structs(): - type Concrete${style_struct.trait_name} = style_structs::${style_struct.servo_struct_name}; - % endfor - - fn as_servo<'a>(&'a self) -> &'a ServoComputedValues { self } - fn as_servo_mut<'a>(&'a mut self) -> &'a mut ServoComputedValues { self } - - fn new(custom_properties: Option<Arc<::custom_properties::ComputedValuesMap>>, - shareable: bool, - writing_mode: WritingMode, - root_font_size: Au, - % for style_struct in active_style_structs(): - ${style_struct.ident}: Arc<style_structs::${style_struct.servo_struct_name}>, - % endfor - ) -> Self { - ServoComputedValues { - custom_properties: custom_properties, - shareable: shareable, - writing_mode: writing_mode, - root_font_size: root_font_size, - % for style_struct in active_style_structs(): - ${style_struct.ident}: ${style_struct.ident}, - % endfor - } - } - - fn initial_values() -> &'static Self { &*INITIAL_SERVO_VALUES } - - fn do_cascade_property<F: FnOnce(&Vec<Option<CascadePropertyFn<Self>>>)>(f: F) { - CASCADE_PROPERTY.with(|x| f(x)); - } - - % for style_struct in active_style_structs(): - #[inline] - fn clone_${style_struct.trait_name_lower}(&self) -> - Arc<Self::Concrete${style_struct.trait_name}> { - self.${style_struct.ident}.clone() - } - #[inline] - fn get_${style_struct.trait_name_lower}<'a>(&'a self) -> - &'a Self::Concrete${style_struct.trait_name} { - &self.${style_struct.ident} - } - #[inline] - fn mutate_${style_struct.trait_name_lower}<'a>(&'a mut self) -> - &'a mut Self::Concrete${style_struct.trait_name} { - Arc::make_mut(&mut self.${style_struct.ident}) - } - % endfor - - // Cloning the Arc here is fine because it only happens in the case where we have custom - // properties, and those are both rare and expensive. - fn custom_properties(&self) -> Option<Arc<::custom_properties::ComputedValuesMap>> { - self.custom_properties.as_ref().map(|x| x.clone()) - } - - fn root_font_size(&self) -> Au { self.root_font_size } - fn set_root_font_size(&mut self, size: Au) { self.root_font_size = size } - fn set_writing_mode(&mut self, mode: WritingMode) { self.writing_mode = mode; } - - #[inline] - fn is_multicol(&self) -> bool { - let style = self.get_column(); - style.column_count.0.is_some() || style.column_width.0.is_some() - } -} - -impl ServoComputedValues { - /// Resolves the currentColor keyword. - /// Any color value form computed values (except for the 'color' property itself) - /// should go through this method. - /// - /// Usage example: - /// let top_color = style.resolve_color(style.Border.border_top_color); - #[inline] - pub fn resolve_color(&self, color: CSSParserColor) -> RGBA { - match color { - CSSParserColor::RGBA(rgba) => rgba, - CSSParserColor::CurrentColor => self.get_color().color, - } - } - - #[inline] - pub fn content_inline_size(&self) -> computed::LengthOrPercentageOrAuto { - let box_style = self.get_box(); - if self.writing_mode.is_vertical() { - box_style.height - } else { - box_style.width - } - } - - #[inline] - pub fn content_block_size(&self) -> computed::LengthOrPercentageOrAuto { - let box_style = self.get_box(); - if self.writing_mode.is_vertical() { box_style.width } else { box_style.height } - } - - #[inline] - pub fn min_inline_size(&self) -> computed::LengthOrPercentage { - let position_style = self.get_position(); - if self.writing_mode.is_vertical() { position_style.min_height } else { position_style.min_width } - } - - #[inline] - pub fn min_block_size(&self) -> computed::LengthOrPercentage { - let position_style = self.get_position(); - if self.writing_mode.is_vertical() { position_style.min_width } else { position_style.min_height } - } - - #[inline] - pub fn max_inline_size(&self) -> computed::LengthOrPercentageOrNone { - let position_style = self.get_position(); - if self.writing_mode.is_vertical() { position_style.max_height } else { position_style.max_width } - } - - #[inline] - pub fn max_block_size(&self) -> computed::LengthOrPercentageOrNone { - let position_style = self.get_position(); - if self.writing_mode.is_vertical() { position_style.max_width } else { position_style.max_height } - } - - #[inline] - pub fn logical_padding(&self) -> LogicalMargin<computed::LengthOrPercentage> { - let padding_style = self.get_padding(); - LogicalMargin::from_physical(self.writing_mode, SideOffsets2D::new( - padding_style.padding_top, - padding_style.padding_right, - padding_style.padding_bottom, - padding_style.padding_left, - )) - } - - #[inline] - pub fn logical_border_width(&self) -> LogicalMargin<Au> { - let border_style = self.get_border(); - LogicalMargin::from_physical(self.writing_mode, SideOffsets2D::new( - border_style.border_top_width, - border_style.border_right_width, - border_style.border_bottom_width, - border_style.border_left_width, - )) - } - - #[inline] - pub fn logical_margin(&self) -> LogicalMargin<computed::LengthOrPercentageOrAuto> { - let margin_style = self.get_margin(); - LogicalMargin::from_physical(self.writing_mode, SideOffsets2D::new( - margin_style.margin_top, - margin_style.margin_right, - margin_style.margin_bottom, - margin_style.margin_left, - )) - } - - #[inline] - pub fn logical_position(&self) -> LogicalMargin<computed::LengthOrPercentageOrAuto> { - // FIXME(SimonSapin): should be the writing mode of the containing block, maybe? - let position_style = self.get_position(); - LogicalMargin::from_physical(self.writing_mode, SideOffsets2D::new( - position_style.top, - position_style.right, - position_style.bottom, - position_style.left, - )) - } - - #[inline] - pub fn get_font_arc(&self) -> Arc<style_structs::ServoFont> { - self.font.clone() - } - - // http://dev.w3.org/csswg/css-transforms/#grouping-property-values - pub fn get_used_transform_style(&self) -> computed_values::transform_style::T { - use computed_values::mix_blend_mode; - use computed_values::transform_style; - - let effects = self.get_effects(); - - // TODO(gw): Add clip-path, isolation, mask-image, mask-border-source when supported. - if effects.opacity < 1.0 || - !effects.filter.is_empty() || - effects.clip.0.is_some() { - effects.mix_blend_mode != mix_blend_mode::T::normal || - return transform_style::T::flat; - } - - if effects.transform_style == transform_style::T::auto { - if effects.transform.0.is_some() { - return transform_style::T::flat; - } - if effects.perspective != computed::LengthOrNone::None { - return transform_style::T::flat; - } - } - - // Return the computed value if not overridden by the above exceptions - effects.transform_style - } - - pub fn transform_requires_layer(&self) -> bool { - // Check if the transform matrix is 2D or 3D - if let Some(ref transform_list) = self.get_effects().transform.0 { - for transform in transform_list { - match *transform { - computed_values::transform::ComputedOperation::Perspective(..) => { - return true; - } - computed_values::transform::ComputedOperation::Matrix(m) => { - // See http://dev.w3.org/csswg/css-transforms/#2d-matrix - if m.m31 != 0.0 || m.m32 != 0.0 || - m.m13 != 0.0 || m.m23 != 0.0 || - m.m43 != 0.0 || m.m14 != 0.0 || - m.m24 != 0.0 || m.m34 != 0.0 || - m.m33 != 1.0 || m.m44 != 1.0 { - return true; - } - } - computed_values::transform::ComputedOperation::Translate(_, _, z) => { - if z != Au(0) { - return true; - } - } - _ => {} - } - } - } - - // Neither perspective nor transform present - false - } - - pub fn computed_value_to_string(&self, name: &str) -> Result<String, ()> { - match name { - % for style_struct in active_style_structs(): - % for longhand in style_struct.longhands: - "${longhand.name}" => Ok(self.${style_struct.ident}.${longhand.ident}.to_css_string()), - % endfor - % endfor - _ => { - let name = try!(::custom_properties::parse_name(name)); - let map = try!(self.custom_properties.as_ref().ok_or(())); - let value = try!(map.get(&Atom::from(name)).ok_or(())); - Ok(value.to_css_string()) - } - } - } -} - - -/// Return a WritingMode bitflags from the relevant CSS properties. -pub fn get_writing_mode<S: style_struct_traits::InheritedBox>(inheritedbox_style: &S) -> WritingMode { - use logical_geometry; - let mut flags = WritingMode::empty(); - match inheritedbox_style.clone_direction() { - computed_values::direction::T::ltr => {}, - computed_values::direction::T::rtl => { - flags.insert(logical_geometry::FLAG_RTL); - }, - } - match inheritedbox_style.clone_writing_mode() { - computed_values::writing_mode::T::horizontal_tb => {}, - computed_values::writing_mode::T::vertical_rl => { - flags.insert(logical_geometry::FLAG_VERTICAL); - }, - computed_values::writing_mode::T::vertical_lr => { - flags.insert(logical_geometry::FLAG_VERTICAL); - flags.insert(logical_geometry::FLAG_VERTICAL_LR); - }, - } - match inheritedbox_style.clone_text_orientation() { - computed_values::text_orientation::T::sideways_right => {}, - computed_values::text_orientation::T::sideways_left => { - flags.insert(logical_geometry::FLAG_VERTICAL_LR); - }, - computed_values::text_orientation::T::sideways => { - if flags.intersects(logical_geometry::FLAG_VERTICAL_LR) { - flags.insert(logical_geometry::FLAG_SIDEWAYS_LEFT); - } - }, - } - flags -} - - -/// The initial values for all style structs as defined by the specification. -lazy_static! { - pub static ref INITIAL_SERVO_VALUES: ServoComputedValues = ServoComputedValues { - % for style_struct in active_style_structs(): - ${style_struct.ident}: Arc::new(style_structs::${style_struct.servo_struct_name} { - % for longhand in style_struct.longhands: - ${longhand.ident}: longhands::${longhand.ident}::get_initial_value(), - % endfor - % if style_struct.trait_name == "Font": - hash: 0, - % endif - }), - % endfor - custom_properties: None, - shareable: true, - writing_mode: WritingMode::empty(), - root_font_size: longhands::font_size::get_initial_value(), - }; -} - - -/// Fast path for the function below. Only computes new inherited styles. -#[allow(unused_mut, unused_imports)] -fn cascade_with_cached_declarations<C: ComputedValues>( - viewport_size: Size2D<Au>, - applicable_declarations: &[DeclarationBlock<Vec<PropertyDeclaration>>], - shareable: bool, - parent_style: &C, - cached_style: &C, - custom_properties: Option<Arc<::custom_properties::ComputedValuesMap>>, - mut error_reporter: StdBox<ParseErrorReporter + Send>) - -> C { - let mut context = computed::Context { - is_root_element: false, - viewport_size: viewport_size, - inherited_style: parent_style, - style: C::new( - custom_properties, - shareable, - WritingMode::empty(), - parent_style.root_font_size(), - % for style_struct in active_style_structs(): - % if style_struct.inherited: - parent_style - % else: - cached_style - % endif - .clone_${style_struct.trait_name_lower}(), - % endfor - ), - }; - let mut seen = PropertyBitField::new(); - // Declaration blocks are stored in increasing precedence order, - // we want them in decreasing order here. - for sub_list in applicable_declarations.iter().rev() { - // Declarations are already stored in reverse order. - for declaration in sub_list.declarations.iter() { - match *declaration { - % for style_struct in active_style_structs(): - % for property in style_struct.longhands: - % if not property.derived_from: - PropertyDeclaration::${property.camel_case}(ref - ${'_' if not style_struct.inherited else ''}declared_value) - => { - use properties::style_struct_traits::${style_struct.trait_name}; - % if style_struct.inherited: - if seen.get_${property.ident}() { - continue - } - seen.set_${property.ident}(); - let custom_props = context.style().custom_properties(); - substitute_variables_${property.ident}( - declared_value, &custom_props, - |value| match *value { - DeclaredValue::Value(ref specified_value) - => { - let computed = specified_value.to_computed_value(&context); - context.mutate_style().mutate_${style_struct.trait_name_lower}() - .set_${property.ident}(computed); - }, - DeclaredValue::Initial - => { - // FIXME(bholley): We may want set_X_to_initial_value() here. - let initial = longhands::${property.ident}::get_initial_value(); - context.mutate_style().mutate_${style_struct.trait_name_lower}() - .set_${property.ident}(initial); - }, - DeclaredValue::Inherit => { - // This is a bit slow, but this is rare so it shouldn't - // matter. - // - // FIXME: is it still? - let inherited_struct = parent_style.get_${style_struct.ident}(); - context.mutate_style().mutate_${style_struct.trait_name_lower}() - .copy_${property.ident}_from(inherited_struct); - } - DeclaredValue::WithVariables { .. } => unreachable!() - }, &mut error_reporter - ); - % endif - - % if property.name in DERIVED_LONGHANDS: - % for derived in DERIVED_LONGHANDS[property.name]: - longhands::${derived.ident} - ::derive_from_${property.ident}(&mut context); - % endfor - % endif - } - % else: - PropertyDeclaration::${property.camel_case}(_) => { - // Do not allow stylesheets to set derived properties. - } - % endif - % endfor - % endfor - PropertyDeclaration::Custom(..) => {} - } - } - } - - if seen.get_font_style() || seen.get_font_weight() || seen.get_font_stretch() || - seen.get_font_family() { - use properties::style_struct_traits::Font; - context.mutate_style().mutate_font().compute_font_hash(); - } - - context.style -} - -pub type CascadePropertyFn<C /*: ComputedValues */> = - extern "Rust" fn(declaration: &PropertyDeclaration, - inherited_style: &C, - context: &mut computed::Context<C>, - seen: &mut PropertyBitField, - cacheable: &mut bool, - error_reporter: &mut StdBox<ParseErrorReporter + Send>); - -pub fn make_cascade_vec<C: ComputedValues>() -> Vec<Option<CascadePropertyFn<C>>> { - let mut result: Vec<Option<CascadePropertyFn<C>>> = Vec::new(); - % for style_struct in active_style_structs(): - % for property in style_struct.longhands: - let discriminant; - unsafe { - let variant = PropertyDeclaration::${property.camel_case}(intrinsics::uninit()); - discriminant = intrinsics::discriminant_value(&variant) as usize; - mem::forget(variant); - } - while result.len() < discriminant + 1 { - result.push(None) - } - result[discriminant] = Some(longhands::${property.ident}::cascade_property); - % endfor - % endfor - result -} - -// This is a thread-local rather than a lazy static to avoid atomic operations when cascading -// properties. -thread_local!(static CASCADE_PROPERTY: Vec<Option<CascadePropertyFn<ServoComputedValues>>> = { - make_cascade_vec::<ServoComputedValues>() -}); - -/// Performs the CSS cascade, computing new styles for an element from its parent style and -/// optionally a cached related style. The arguments are: -/// -/// * `viewport_size`: The size of the initial viewport. -/// -/// * `applicable_declarations`: The list of CSS rules that matched. -/// -/// * `shareable`: Whether the `ComputedValues` structure to be constructed should be considered -/// shareable. -/// -/// * `parent_style`: The parent style, if applicable; if `None`, this is the root node. -/// -/// * `cached_style`: If present, cascading is short-circuited for everything but inherited -/// values and these values are used instead. Obviously, you must be careful when supplying -/// this that it is safe to only provide inherited declarations. If `parent_style` is `None`, -/// this is ignored. -/// -/// Returns the computed values and a boolean indicating whether the result is cacheable. -pub fn cascade<C: ComputedValues>( - viewport_size: Size2D<Au>, - applicable_declarations: &[DeclarationBlock<Vec<PropertyDeclaration>>], - shareable: bool, - parent_style: Option<<&C>, - cached_style: Option<<&C>, - mut error_reporter: StdBox<ParseErrorReporter + Send>) - -> (C, bool) { - use properties::style_struct_traits::{Border, Box, Color, Font, Outline}; - let initial_values = C::initial_values(); - let (is_root_element, inherited_style) = match parent_style { - Some(parent_style) => (false, parent_style), - None => (true, initial_values), - }; - - let inherited_custom_properties = inherited_style.custom_properties(); - let mut custom_properties = None; - let mut seen_custom = HashSet::new(); - for sub_list in applicable_declarations.iter().rev() { - // Declarations are already stored in reverse order. - for declaration in sub_list.declarations.iter() { - match *declaration { - PropertyDeclaration::Custom(ref name, ref value) => { - ::custom_properties::cascade( - &mut custom_properties, &inherited_custom_properties, - &mut seen_custom, name, value) - } - _ => {} - } - } - } - let custom_properties = ::custom_properties::finish_cascade( - custom_properties, &inherited_custom_properties); - - if let (Some(cached_style), Some(parent_style)) = (cached_style, parent_style) { - let style = cascade_with_cached_declarations(viewport_size, - applicable_declarations, - shareable, - parent_style, - cached_style, - custom_properties, - error_reporter); - return (style, false) - } - - let mut context = computed::Context { - is_root_element: is_root_element, - viewport_size: viewport_size, - inherited_style: inherited_style, - style: C::new( - custom_properties, - shareable, - WritingMode::empty(), - inherited_style.root_font_size(), - % for style_struct in active_style_structs(): - % if style_struct.inherited: - inherited_style - % else: - initial_values - % endif - .clone_${style_struct.trait_name_lower}(), - % endfor - ), - }; - - // Set computed values, overwriting earlier declarations for the same property. - let mut cacheable = true; - let mut seen = PropertyBitField::new(); - // Declaration blocks are stored in increasing precedence order, we want them in decreasing - // order here. - // - // We could (and used to) use a pattern match here, but that bloats this function to over 100K - // of compiled code! To improve i-cache behavior, we outline the individual functions and use - // virtual dispatch instead. - C::do_cascade_property(|cascade_property| { - % for category_to_cascade_now in ["early", "other"]: - for sub_list in applicable_declarations.iter().rev() { - // Declarations are already stored in reverse order. - for declaration in sub_list.declarations.iter() { - if let PropertyDeclaration::Custom(..) = *declaration { - continue - } - // The computed value of some properties depends on the (sometimes computed) - // value of *other* properties. - // So we classify properties into "early" and "other", - // such that the only dependencies can be from "other" to "early". - // We iterate applicable_declarations twice, first cascading "early" properties - // then "other". - // Unfortunately, it’s not easy to check that this classification is correct. - let is_early_property = matches!(*declaration, - PropertyDeclaration::FontSize(_) | - PropertyDeclaration::Color(_) | - PropertyDeclaration::Position(_) | - PropertyDeclaration::Float(_) | - PropertyDeclaration::TextDecoration(_) - ); - if - % if category_to_cascade_now == "early": - ! - % endif - is_early_property - { - continue - } - let discriminant = unsafe { - intrinsics::discriminant_value(declaration) as usize - }; - (cascade_property[discriminant].unwrap())(declaration, - inherited_style, - &mut context, - &mut seen, - &mut cacheable, - &mut error_reporter); - } - } - % endfor - }); - - let mut style = context.style; - - let positioned = matches!(style.get_box().clone_position(), - longhands::position::SpecifiedValue::absolute | - longhands::position::SpecifiedValue::fixed); - let floated = style.get_box().is_floated(); - if positioned || floated || is_root_element { - use computed_values::display::T; - - let specified_display = style.get_box().clone_display(); - let computed_display = match specified_display { - T::inline_table => { - Some(T::table) - } - T::inline | T::inline_block | - T::table_row_group | T::table_column | - T::table_column_group | T::table_header_group | - T::table_footer_group | T::table_row | T::table_cell | - T::table_caption => { - Some(T::block) - } - _ => None - }; - if let Some(computed_display) = computed_display { - let box_ = style.mutate_box(); - box_.set_display(computed_display); - % if CONFIG["product"] == "servo": - box_.set__servo_display_for_hypothetical_box(if is_root_element { - computed_display - } else { - specified_display - }); - % endif - } - } - - { - use computed_values::overflow_x::T as overflow; - use computed_values::overflow_y; - match (style.get_box().overflow_x_is_visible(), style.get_box().overflow_y_is_visible()) { - (true, true) => {} - (true, _) => { - style.mutate_box().set_overflow_x(overflow::auto); - } - (_, true) => { - style.mutate_box().set_overflow_y(overflow_y::T(overflow::auto)); - } - _ => {} - } - } - - // The initial value of border-*-width may be changed at computed value time. - % for side in ["top", "right", "bottom", "left"]: - // Like calling to_computed_value, which wouldn't type check. - if style.get_border().border_${side}_is_none_or_hidden_and_has_nonzero_width() { - style.mutate_border().set_border_${side}_width(Au(0)); - } - % endfor - - // The initial value of outline width may be changed at computed value time. - if style.get_outline().outline_is_none_or_hidden_and_has_nonzero_width() { - style.mutate_outline().set_outline_width(Au(0)); - } - - if is_root_element { - let s = style.get_font().clone_font_size(); - style.set_root_font_size(s); - } - - if seen.get_font_style() || seen.get_font_weight() || seen.get_font_stretch() || - seen.get_font_family() { - use properties::style_struct_traits::Font; - style.mutate_font().compute_font_hash(); - } - - let mode = get_writing_mode(style.get_inheritedbox()); - style.set_writing_mode(mode); - (style, cacheable) -} - -/// Alters the given style to accommodate replaced content. This is called in flow construction. It -/// handles cases like `<div style="position: absolute">foo bar baz</div>` (in which `foo`, `bar`, -/// and `baz` must not be absolutely-positioned) and cases like `<sup>Foo</sup>` (in which the -/// `vertical-align: top` style of `sup` must not propagate down into `Foo`). -/// -/// FIXME(#5625, pcwalton): It would probably be cleaner and faster to do this in the cascade. -#[inline] -pub fn modify_style_for_replaced_content(style: &mut Arc<ServoComputedValues>) { - // Reset `position` to handle cases like `<div style="position: absolute">foo bar baz</div>`. - if style.box_.display != longhands::display::computed_value::T::inline { - let mut style = Arc::make_mut(style); - Arc::make_mut(&mut style.box_).display = longhands::display::computed_value::T::inline; - Arc::make_mut(&mut style.box_).position = - longhands::position::computed_value::T::static_; - } - - // Reset `vertical-align` to handle cases like `<sup>foo</sup>`. - if style.box_.vertical_align != longhands::vertical_align::computed_value::T::baseline { - let mut style = Arc::make_mut(style); - Arc::make_mut(&mut style.box_).vertical_align = - longhands::vertical_align::computed_value::T::baseline - } - - // Reset margins. - if style.margin.margin_top != computed::LengthOrPercentageOrAuto::Length(Au(0)) || - style.margin.margin_left != computed::LengthOrPercentageOrAuto::Length(Au(0)) || - style.margin.margin_bottom != computed::LengthOrPercentageOrAuto::Length(Au(0)) || - style.margin.margin_right != computed::LengthOrPercentageOrAuto::Length(Au(0)) { - let mut style = Arc::make_mut(style); - let margin = Arc::make_mut(&mut style.margin); - margin.margin_top = computed::LengthOrPercentageOrAuto::Length(Au(0)); - margin.margin_left = computed::LengthOrPercentageOrAuto::Length(Au(0)); - margin.margin_bottom = computed::LengthOrPercentageOrAuto::Length(Au(0)); - margin.margin_right = computed::LengthOrPercentageOrAuto::Length(Au(0)); - } -} - -/// Adjusts borders as appropriate to account for a fragment's status as the first or last fragment -/// within the range of an element. -/// -/// Specifically, this function sets border widths to zero on the sides for which the fragment is -/// not outermost. -#[inline] -pub fn modify_border_style_for_inline_sides(style: &mut Arc<ServoComputedValues>, - is_first_fragment_of_element: bool, - is_last_fragment_of_element: bool) { - fn modify_side(style: &mut Arc<ServoComputedValues>, side: PhysicalSide) { - { - let border = &style.border; - let current_style = match side { - PhysicalSide::Left => (border.border_left_width, border.border_left_style), - PhysicalSide::Right => (border.border_right_width, border.border_right_style), - PhysicalSide::Top => (border.border_top_width, border.border_top_style), - PhysicalSide::Bottom => (border.border_bottom_width, border.border_bottom_style), - }; - if current_style == (Au(0), BorderStyle::none) { - return; - } - } - let mut style = Arc::make_mut(style); - let border = Arc::make_mut(&mut style.border); - match side { - PhysicalSide::Left => { - border.border_left_width = Au(0); - border.border_left_style = BorderStyle::none; - } - PhysicalSide::Right => { - border.border_right_width = Au(0); - border.border_right_style = BorderStyle::none; - } - PhysicalSide::Bottom => { - border.border_bottom_width = Au(0); - border.border_bottom_style = BorderStyle::none; - } - PhysicalSide::Top => { - border.border_top_width = Au(0); - border.border_top_style = BorderStyle::none; - } - } - } - - if !is_first_fragment_of_element { - let side = style.writing_mode.inline_start_physical_side(); - modify_side(style, side) - } - - if !is_last_fragment_of_element { - let side = style.writing_mode.inline_end_physical_side(); - modify_side(style, side) - } -} - -/// Adjusts the display and position properties as appropriate for an anonymous table object. -#[inline] -pub fn modify_style_for_anonymous_table_object( - style: &mut Arc<ServoComputedValues>, - new_display_value: longhands::display::computed_value::T) { - let mut style = Arc::make_mut(style); - let box_style = Arc::make_mut(&mut style.box_); - box_style.display = new_display_value; - box_style.position = longhands::position::computed_value::T::static_; -} - -/// Adjusts the `position` property as necessary for the outer fragment wrapper of an inline-block. -#[inline] -pub fn modify_style_for_outer_inline_block_fragment(style: &mut Arc<ServoComputedValues>) { - let mut style = Arc::make_mut(style); - let box_style = Arc::make_mut(&mut style.box_); - box_style.position = longhands::position::computed_value::T::static_ -} - -/// Adjusts the `position` and `padding` properties as necessary to account for text. -/// -/// Text is never directly relatively positioned; it's always contained within an element that is -/// itself relatively positioned. -#[inline] -pub fn modify_style_for_text(style: &mut Arc<ServoComputedValues>) { - if style.box_.position == longhands::position::computed_value::T::relative { - // We leave the `position` property set to `relative` so that we'll still establish a - // containing block if needed. But we reset all position offsets to `auto`. - let mut style = Arc::make_mut(style); - let mut position = Arc::make_mut(&mut style.position); - position.top = computed::LengthOrPercentageOrAuto::Auto; - position.right = computed::LengthOrPercentageOrAuto::Auto; - position.bottom = computed::LengthOrPercentageOrAuto::Auto; - position.left = computed::LengthOrPercentageOrAuto::Auto; - } - - if style.padding.padding_top != computed::LengthOrPercentage::Length(Au(0)) || - style.padding.padding_right != computed::LengthOrPercentage::Length(Au(0)) || - style.padding.padding_bottom != computed::LengthOrPercentage::Length(Au(0)) || - style.padding.padding_left != computed::LengthOrPercentage::Length(Au(0)) { - let mut style = Arc::make_mut(style); - let mut padding = Arc::make_mut(&mut style.padding); - padding.padding_top = computed::LengthOrPercentage::Length(Au(0)); - padding.padding_right = computed::LengthOrPercentage::Length(Au(0)); - padding.padding_bottom = computed::LengthOrPercentage::Length(Au(0)); - padding.padding_left = computed::LengthOrPercentage::Length(Au(0)); - } - - if style.effects.opacity != 1.0 { - let mut style = Arc::make_mut(style); - let mut effects = Arc::make_mut(&mut style.effects); - effects.opacity = 1.0; - } -} - -/// Adjusts the `margin` property as necessary to account for the text of an `input` element. -/// -/// Margins apply to the `input` element itself, so including them in the text will cause them to -/// be double-counted. -pub fn modify_style_for_input_text(style: &mut Arc<ServoComputedValues>) { - let mut style = Arc::make_mut(style); - let margin_style = Arc::make_mut(&mut style.margin); - margin_style.margin_top = computed::LengthOrPercentageOrAuto::Length(Au(0)); - margin_style.margin_right = computed::LengthOrPercentageOrAuto::Length(Au(0)); - margin_style.margin_bottom = computed::LengthOrPercentageOrAuto::Length(Au(0)); - margin_style.margin_left = computed::LengthOrPercentageOrAuto::Length(Au(0)); - - // whitespace inside text input should not be collapsed - let inherited_text = Arc::make_mut(&mut style.inheritedtext); - inherited_text.white_space = longhands::white_space::computed_value::T::pre; -} - -/// Adjusts the `clip` property so that an inline absolute hypothetical fragment doesn't clip its -/// children. -pub fn modify_style_for_inline_absolute_hypothetical_fragment(style: &mut Arc<ServoComputedValues>) { - if style.get_effects().clip.0.is_some() { - let mut style = Arc::make_mut(style); - let effects_style = Arc::make_mut(&mut style.effects); - effects_style.clip.0 = None - } -} - -pub fn is_supported_property(property: &str) -> bool { - match_ignore_ascii_case! { property, - % for property in SHORTHANDS + LONGHANDS: - "${property.name}" => true, - % endfor - _ => property.starts_with("--") - } -} - -#[macro_export] -macro_rules! css_properties_accessors { - ($macro_name: ident) => { - $macro_name! { - % for property in SHORTHANDS + LONGHANDS: - % if not property.derived_from and not property.internal: - % if '-' in property.name: - [${property.ident.capitalize()}, Set${property.ident.capitalize()}, "${property.name}"], - % endif - % if property != LONGHANDS[-1]: - [${property.camel_case}, Set${property.camel_case}, "${property.name}"], - % else: - [${property.camel_case}, Set${property.camel_case}, "${property.name}"] - % endif - % endif - % endfor - } - } -} - - -macro_rules! longhand_properties_idents { - ($macro_name: ident) => { - $macro_name! { - % for property in LONGHANDS: - ${property.ident} - % endfor - } - } -} diff --git a/components/style/Mako-0.9.1.zip b/components/style/properties/Mako-0.9.1.zip Binary files differindex b7450e30012..b7450e30012 100644 --- a/components/style/Mako-0.9.1.zip +++ b/components/style/properties/Mako-0.9.1.zip diff --git a/components/style/properties/build.py b/components/style/properties/build.py new file mode 100644 index 00000000000..28a9b59019f --- /dev/null +++ b/components/style/properties/build.py @@ -0,0 +1,84 @@ +# 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/. + +import json +import os.path +import sys + +BASE = os.path.dirname(__file__) +sys.path.insert(0, os.path.join(BASE, "Mako-0.9.1.zip")) +sys.path.insert(0, BASE) # For importing `data.py` + +from mako import exceptions +from mako.lookup import TemplateLookup +from mako.template import Template + +import data + + +def main(): + usage = "Usage: %s [ servo | gecko ] [ style-crate | geckolib | html ]" % sys.argv[0] + if len(sys.argv) < 3: + abort(usage) + product = sys.argv[1] + output = sys.argv[2] + if product not in ["servo", "gecko"] or output not in ["style-crate", "geckolib", "html"]: + abort(usage) + + properties = data.PropertiesData(product=product) + rust = render(os.path.join(BASE, "properties.mako.rs"), product=product, data=properties) + if output == "style-crate": + write(os.environ["OUT_DIR"], "properties.rs", rust) + if output == "geckolib": + template = os.path.join(BASE, "..", "..", "..", "ports", "geckolib", "properties.mako.rs") + rust = render(template, data=properties) + write(os.environ["OUT_DIR"], "properties.rs", rust) + elif output == "html": + write_html(properties) + + +def abort(message): + sys.stderr.write(message + b"\n") + sys.exit(1) + + +def render(filename, **context): + try: + lookup = TemplateLookup(directories=[BASE]) + template = Template(open(filename, "rb").read(), + filename=filename, + input_encoding="utf8", + lookup=lookup, + strict_undefined=True) + # Uncomment to debug generated Python code: + # write("/tmp", "mako_%s.py" % os.path.basename(filename), template.code) + return template.render(**context).encode("utf8") + except: + # Uncomment to see a traceback in generated Python code: + # raise + abort(exceptions.text_error_template().render().encode("utf8")) + + +def write(directory, filename, content): + if not os.path.exists(directory): + os.makedirs(directory) + open(os.path.join(directory, filename), "wb").write(content) + + +def write_html(properties): + properties = dict( + (p.name, { + "flag": p.experimental, + "shorthand": hasattr(p, "sub_properties") + }) + for p in properties.longhands + properties.shorthands + ) + doc_servo = os.path.join(BASE, "..", "..", "..", "target", "doc", "servo") + html = render(os.path.join(BASE, "properties.html.mako"), properties=properties) + write(doc_servo, "css-properties.html", html) + write(doc_servo, "css-properties.json", json.dumps(properties, indent=4)) + + +if __name__ == "__main__": + main() diff --git a/components/style/properties/data.py b/components/style/properties/data.py new file mode 100644 index 00000000000..14ec494bfba --- /dev/null +++ b/components/style/properties/data.py @@ -0,0 +1,150 @@ +# 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/. + +import re + + +def to_rust_ident(name): + name = name.replace("-", "_") + if name in ["static", "super", "box", "move"]: # Rust keywords + name += "_" + return name + + +def to_camel_case(ident): + return re.sub("_([a-z])", lambda m: m.group(1).upper(), ident.strip("_").capitalize()) + + +class Keyword(object): + def __init__(self, name, values, gecko_constant_prefix=None, + extra_gecko_values=None, extra_servo_values=None): + self.name = name + self.values = values.split() + self.gecko_constant_prefix = gecko_constant_prefix or \ + "NS_STYLE_" + self.name.upper().replace("-", "_") + self.extra_gecko_values = (extra_gecko_values or "").split() + self.extra_servo_values = (extra_servo_values or "").split() + + def gecko_values(self): + return self.values + self.extra_gecko_values + + def servo_values(self): + return self.values + self.extra_servo_values + + def values_for(self, product): + if product == "gecko": + return self.gecko_values() + elif product == "servo": + return self.servo_values() + else: + raise Exception("Bad product: " + product) + + def gecko_constant(self, value): + return self.gecko_constant_prefix + "_" + value.replace("-moz-", "").replace("-", "_").upper() + + +class Longhand(object): + def __init__(self, style_struct, name, derived_from=None, keyword=None, + custom_cascade=False, experimental=False, internal=False, + need_clone=False, gecko_ffi_name=None): + self.name = name + self.keyword = keyword + self.ident = to_rust_ident(name) + self.camel_case = to_camel_case(self.ident) + self.style_struct = style_struct + self.experimental = ("layout.%s.enabled" % name) if experimental else None + self.custom_cascade = custom_cascade + self.internal = internal + self.need_clone = need_clone + self.gecko_ffi_name = gecko_ffi_name or "m" + self.camel_case + self.derived_from = (derived_from or "").split() + + +class Shorthand(object): + def __init__(self, name, sub_properties, experimental=False, internal=False): + self.name = name + self.ident = to_rust_ident(name) + self.camel_case = to_camel_case(self.ident) + self.derived_from = None + self.experimental = ("layout.%s.enabled" % name) if experimental else None + self.sub_properties = sub_properties + self.internal = internal + + +class Method(object): + def __init__(self, name, return_type=None, arg_types=None, is_mut=False): + self.name = name + self.return_type = return_type + self.arg_types = arg_types or [] + self.is_mut = is_mut + + def arg_list(self): + args = ["_: " + x for x in self.arg_types] + args = ["&mut self" if self.is_mut else "&self"] + args + return ", ".join(args) + + def signature(self): + sig = "fn %s(%s)" % (self.name, self.arg_list()) + if self.return_type: + sig = sig + " -> " + self.return_type + return sig + + def declare(self): + return self.signature() + ";" + + def stub(self): + return self.signature() + "{ unimplemented!() }" + + +class StyleStruct(object): + def __init__(self, name, inherited, gecko_ffi_name=None, additional_methods=None): + self.servo_struct_name = "Servo" + name + self.gecko_struct_name = "Gecko" + name + self.trait_name = name + self.trait_name_lower = name.lower() + self.ident = to_rust_ident(self.trait_name_lower) + self.longhands = [] + self.inherited = inherited + self.gecko_ffi_name = gecko_ffi_name + self.additional_methods = additional_methods or [] + + +class PropertiesData(object): + def __init__(self, product): + self.product = product + self.style_structs = [] + self.current_style_struct = None + self.longhands = [] + self.longhands_by_name = {} + self.derived_longhands = {} + self.shorthands = [] + + def new_style_struct(self, *args, **kwargs): + style_struct = StyleStruct(*args, **kwargs) + self.style_structs.append(style_struct) + self.current_style_struct = style_struct + + def active_style_structs(self): + return [s for s in self.style_structs if s.additional_methods or s.longhands] + + def declare_longhand(self, name, products="gecko servo", **kwargs): + products = products.split() + if self.product not in products: + return + + longand = Longhand(self.current_style_struct, name, **kwargs) + self.current_style_struct.longhands.append(longand) + self.longhands.append(longand) + self.longhands_by_name[name] = longand + + for name in longand.derived_from: + self.derived_longhands.setdefault(name, []).append(longand) + + return longand + + def declare_shorthand(self, name, sub_properties, *args, **kwargs): + sub_properties = [self.longhands_by_name[s] for s in sub_properties] + shorthand = Shorthand(name, sub_properties, *args, **kwargs) + self.shorthands.append(shorthand) + return shorthand diff --git a/components/style/properties/helpers.mako.rs b/components/style/properties/helpers.mako.rs new file mode 100644 index 00000000000..8f1a7820e1f --- /dev/null +++ b/components/style/properties/helpers.mako.rs @@ -0,0 +1,191 @@ +/* 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/. */ + +<%! from data import Keyword, to_rust_ident %> + +<%def name="longhand(name, **kwargs)"> + <%call expr="raw_longhand(name, **kwargs)"> + ${caller.body()} + % if not data.longhands_by_name[name].derived_from: + pub fn parse_specified(context: &ParserContext, input: &mut Parser) + -> Result<DeclaredValue<SpecifiedValue>, ()> { + parse(context, input).map(DeclaredValue::Value) + } + % endif + </%call> +</%def> + +<%def name="predefined_type(name, type, initial_value, parse_method='parse', **kwargs)"> + <%call expr="longhand(name, **kwargs)"> + #[allow(unused_imports)] + use app_units::Au; + pub type SpecifiedValue = specified::${type}; + pub mod computed_value { + pub use values::computed::${type} as T; + } + #[inline] pub fn get_initial_value() -> computed_value::T { ${initial_value} } + #[inline] pub fn parse(_context: &ParserContext, input: &mut Parser) + -> Result<SpecifiedValue, ()> { + specified::${type}::${parse_method}(input) + } + </%call> +</%def> + +<%def name="raw_longhand(*args, **kwargs)"> + <% + property = data.declare_longhand(*args, **kwargs) + if property is None: + return "" + %> + pub mod ${property.ident} { + #![allow(unused_imports)] + % if not property.derived_from: + use cssparser::Parser; + use parser::ParserContext; + use properties::{CSSWideKeyword, DeclaredValue, Shorthand}; + % endif + use error_reporting::ParseErrorReporter; + use properties::longhands; + use properties::property_bit_field::PropertyBitField; + use properties::{ComputedValues, ServoComputedValues, PropertyDeclaration}; + use properties::style_struct_traits::${data.current_style_struct.trait_name}; + use properties::style_structs; + use std::boxed::Box as StdBox; + use std::collections::HashMap; + use std::sync::Arc; + use values::computed::{TContext, ToComputedValue}; + use values::{computed, specified}; + use string_cache::Atom; + ${caller.body()} + #[allow(unused_variables)] + pub fn cascade_property<C: ComputedValues>( + declaration: &PropertyDeclaration, + inherited_style: &C, + context: &mut computed::Context<C>, + seen: &mut PropertyBitField, + cacheable: &mut bool, + error_reporter: &mut StdBox<ParseErrorReporter + Send>) { + let declared_value = match *declaration { + PropertyDeclaration::${property.camel_case}(ref declared_value) => { + declared_value + } + _ => panic!("entered the wrong cascade_property() implementation"), + }; + % if not property.derived_from: + if seen.get_${property.ident}() { + return + } + seen.set_${property.ident}(); + { + let custom_props = context.style().custom_properties(); + ::properties::substitute_variables_${property.ident}( + declared_value, &custom_props, |value| match *value { + DeclaredValue::Value(ref specified_value) => { + let computed = specified_value.to_computed_value(context); + context.mutate_style().mutate_${data.current_style_struct.trait_name_lower}() + .set_${property.ident}(computed); + } + DeclaredValue::WithVariables { .. } => unreachable!(), + DeclaredValue::Initial => { + // We assume that it's faster to use copy_*_from rather than + // set_*(get_initial_value()); + let initial_struct = C::initial_values() + .get_${data.current_style_struct.trait_name_lower}(); + context.mutate_style().mutate_${data.current_style_struct.trait_name_lower}() + .copy_${property.ident}_from(initial_struct); + }, + DeclaredValue::Inherit => { + // This is a bit slow, but this is rare so it shouldn't + // matter. + // + // FIXME: is it still? + *cacheable = false; + let inherited_struct = + inherited_style.get_${data.current_style_struct.trait_name_lower}(); + context.mutate_style().mutate_${data.current_style_struct.trait_name_lower}() + .copy_${property.ident}_from(inherited_struct); + } + }, error_reporter + ); + } + + % if property.custom_cascade: + cascade_property_custom(declaration, + inherited_style, + context, + seen, + cacheable, + error_reporter); + % endif + % else: + // Do not allow stylesheets to set derived properties. + % endif + } + % if not property.derived_from: + pub fn parse_declared(context: &ParserContext, input: &mut Parser) + -> Result<DeclaredValue<SpecifiedValue>, ()> { + match input.try(CSSWideKeyword::parse) { + Ok(CSSWideKeyword::InheritKeyword) => Ok(DeclaredValue::Inherit), + Ok(CSSWideKeyword::InitialKeyword) => Ok(DeclaredValue::Initial), + Ok(CSSWideKeyword::UnsetKeyword) => Ok(DeclaredValue::${ + "Inherit" if data.current_style_struct.inherited else "Initial"}), + Err(()) => { + input.look_for_var_functions(); + let start = input.position(); + let specified = parse_specified(context, input); + if specified.is_err() { + while let Ok(_) = input.next() {} // Look for var() after the error. + } + let var = input.seen_var_functions(); + if specified.is_err() && var { + input.reset(start); + let (first_token_type, css) = try!( + ::custom_properties::parse_non_custom_with_var(input)); + return Ok(DeclaredValue::WithVariables { + css: css.into_owned(), + first_token_type: first_token_type, + base_url: context.base_url.clone(), + from_shorthand: None, + }) + } + specified + } + } + } + % endif + } +</%def> + +<%def name="single_keyword(name, values, **kwargs)"> + <%call expr="single_keyword_computed(name, values, **kwargs)"> + use values::computed::ComputedValueAsSpecified; + impl ComputedValueAsSpecified for SpecifiedValue {} + </%call> +</%def> + +<%def name="single_keyword_computed(name, values, **kwargs)"> + <% + keyword_kwargs = {a: kwargs.pop(a, None) for a in [ + 'gecko_constant_prefix', 'extra_gecko_values', 'extra_servo_values' + ]} + %> + <%call expr="longhand(name, keyword=Keyword(name, values, **keyword_kwargs), **kwargs)"> + pub use self::computed_value::T as SpecifiedValue; + ${caller.body()} + pub mod computed_value { + define_css_keyword_enum! { T: + % for value in data.longhands_by_name[name].keyword.values_for(product): + "${value}" => ${to_rust_ident(value)}, + % endfor + } + } + #[inline] pub fn get_initial_value() -> computed_value::T { + computed_value::T::${to_rust_ident(values.split()[0])} + } + pub fn parse(_context: &ParserContext, input: &mut Parser) + -> Result<SpecifiedValue, ()> { + computed_value::T::parse(input) + } + </%call> +</%def> diff --git a/components/style/properties/longhand/background.mako.rs b/components/style/properties/longhand/background.mako.rs new file mode 100644 index 00000000000..65a2e857db7 --- /dev/null +++ b/components/style/properties/longhand/background.mako.rs @@ -0,0 +1,327 @@ +/* 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/. */ + +<%namespace name="helpers" file="/helpers.mako.rs" /> + +<% data.new_style_struct("Background", inherited=False, gecko_ffi_name="nsStyleBackground") %> +${helpers.predefined_type( + "background-color", "CSSColor", + "::cssparser::Color::RGBA(::cssparser::RGBA { red: 0., green: 0., blue: 0., alpha: 0. }) /* transparent */")} + +<%helpers:longhand name="background-image"> + use cssparser::ToCss; + use std::fmt; + use values::specified::Image; + use values::LocalToCss; + + pub mod computed_value { + use values::computed; + #[derive(Debug, Clone, PartialEq, HeapSizeOf)] + pub struct T(pub Option<computed::Image>); + } + + impl ToCss for computed_value::T { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match self.0 { + None => dest.write_str("none"), + Some(computed::Image::Url(ref url)) => url.to_css(dest), + Some(computed::Image::LinearGradient(ref gradient)) => + gradient.to_css(dest) + } + } + } + + #[derive(Debug, Clone, PartialEq, HeapSizeOf)] + pub struct SpecifiedValue(pub Option<Image>); + + impl ToCss for SpecifiedValue { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match *self { + SpecifiedValue(Some(ref image)) => image.to_css(dest), + SpecifiedValue(None) => dest.write_str("none"), + } + } + } + + #[inline] + pub fn get_initial_value() -> computed_value::T { + computed_value::T(None) + } + pub fn parse(context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { + if input.try(|input| input.expect_ident_matching("none")).is_ok() { + Ok(SpecifiedValue(None)) + } else { + Ok(SpecifiedValue(Some(try!(Image::parse(context, input))))) + } + } + impl ToComputedValue for SpecifiedValue { + type ComputedValue = computed_value::T; + + #[inline] + fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { + match *self { + SpecifiedValue(None) => computed_value::T(None), + SpecifiedValue(Some(ref image)) => + computed_value::T(Some(image.to_computed_value(context))), + } + } + } +</%helpers:longhand> + +<%helpers:longhand name="background-position"> + use cssparser::ToCss; + use std::fmt; + use values::AuExtensionMethods; + + pub mod computed_value { + use values::computed::LengthOrPercentage; + + #[derive(PartialEq, Copy, Clone, Debug, HeapSizeOf)] + pub struct T { + pub horizontal: LengthOrPercentage, + pub vertical: LengthOrPercentage, + } + } + + #[derive(Debug, Clone, PartialEq, Copy, HeapSizeOf)] + pub struct SpecifiedValue { + pub horizontal: specified::LengthOrPercentage, + pub vertical: specified::LengthOrPercentage, + } + + impl ToCss for SpecifiedValue { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + try!(self.horizontal.to_css(dest)); + try!(dest.write_str(" ")); + try!(self.vertical.to_css(dest)); + Ok(()) + } + } + + impl ToCss for computed_value::T { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + try!(self.horizontal.to_css(dest)); + try!(dest.write_str(" ")); + try!(self.vertical.to_css(dest)); + Ok(()) + } + } + + impl SpecifiedValue { + fn new(first: specified::PositionComponent, second: specified::PositionComponent) + -> Result<SpecifiedValue, ()> { + let (horiz, vert) = match (category(first), category(second)) { + // Don't allow two vertical keywords or two horizontal keywords. + (PositionCategory::HorizontalKeyword, PositionCategory::HorizontalKeyword) | + (PositionCategory::VerticalKeyword, PositionCategory::VerticalKeyword) => return Err(()), + + // Swap if both are keywords and vertical precedes horizontal. + (PositionCategory::VerticalKeyword, PositionCategory::HorizontalKeyword) | + (PositionCategory::VerticalKeyword, PositionCategory::OtherKeyword) | + (PositionCategory::OtherKeyword, PositionCategory::HorizontalKeyword) => (second, first), + + // By default, horizontal is first. + _ => (first, second), + }; + Ok(SpecifiedValue { + horizontal: horiz.to_length_or_percentage(), + vertical: vert.to_length_or_percentage(), + }) + } + } + + // Collapse `Position` into a few categories to simplify the above `match` expression. + enum PositionCategory { + HorizontalKeyword, + VerticalKeyword, + OtherKeyword, + LengthOrPercentage, + } + fn category(p: specified::PositionComponent) -> PositionCategory { + match p { + specified::PositionComponent::Left | + specified::PositionComponent::Right => + PositionCategory::HorizontalKeyword, + specified::PositionComponent::Top | + specified::PositionComponent::Bottom => + PositionCategory::VerticalKeyword, + specified::PositionComponent::Center => + PositionCategory::OtherKeyword, + specified::PositionComponent::LengthOrPercentage(_) => + PositionCategory::LengthOrPercentage, + } + } + + impl ToComputedValue for SpecifiedValue { + type ComputedValue = computed_value::T; + + #[inline] + fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { + computed_value::T { + horizontal: self.horizontal.to_computed_value(context), + vertical: self.vertical.to_computed_value(context), + } + } + } + + #[inline] + pub fn get_initial_value() -> computed_value::T { + computed_value::T { + horizontal: computed::LengthOrPercentage::Percentage(0.0), + vertical: computed::LengthOrPercentage::Percentage(0.0), + } + } + + pub fn parse(_context: &ParserContext, input: &mut Parser) + -> Result<SpecifiedValue, ()> { + let first = try!(specified::PositionComponent::parse(input)); + let second = input.try(specified::PositionComponent::parse) + .unwrap_or(specified::PositionComponent::Center); + SpecifiedValue::new(first, second) + } +</%helpers:longhand> + +${helpers.single_keyword("background-repeat", "repeat repeat-x repeat-y no-repeat")} + +${helpers.single_keyword("background-attachment", "scroll fixed")} + +${helpers.single_keyword("background-clip", "border-box padding-box content-box")} + +${helpers.single_keyword("background-origin", "padding-box border-box content-box")} + +<%helpers:longhand name="background-size"> + use cssparser::{ToCss, Token}; + use std::ascii::AsciiExt; + use std::fmt; + + pub mod computed_value { + use values::computed::LengthOrPercentageOrAuto; + + #[derive(PartialEq, Clone, Debug, HeapSizeOf)] + pub struct ExplicitSize { + pub width: LengthOrPercentageOrAuto, + pub height: LengthOrPercentageOrAuto, + } + + #[derive(PartialEq, Clone, Debug, HeapSizeOf)] + pub enum T { + Explicit(ExplicitSize), + Cover, + Contain, + } + } + + impl ToCss for computed_value::T { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match *self { + computed_value::T::Explicit(ref size) => size.to_css(dest), + computed_value::T::Cover => dest.write_str("cover"), + computed_value::T::Contain => dest.write_str("contain"), + } + } + } + + #[derive(Clone, PartialEq, Debug, HeapSizeOf)] + pub struct SpecifiedExplicitSize { + pub width: specified::LengthOrPercentageOrAuto, + pub height: specified::LengthOrPercentageOrAuto, + } + + impl ToCss for SpecifiedExplicitSize { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + try!(self.width.to_css(dest)); + try!(dest.write_str(" ")); + self.height.to_css(dest) + } + } + + impl ToCss for computed_value::ExplicitSize { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + try!(self.width.to_css(dest)); + try!(dest.write_str(" ")); + self.height.to_css(dest) + } + } + + + #[derive(Clone, PartialEq, Debug, HeapSizeOf)] + pub enum SpecifiedValue { + Explicit(SpecifiedExplicitSize), + Cover, + Contain, + } + + impl ToCss for SpecifiedValue { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match *self { + SpecifiedValue::Explicit(ref size) => size.to_css(dest), + SpecifiedValue::Cover => dest.write_str("cover"), + SpecifiedValue::Contain => dest.write_str("contain"), + } + } + } + + impl ToComputedValue for SpecifiedValue { + type ComputedValue = computed_value::T; + + #[inline] + fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { + match *self { + SpecifiedValue::Explicit(ref size) => { + computed_value::T::Explicit(computed_value::ExplicitSize { + width: size.width.to_computed_value(context), + height: size.height.to_computed_value(context), + }) + } + SpecifiedValue::Cover => computed_value::T::Cover, + SpecifiedValue::Contain => computed_value::T::Contain, + } + } + } + + #[inline] + pub fn get_initial_value() -> computed_value::T { + computed_value::T::Explicit(computed_value::ExplicitSize { + width: computed::LengthOrPercentageOrAuto::Auto, + height: computed::LengthOrPercentageOrAuto::Auto, + }) + } + + pub fn parse(_: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue,()> { + let width; + if let Ok(value) = input.try(|input| { + match input.next() { + Err(_) => Err(()), + Ok(Token::Ident(ref ident)) if ident.eq_ignore_ascii_case("cover") => { + Ok(SpecifiedValue::Cover) + } + Ok(Token::Ident(ref ident)) if ident.eq_ignore_ascii_case("contain") => { + Ok(SpecifiedValue::Contain) + } + Ok(_) => Err(()), + } + }) { + return Ok(value) + } else { + width = try!(specified::LengthOrPercentageOrAuto::parse(input)) + } + + let height; + if let Ok(value) = input.try(|input| { + match input.next() { + Err(_) => Ok(specified::LengthOrPercentageOrAuto::Auto), + Ok(_) => Err(()), + } + }) { + height = value + } else { + height = try!(specified::LengthOrPercentageOrAuto::parse(input)); + } + + Ok(SpecifiedValue::Explicit(SpecifiedExplicitSize { + width: width, + height: height, + })) + } +</%helpers:longhand> diff --git a/components/style/properties/longhand/border.mako.rs b/components/style/properties/longhand/border.mako.rs new file mode 100644 index 00000000000..e36266b2a3c --- /dev/null +++ b/components/style/properties/longhand/border.mako.rs @@ -0,0 +1,65 @@ +/* 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/. */ + +<%namespace name="helpers" file="/helpers.mako.rs" /> +<% from data import Method %> + +<% data.new_style_struct("Border", inherited=False, gecko_ffi_name="nsStyleBorder", + additional_methods=[Method("border_" + side + "_has_nonzero_width", + "bool") for side in ["top", "right", "bottom", "left"]]) %> + +% for side in ["top", "right", "bottom", "left"]: + ${helpers.predefined_type("border-%s-color" % side, "CSSColor", "::cssparser::Color::CurrentColor")} +% endfor + +% for side in ["top", "right", "bottom", "left"]: + ${helpers.predefined_type("border-%s-style" % side, "BorderStyle", "specified::BorderStyle::none", need_clone=True)} +% endfor + +% for side in ["top", "right", "bottom", "left"]: + <%helpers:longhand name="border-${side}-width"> + use app_units::Au; + use cssparser::ToCss; + use std::fmt; + + impl ToCss for SpecifiedValue { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + self.0.to_css(dest) + } + } + + #[inline] + pub fn parse(_context: &ParserContext, input: &mut Parser) + -> Result<SpecifiedValue, ()> { + specified::parse_border_width(input).map(SpecifiedValue) + } + #[derive(Debug, Clone, PartialEq, HeapSizeOf)] + pub struct SpecifiedValue(pub specified::Length); + pub mod computed_value { + use app_units::Au; + pub type T = Au; + } + #[inline] pub fn get_initial_value() -> computed_value::T { + Au::from_px(3) // medium + } + + impl ToComputedValue for SpecifiedValue { + type ComputedValue = computed_value::T; + + #[inline] + fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { + self.0.to_computed_value(context) + } + } + </%helpers:longhand> +% endfor + +// FIXME(#4126): when gfx supports painting it, make this Size2D<LengthOrPercentage> +% for corner in ["top-left", "top-right", "bottom-right", "bottom-left"]: + ${helpers.predefined_type("border-" + corner + "-radius", "BorderRadiusSize", + "computed::BorderRadiusSize::zero()", + "parse")} +% endfor + +${helpers.single_keyword("box-decoration-break", "slice clone", products="gecko")} diff --git a/components/style/properties/longhand/box.mako.rs b/components/style/properties/longhand/box.mako.rs new file mode 100644 index 00000000000..ec158c0d9fa --- /dev/null +++ b/components/style/properties/longhand/box.mako.rs @@ -0,0 +1,832 @@ +/* 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/. */ + +<%namespace name="helpers" file="/helpers.mako.rs" /> +<% from data import Method, to_rust_ident %> + +<% data.new_style_struct("Box", + inherited=False, + gecko_ffi_name="nsStyleDisplay", + additional_methods=[Method("transition_count", "usize")]) %> + +// TODO(SimonSapin): don't parse `inline-table`, since we don't support it +<%helpers:longhand name="display" need_clone="True" custom_cascade="${product == 'servo'}"> + <% + values = """inline block inline-block + table inline-table table-row-group table-header-group table-footer-group + table-row table-column-group table-column table-cell table-caption + list-item flex + none + """.split() + experimental_values = set("flex".split()) + %> + pub use self::computed_value::T as SpecifiedValue; + use values::computed::{Context, ComputedValueAsSpecified}; + + pub mod computed_value { + #[allow(non_camel_case_types)] + #[derive(Clone, Eq, PartialEq, Copy, Hash, RustcEncodable, Debug, HeapSizeOf)] + #[derive(Deserialize, Serialize)] + pub enum T { + % for value in values: + ${to_rust_ident(value)}, + % endfor + } + + impl ::cssparser::ToCss for T { + fn to_css<W>(&self, dest: &mut W) -> ::std::fmt::Result + where W: ::std::fmt::Write { + match *self { + % for value in values: + T::${to_rust_ident(value)} => dest.write_str("${value}"), + % endfor + } + } + } + } + #[inline] pub fn get_initial_value() -> computed_value::T { + computed_value::T::${to_rust_ident(values[0])} + } + pub fn parse(_context: &ParserContext, input: &mut Parser) + -> Result<SpecifiedValue, ()> { + match_ignore_ascii_case! { try!(input.expect_ident()), + % for value in values: + "${value}" => { + % if value in experimental_values: + if !::util::prefs::get_pref("layout.${value}.enabled") + .as_boolean().unwrap_or(false) { + return Err(()) + } + % endif + Ok(computed_value::T::${to_rust_ident(value)}) + }, + % endfor + _ => Err(()) + } + } + + impl ComputedValueAsSpecified for SpecifiedValue {} + + % if product == "servo": + fn cascade_property_custom<C: ComputedValues>( + _declaration: &PropertyDeclaration, + _inherited_style: &C, + context: &mut computed::Context<C>, + _seen: &mut PropertyBitField, + _cacheable: &mut bool, + _error_reporter: &mut StdBox<ParseErrorReporter + Send>) { + longhands::_servo_display_for_hypothetical_box::derive_from_display(context); + longhands::_servo_text_decorations_in_effect::derive_from_display(context); + } + % endif + +</%helpers:longhand> + +${helpers.single_keyword("position", "static absolute relative fixed", need_clone=True, extra_gecko_values="sticky")} + +<%helpers:single_keyword_computed name="float" values="none left right" need_clone="True" gecko_ffi_name="mFloats"> + impl ToComputedValue for SpecifiedValue { + type ComputedValue = computed_value::T; + + #[inline] + fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { + let positioned = matches!(context.style().get_box().clone_position(), + longhands::position::SpecifiedValue::absolute | + longhands::position::SpecifiedValue::fixed); + if positioned { + SpecifiedValue::none + } else { + *self + } + } + } + +</%helpers:single_keyword_computed> + +${helpers.single_keyword("clear", "none left right both", gecko_ffi_name="mBreakType")} + +<%helpers:longhand name="-servo-display-for-hypothetical-box" derived_from="display" products="servo"> + pub use super::display::{SpecifiedValue, get_initial_value}; + pub use super::display::{parse}; + + pub mod computed_value { + pub type T = super::SpecifiedValue; + } + + #[inline] + pub fn derive_from_display<Cx: TContext>(context: &mut Cx) { + let d = context.style().get_box().clone_display(); + context.mutate_style().mutate_box().set__servo_display_for_hypothetical_box(d); + } + +</%helpers:longhand> + +${helpers.predefined_type("width", + "LengthOrPercentageOrAuto", + "computed::LengthOrPercentageOrAuto::Auto", + "parse_non_negative")} + +${helpers.predefined_type("height", + "LengthOrPercentageOrAuto", + "computed::LengthOrPercentageOrAuto::Auto", + "parse_non_negative")} + +<%helpers:longhand name="vertical-align"> + use cssparser::ToCss; + use std::fmt; + + <% vertical_align_keywords = ( + "baseline sub super top text-top middle bottom text-bottom".split()) %> + #[allow(non_camel_case_types)] + #[derive(Debug, Clone, PartialEq, Copy, HeapSizeOf)] + pub enum SpecifiedValue { + % for keyword in vertical_align_keywords: + ${to_rust_ident(keyword)}, + % endfor + LengthOrPercentage(specified::LengthOrPercentage), + } + + impl ToCss for SpecifiedValue { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match *self { + % for keyword in vertical_align_keywords: + SpecifiedValue::${to_rust_ident(keyword)} => dest.write_str("${keyword}"), + % endfor + SpecifiedValue::LengthOrPercentage(value) => value.to_css(dest), + } + } + } + /// baseline | sub | super | top | text-top | middle | bottom | text-bottom + /// | <percentage> | <length> + pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { + input.try(specified::LengthOrPercentage::parse) + .map(SpecifiedValue::LengthOrPercentage) + .or_else(|()| { + match_ignore_ascii_case! { try!(input.expect_ident()), + % for keyword in vertical_align_keywords: + "${keyword}" => Ok(SpecifiedValue::${to_rust_ident(keyword)}), + % endfor + _ => Err(()) + } + }) + } + pub mod computed_value { + use app_units::Au; + use std::fmt; + use values::AuExtensionMethods; + use values::{CSSFloat, computed}; + #[allow(non_camel_case_types)] + #[derive(PartialEq, Copy, Clone, HeapSizeOf, Debug)] + pub enum T { + % for keyword in vertical_align_keywords: + ${to_rust_ident(keyword)}, + % endfor + LengthOrPercentage(computed::LengthOrPercentage), + } + impl ::cssparser::ToCss for T { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match *self { + % for keyword in vertical_align_keywords: + T::${to_rust_ident(keyword)} => dest.write_str("${keyword}"), + % endfor + T::LengthOrPercentage(value) => value.to_css(dest), + } + } + } + } + #[inline] + pub fn get_initial_value() -> computed_value::T { computed_value::T::baseline } + + impl ToComputedValue for SpecifiedValue { + type ComputedValue = computed_value::T; + + #[inline] + fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { + match *self { + % for keyword in vertical_align_keywords: + SpecifiedValue::${to_rust_ident(keyword)} => { + computed_value::T::${to_rust_ident(keyword)} + } + % endfor + SpecifiedValue::LengthOrPercentage(value) => + computed_value::T::LengthOrPercentage(value.to_computed_value(context)), + } + } + } +</%helpers:longhand> + + +// CSS 2.1, Section 11 - Visual effects + +// Non-standard, see https://developer.mozilla.org/en-US/docs/Web/CSS/overflow-clip-box#Specifications +${helpers.single_keyword("-servo-overflow-clip-box", "padding-box content-box", products="servo", + internal=True)} + +${helpers.single_keyword("overflow-clip-box", "padding-box content-box", products="gecko", + internal=True)} + +// FIXME(pcwalton, #2742): Implement scrolling for `scroll` and `auto`. +${helpers.single_keyword("overflow-x", "visible hidden scroll auto", need_clone=True, + gecko_constant_prefix="NS_STYLE_OVERFLOW")} + +// FIXME(pcwalton, #2742): Implement scrolling for `scroll` and `auto`. +<%helpers:longhand name="overflow-y" need_clone="True"> + use super::overflow_x; + + use cssparser::ToCss; + use std::fmt; + + pub use self::computed_value::T as SpecifiedValue; + + impl ToCss for SpecifiedValue { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + self.0.to_css(dest) + } + } + + pub mod computed_value { + #[derive(Debug, Clone, Copy, PartialEq, HeapSizeOf)] + pub struct T(pub super::super::overflow_x::computed_value::T); + } + + impl ToComputedValue for SpecifiedValue { + type ComputedValue = computed_value::T; + + #[inline] + fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { + computed_value::T(self.0.to_computed_value(context)) + } + } + + pub fn get_initial_value() -> computed_value::T { + computed_value::T(overflow_x::get_initial_value()) + } + + pub fn parse(context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue,()> { + overflow_x::parse(context, input).map(SpecifiedValue) + } +</%helpers:longhand> + +// TODO(pcwalton): Multiple transitions. +<%helpers:longhand name="transition-duration"> + use values::specified::Time; + + pub use self::computed_value::T as SpecifiedValue; + pub use values::specified::Time as SingleSpecifiedValue; + + pub mod computed_value { + use cssparser::ToCss; + use std::fmt; + use values::computed::{TContext, ToComputedValue}; + + pub use values::computed::Time as SingleComputedValue; + + #[derive(Debug, Clone, PartialEq, HeapSizeOf)] + pub struct T(pub Vec<SingleComputedValue>); + + impl ToComputedValue for T { + type ComputedValue = T; + + #[inline] + fn to_computed_value<Cx: TContext>(&self, _: &Cx) -> T { + (*self).clone() + } + } + + impl ToCss for T { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + if self.0.is_empty() { + return dest.write_str("none") + } + for (i, value) in self.0.iter().enumerate() { + if i != 0 { + try!(dest.write_str(", ")) + } + try!(value.to_css(dest)) + } + Ok(()) + } + } + } + + #[inline] + pub fn parse_one(input: &mut Parser) -> Result<SingleSpecifiedValue,()> { + Time::parse(input) + } + + #[inline] + pub fn get_initial_value() -> computed_value::T { + computed_value::T(vec![get_initial_single_value()]) + } + + #[inline] + pub fn get_initial_single_value() -> Time { + Time(0.0) + } + + pub fn parse(_: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue,()> { + Ok(SpecifiedValue(try!(input.parse_comma_separated(parse_one)))) + } +</%helpers:longhand> + +// TODO(pcwalton): Lots more timing functions. +// TODO(pcwalton): Multiple transitions. +<%helpers:longhand name="transition-timing-function"> + use self::computed_value::{StartEnd, TransitionTimingFunction}; + + use euclid::point::Point2D; + + pub use self::computed_value::SingleComputedValue as SingleSpecifiedValue; + pub use self::computed_value::T as SpecifiedValue; + + static EASE: TransitionTimingFunction = TransitionTimingFunction::CubicBezier(Point2D { + x: 0.25, + y: 0.1, + }, Point2D { + x: 0.25, + y: 1.0, + }); + static LINEAR: TransitionTimingFunction = TransitionTimingFunction::CubicBezier(Point2D { + x: 0.0, + y: 0.0, + }, Point2D { + x: 1.0, + y: 1.0, + }); + static EASE_IN: TransitionTimingFunction = TransitionTimingFunction::CubicBezier(Point2D { + x: 0.42, + y: 0.0, + }, Point2D { + x: 1.0, + y: 1.0, + }); + static EASE_OUT: TransitionTimingFunction = TransitionTimingFunction::CubicBezier(Point2D { + x: 0.0, + y: 0.0, + }, Point2D { + x: 0.58, + y: 1.0, + }); + static EASE_IN_OUT: TransitionTimingFunction = + TransitionTimingFunction::CubicBezier(Point2D { + x: 0.42, + y: 0.0, + }, Point2D { + x: 0.58, + y: 1.0, + }); + static STEP_START: TransitionTimingFunction = + TransitionTimingFunction::Steps(1, StartEnd::Start); + static STEP_END: TransitionTimingFunction = + TransitionTimingFunction::Steps(1, StartEnd::End); + + pub mod computed_value { + use cssparser::ToCss; + use euclid::point::Point2D; + use std::fmt; + + pub use self::TransitionTimingFunction as SingleComputedValue; + + #[derive(Copy, Clone, Debug, PartialEq, HeapSizeOf)] + pub enum TransitionTimingFunction { + CubicBezier(Point2D<f32>, Point2D<f32>), + Steps(u32, StartEnd), + } + + impl ToCss for TransitionTimingFunction { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match *self { + TransitionTimingFunction::CubicBezier(p1, p2) => { + try!(dest.write_str("cubic-bezier(")); + try!(p1.x.to_css(dest)); + try!(dest.write_str(", ")); + try!(p1.y.to_css(dest)); + try!(dest.write_str(", ")); + try!(p2.x.to_css(dest)); + try!(dest.write_str(", ")); + try!(p2.y.to_css(dest)); + dest.write_str(")") + } + TransitionTimingFunction::Steps(steps, start_end) => { + try!(dest.write_str("steps(")); + try!(steps.to_css(dest)); + try!(dest.write_str(", ")); + try!(start_end.to_css(dest)); + dest.write_str(")") + } + } + } + } + + #[derive(Copy, Clone, Debug, PartialEq, HeapSizeOf)] + pub enum StartEnd { + Start, + End, + } + + impl ToCss for StartEnd { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match *self { + StartEnd::Start => dest.write_str("start"), + StartEnd::End => dest.write_str("end"), + } + } + } + + #[derive(Clone, Debug, PartialEq, HeapSizeOf)] + pub struct T(pub Vec<TransitionTimingFunction>); + + impl ToCss for T { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + if self.0.is_empty() { + return dest.write_str("none") + } + for (i, value) in self.0.iter().enumerate() { + if i != 0 { + try!(dest.write_str(", ")) + } + try!(value.to_css(dest)) + } + Ok(()) + } + } + } + + impl ToComputedValue for SpecifiedValue { + type ComputedValue = computed_value::T; + + #[inline] + fn to_computed_value<Cx: TContext>(&self, _: &Cx) -> computed_value::T { + (*self).clone() + } + } + + #[inline] + pub fn get_initial_value() -> computed_value::T { + computed_value::T(vec![get_initial_single_value()]) + } + + #[inline] + pub fn get_initial_single_value() -> TransitionTimingFunction { + EASE + } + + pub fn parse_one(input: &mut Parser) -> Result<SingleSpecifiedValue,()> { + if let Ok(function_name) = input.try(|input| input.expect_function()) { + return match_ignore_ascii_case! { + function_name, + "cubic-bezier" => { + let (mut p1x, mut p1y, mut p2x, mut p2y) = (0.0, 0.0, 0.0, 0.0); + try!(input.parse_nested_block(|input| { + p1x = try!(specified::parse_number(input)); + try!(input.expect_comma()); + p1y = try!(specified::parse_number(input)); + try!(input.expect_comma()); + p2x = try!(specified::parse_number(input)); + try!(input.expect_comma()); + p2y = try!(specified::parse_number(input)); + Ok(()) + })); + let (p1, p2) = (Point2D::new(p1x, p1y), Point2D::new(p2x, p2y)); + Ok(TransitionTimingFunction::CubicBezier(p1, p2)) + }, + "steps" => { + let (mut step_count, mut start_end) = (0, computed_value::StartEnd::Start); + try!(input.parse_nested_block(|input| { + step_count = try!(specified::parse_integer(input)); + try!(input.expect_comma()); + start_end = try!(match_ignore_ascii_case! { + try!(input.expect_ident()), + "start" => Ok(computed_value::StartEnd::Start), + "end" => Ok(computed_value::StartEnd::End), + _ => Err(()) + }); + Ok(()) + })); + Ok(TransitionTimingFunction::Steps(step_count as u32, start_end)) + }, + _ => Err(()) + } + } + match_ignore_ascii_case! { + try!(input.expect_ident()), + "ease" => Ok(EASE), + "linear" => Ok(LINEAR), + "ease-in" => Ok(EASE_IN), + "ease-out" => Ok(EASE_OUT), + "ease-in-out" => Ok(EASE_IN_OUT), + "step-start" => Ok(STEP_START), + "step-end" => Ok(STEP_END), + _ => Err(()) + } + } + + pub fn parse(_: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue,()> { + Ok(SpecifiedValue(try!(input.parse_comma_separated(parse_one)))) + } +</%helpers:longhand> + +// TODO(pcwalton): Lots more properties. +<%helpers:longhand name="transition-property"> + use self::computed_value::TransitionProperty; + + pub use self::computed_value::SingleComputedValue as SingleSpecifiedValue; + pub use self::computed_value::T as SpecifiedValue; + + pub mod computed_value { + use cssparser::ToCss; + use std::fmt; + + pub use self::TransitionProperty as SingleComputedValue; + + #[derive(Copy, Clone, Debug, PartialEq, HeapSizeOf)] + pub enum TransitionProperty { + All, + BackgroundColor, + BackgroundPosition, + BorderBottomColor, + BorderBottomWidth, + BorderLeftColor, + BorderLeftWidth, + BorderRightColor, + BorderRightWidth, + BorderSpacing, + BorderTopColor, + BorderTopWidth, + Bottom, + Color, + Clip, + FontSize, + FontWeight, + Height, + Left, + LetterSpacing, + LineHeight, + MarginBottom, + MarginLeft, + MarginRight, + MarginTop, + MaxHeight, + MaxWidth, + MinHeight, + MinWidth, + Opacity, + OutlineColor, + OutlineWidth, + PaddingBottom, + PaddingLeft, + PaddingRight, + PaddingTop, + Right, + TextIndent, + TextShadow, + Top, + Transform, + VerticalAlign, + Visibility, + Width, + WordSpacing, + ZIndex, + } + + pub static ALL_TRANSITION_PROPERTIES: [TransitionProperty; 45] = [ + TransitionProperty::BackgroundColor, + TransitionProperty::BackgroundPosition, + TransitionProperty::BorderBottomColor, + TransitionProperty::BorderBottomWidth, + TransitionProperty::BorderLeftColor, + TransitionProperty::BorderLeftWidth, + TransitionProperty::BorderRightColor, + TransitionProperty::BorderRightWidth, + TransitionProperty::BorderSpacing, + TransitionProperty::BorderTopColor, + TransitionProperty::BorderTopWidth, + TransitionProperty::Bottom, + TransitionProperty::Color, + TransitionProperty::Clip, + TransitionProperty::FontSize, + TransitionProperty::FontWeight, + TransitionProperty::Height, + TransitionProperty::Left, + TransitionProperty::LetterSpacing, + TransitionProperty::LineHeight, + TransitionProperty::MarginBottom, + TransitionProperty::MarginLeft, + TransitionProperty::MarginRight, + TransitionProperty::MarginTop, + TransitionProperty::MaxHeight, + TransitionProperty::MaxWidth, + TransitionProperty::MinHeight, + TransitionProperty::MinWidth, + TransitionProperty::Opacity, + TransitionProperty::OutlineColor, + TransitionProperty::OutlineWidth, + TransitionProperty::PaddingBottom, + TransitionProperty::PaddingLeft, + TransitionProperty::PaddingRight, + TransitionProperty::PaddingTop, + TransitionProperty::Right, + TransitionProperty::TextIndent, + TransitionProperty::TextShadow, + TransitionProperty::Top, + TransitionProperty::Transform, + TransitionProperty::VerticalAlign, + TransitionProperty::Visibility, + TransitionProperty::Width, + TransitionProperty::WordSpacing, + TransitionProperty::ZIndex, + ]; + + impl ToCss for TransitionProperty { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match *self { + TransitionProperty::All => dest.write_str("all"), + TransitionProperty::BackgroundColor => dest.write_str("background-color"), + TransitionProperty::BackgroundPosition => dest.write_str("background-position"), + TransitionProperty::BorderBottomColor => dest.write_str("border-bottom-color"), + TransitionProperty::BorderBottomWidth => dest.write_str("border-bottom-width"), + TransitionProperty::BorderLeftColor => dest.write_str("border-left-color"), + TransitionProperty::BorderLeftWidth => dest.write_str("border-left-width"), + TransitionProperty::BorderRightColor => dest.write_str("border-right-color"), + TransitionProperty::BorderRightWidth => dest.write_str("border-right-width"), + TransitionProperty::BorderSpacing => dest.write_str("border-spacing"), + TransitionProperty::BorderTopColor => dest.write_str("border-top-color"), + TransitionProperty::BorderTopWidth => dest.write_str("border-top-width"), + TransitionProperty::Bottom => dest.write_str("bottom"), + TransitionProperty::Color => dest.write_str("color"), + TransitionProperty::Clip => dest.write_str("clip"), + TransitionProperty::FontSize => dest.write_str("font-size"), + TransitionProperty::FontWeight => dest.write_str("font-weight"), + TransitionProperty::Height => dest.write_str("height"), + TransitionProperty::Left => dest.write_str("left"), + TransitionProperty::LetterSpacing => dest.write_str("letter-spacing"), + TransitionProperty::LineHeight => dest.write_str("line-height"), + TransitionProperty::MarginBottom => dest.write_str("margin-bottom"), + TransitionProperty::MarginLeft => dest.write_str("margin-left"), + TransitionProperty::MarginRight => dest.write_str("margin-right"), + TransitionProperty::MarginTop => dest.write_str("margin-top"), + TransitionProperty::MaxHeight => dest.write_str("max-height"), + TransitionProperty::MaxWidth => dest.write_str("max-width"), + TransitionProperty::MinHeight => dest.write_str("min-height"), + TransitionProperty::MinWidth => dest.write_str("min-width"), + TransitionProperty::Opacity => dest.write_str("opacity"), + TransitionProperty::OutlineColor => dest.write_str("outline-color"), + TransitionProperty::OutlineWidth => dest.write_str("outline-width"), + TransitionProperty::PaddingBottom => dest.write_str("padding-bottom"), + TransitionProperty::PaddingLeft => dest.write_str("padding-left"), + TransitionProperty::PaddingRight => dest.write_str("padding-right"), + TransitionProperty::PaddingTop => dest.write_str("padding-top"), + TransitionProperty::Right => dest.write_str("right"), + TransitionProperty::TextIndent => dest.write_str("text-indent"), + TransitionProperty::TextShadow => dest.write_str("text-shadow"), + TransitionProperty::Top => dest.write_str("top"), + TransitionProperty::Transform => dest.write_str("transform"), + TransitionProperty::VerticalAlign => dest.write_str("vertical-align"), + TransitionProperty::Visibility => dest.write_str("visibility"), + TransitionProperty::Width => dest.write_str("width"), + TransitionProperty::WordSpacing => dest.write_str("word-spacing"), + TransitionProperty::ZIndex => dest.write_str("z-index"), + } + } + } + + #[derive(Clone, Debug, PartialEq, HeapSizeOf)] + pub struct T(pub Vec<SingleComputedValue>); + + impl ToCss for T { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + if self.0.is_empty() { + return dest.write_str("none") + } + for (i, value) in self.0.iter().enumerate() { + if i != 0 { + try!(dest.write_str(", ")) + } + try!(value.to_css(dest)) + } + Ok(()) + } + } + } + + #[inline] + pub fn get_initial_value() -> computed_value::T { + computed_value::T(Vec::new()) + } + + pub fn parse_one(input: &mut Parser) -> Result<SingleSpecifiedValue,()> { + match_ignore_ascii_case! { + try!(input.expect_ident()), + "all" => Ok(TransitionProperty::All), + "background-color" => Ok(TransitionProperty::BackgroundColor), + "background-position" => Ok(TransitionProperty::BackgroundPosition), + "border-bottom-color" => Ok(TransitionProperty::BorderBottomColor), + "border-bottom-width" => Ok(TransitionProperty::BorderBottomWidth), + "border-left-color" => Ok(TransitionProperty::BorderLeftColor), + "border-left-width" => Ok(TransitionProperty::BorderLeftWidth), + "border-right-color" => Ok(TransitionProperty::BorderRightColor), + "border-right-width" => Ok(TransitionProperty::BorderRightWidth), + "border-spacing" => Ok(TransitionProperty::BorderSpacing), + "border-top-color" => Ok(TransitionProperty::BorderTopColor), + "border-top-width" => Ok(TransitionProperty::BorderTopWidth), + "bottom" => Ok(TransitionProperty::Bottom), + "color" => Ok(TransitionProperty::Color), + "clip" => Ok(TransitionProperty::Clip), + "font-size" => Ok(TransitionProperty::FontSize), + "font-weight" => Ok(TransitionProperty::FontWeight), + "height" => Ok(TransitionProperty::Height), + "left" => Ok(TransitionProperty::Left), + "letter-spacing" => Ok(TransitionProperty::LetterSpacing), + "line-height" => Ok(TransitionProperty::LineHeight), + "margin-bottom" => Ok(TransitionProperty::MarginBottom), + "margin-left" => Ok(TransitionProperty::MarginLeft), + "margin-right" => Ok(TransitionProperty::MarginRight), + "margin-top" => Ok(TransitionProperty::MarginTop), + "max-height" => Ok(TransitionProperty::MaxHeight), + "max-width" => Ok(TransitionProperty::MaxWidth), + "min-height" => Ok(TransitionProperty::MinHeight), + "min-width" => Ok(TransitionProperty::MinWidth), + "opacity" => Ok(TransitionProperty::Opacity), + "outline-color" => Ok(TransitionProperty::OutlineColor), + "outline-width" => Ok(TransitionProperty::OutlineWidth), + "padding-bottom" => Ok(TransitionProperty::PaddingBottom), + "padding-left" => Ok(TransitionProperty::PaddingLeft), + "padding-right" => Ok(TransitionProperty::PaddingRight), + "padding-top" => Ok(TransitionProperty::PaddingTop), + "right" => Ok(TransitionProperty::Right), + "text-indent" => Ok(TransitionProperty::TextIndent), + "text-shadow" => Ok(TransitionProperty::TextShadow), + "top" => Ok(TransitionProperty::Top), + "transform" => Ok(TransitionProperty::Transform), + "vertical-align" => Ok(TransitionProperty::VerticalAlign), + "visibility" => Ok(TransitionProperty::Visibility), + "width" => Ok(TransitionProperty::Width), + "word-spacing" => Ok(TransitionProperty::WordSpacing), + "z-index" => Ok(TransitionProperty::ZIndex), + _ => Err(()) + } + } + + pub fn parse(_: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue,()> { + Ok(SpecifiedValue(try!(input.parse_comma_separated(parse_one)))) + } + + impl ToComputedValue for SpecifiedValue { + type ComputedValue = computed_value::T; + + #[inline] + fn to_computed_value<Cx: TContext>(&self, _: &Cx) -> computed_value::T { + (*self).clone() + } + } +</%helpers:longhand> + +<%helpers:longhand name="transition-delay"> + pub use properties::longhands::transition_duration::{SingleSpecifiedValue, SpecifiedValue}; + pub use properties::longhands::transition_duration::{computed_value}; + pub use properties::longhands::transition_duration::{get_initial_single_value}; + pub use properties::longhands::transition_duration::{get_initial_value, parse, parse_one}; +</%helpers:longhand> + +// CSSOM View Module +// https://www.w3.org/TR/cssom-view-1/ +${helpers.single_keyword("scroll-behavior", + "auto smooth", + products="gecko")} + +// Non-standard: https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-snap-type-x +${helpers.single_keyword("scroll-snap-type-x", + "none mandatory proximity", + products="gecko", + gecko_constant_prefix="NS_STYLE_SCROLL_SNAP_TYPE")} + +// Non-standard: https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-snap-type-y +${helpers.single_keyword("scroll-snap-type-y", + "none mandatory proximity", + products="gecko", + gecko_constant_prefix="NS_STYLE_SCROLL_SNAP_TYPE")} + +// Compositing and Blending Level 1 +// http://www.w3.org/TR/compositing-1/ +${helpers.single_keyword("isolation", + "auto isolate", + products="gecko")} + +${helpers.single_keyword("page-break-after", + "auto always avoid left right", + products="gecko")} +${helpers.single_keyword("page-break-before", + "auto always avoid left right", + products="gecko")} +${helpers.single_keyword("page-break-inside", + "auto avoid", + products="gecko", + gecko_ffi_name="mBreakInside", + gecko_constant_prefix="NS_STYLE_PAGE_BREAK")} + +// CSS Basic User Interface Module Level 3 +// http://dev.w3.org/csswg/css-ui/ +${helpers.single_keyword("resize", + "none both horizontal vertical", + products="gecko")} diff --git a/components/style/properties/longhand/color.mako.rs b/components/style/properties/longhand/color.mako.rs new file mode 100644 index 00000000000..dc9555e7999 --- /dev/null +++ b/components/style/properties/longhand/color.mako.rs @@ -0,0 +1,43 @@ +/* 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/. */ + +<%namespace name="helpers" file="/helpers.mako.rs" /> + +<% data.new_style_struct("Color", inherited=True, gecko_ffi_name="nsStyleColor") %> + +<%helpers:raw_longhand name="color" need_clone="True"> + use cssparser::Color as CSSParserColor; + use cssparser::RGBA; + use values::specified::{CSSColor, CSSRGBA}; + + impl ToComputedValue for SpecifiedValue { + type ComputedValue = computed_value::T; + + #[inline] + fn to_computed_value<Cx: TContext>(&self, _context: &Cx) -> computed_value::T { + self.parsed + } + } + + pub type SpecifiedValue = CSSRGBA; + pub mod computed_value { + use cssparser; + pub type T = cssparser::RGBA; + } + #[inline] pub fn get_initial_value() -> computed_value::T { + RGBA { red: 0., green: 0., blue: 0., alpha: 1. } /* black */ + } + pub fn parse_specified(_context: &ParserContext, input: &mut Parser) + -> Result<DeclaredValue<SpecifiedValue>, ()> { + let value = try!(CSSColor::parse(input)); + let rgba = match value.parsed { + CSSParserColor::RGBA(rgba) => rgba, + CSSParserColor::CurrentColor => return Ok(DeclaredValue::Inherit) + }; + Ok(DeclaredValue::Value(CSSRGBA { + parsed: rgba, + authored: value.authored, + })) + } +</%helpers:raw_longhand> diff --git a/components/style/properties/longhand/column.mako.rs b/components/style/properties/longhand/column.mako.rs new file mode 100644 index 00000000000..2e6618e3745 --- /dev/null +++ b/components/style/properties/longhand/column.mako.rs @@ -0,0 +1,196 @@ +/* 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/. */ + +<%namespace name="helpers" file="/helpers.mako.rs" /> + +<% data.new_style_struct("Column", inherited=False, gecko_ffi_name="nsStyleColumn") %> + +<%helpers:longhand name="column-width" experimental="True"> + use cssparser::ToCss; + use std::fmt; + use values::AuExtensionMethods; + + #[derive(Debug, Clone, Copy, PartialEq, HeapSizeOf)] + pub enum SpecifiedValue { + Auto, + Specified(specified::Length), + } + + impl ToCss for SpecifiedValue { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match *self { + SpecifiedValue::Auto => dest.write_str("auto"), + SpecifiedValue::Specified(l) => l.to_css(dest), + } + } + } + + pub mod computed_value { + use app_units::Au; + #[derive(Debug, Clone, PartialEq, HeapSizeOf)] + pub struct T(pub Option<Au>); + } + + impl ToCss for computed_value::T { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match self.0 { + None => dest.write_str("auto"), + Some(l) => l.to_css(dest), + } + } + } + + #[inline] + pub fn get_initial_value() -> computed_value::T { + computed_value::T(None) + } + + impl ToComputedValue for SpecifiedValue { + type ComputedValue = computed_value::T; + + #[inline] + fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { + match *self { + SpecifiedValue::Auto => computed_value::T(None), + SpecifiedValue::Specified(l) => + computed_value::T(Some(l.to_computed_value(context))) + } + } + } + + pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { + if input.try(|input| input.expect_ident_matching("auto")).is_ok() { + Ok(SpecifiedValue::Auto) + } else { + specified::Length::parse_non_negative(input).map(SpecifiedValue::Specified) + } + } +</%helpers:longhand> + +<%helpers:longhand name="column-count" experimental="True"> + use cssparser::ToCss; + use std::fmt; + + #[derive(Debug, Clone, Copy, PartialEq, HeapSizeOf)] + pub enum SpecifiedValue { + Auto, + Specified(u32), + } + + impl ToCss for SpecifiedValue { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match *self { + SpecifiedValue::Auto => dest.write_str("auto"), + SpecifiedValue::Specified(count) => write!(dest, "{}", count), + } + } + } + + pub mod computed_value { + #[derive(Debug, Clone, PartialEq, HeapSizeOf)] + pub struct T(pub Option<u32>); + } + + impl ToCss for computed_value::T { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match self.0 { + None => dest.write_str("auto"), + Some(count) => write!(dest, "{}", count), + } + } + } + + #[inline] + pub fn get_initial_value() -> computed_value::T { + computed_value::T(None) + } + + impl ToComputedValue for SpecifiedValue { + type ComputedValue = computed_value::T; + + #[inline] + fn to_computed_value<Cx: TContext>(&self, _context: &Cx) -> computed_value::T { + match *self { + SpecifiedValue::Auto => computed_value::T(None), + SpecifiedValue::Specified(count) => + computed_value::T(Some(count)) + } + } + } + + pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { + if input.try(|input| input.expect_ident_matching("auto")).is_ok() { + Ok(SpecifiedValue::Auto) + } else { + let count = try!(specified::parse_integer(input)); + // Zero is invalid + if count <= 0 { + return Err(()) + } + Ok(SpecifiedValue::Specified(count as u32)) + } + } +</%helpers:longhand> + +<%helpers:longhand name="column-gap" experimental="True"> + use cssparser::ToCss; + use std::fmt; + use values::AuExtensionMethods; + + #[derive(Debug, Clone, Copy, PartialEq, HeapSizeOf)] + pub enum SpecifiedValue { + Normal, + Specified(specified::Length), + } + + impl ToCss for SpecifiedValue { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match *self { + SpecifiedValue::Normal => dest.write_str("normal"), + SpecifiedValue::Specified(l) => l.to_css(dest), + } + } + } + + pub mod computed_value { + use app_units::Au; + #[derive(Debug, Clone, PartialEq, HeapSizeOf)] + pub struct T(pub Option<Au>); + } + + impl ToCss for computed_value::T { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match self.0 { + None => dest.write_str("normal"), + Some(l) => l.to_css(dest), + } + } + } + + #[inline] + pub fn get_initial_value() -> computed_value::T { + computed_value::T(None) + } + + impl ToComputedValue for SpecifiedValue { + type ComputedValue = computed_value::T; + + #[inline] + fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { + match *self { + SpecifiedValue::Normal => computed_value::T(None), + SpecifiedValue::Specified(l) => + computed_value::T(Some(l.to_computed_value(context))) + } + } + } + + pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { + if input.try(|input| input.expect_ident_matching("normal")).is_ok() { + Ok(SpecifiedValue::Normal) + } else { + specified::Length::parse_non_negative(input).map(SpecifiedValue::Specified) + } + } +</%helpers:longhand> diff --git a/components/style/properties/longhand/counters.mako.rs b/components/style/properties/longhand/counters.mako.rs new file mode 100644 index 00000000000..9af2ca8aa9c --- /dev/null +++ b/components/style/properties/longhand/counters.mako.rs @@ -0,0 +1,248 @@ +/* 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/. */ + +<%namespace name="helpers" file="/helpers.mako.rs" /> + +<% data.new_style_struct("Counters", inherited=False, gecko_ffi_name="nsStyleContent") %> + +<%helpers:longhand name="content"> + use cssparser::Token; + use std::ascii::AsciiExt; + use values::computed::ComputedValueAsSpecified; + + use super::list_style_type; + + pub use self::computed_value::T as SpecifiedValue; + pub use self::computed_value::ContentItem; + + impl ComputedValueAsSpecified for SpecifiedValue {} + + pub mod computed_value { + use super::super::list_style_type; + + use cssparser::{self, ToCss}; + use std::fmt; + + #[derive(Debug, PartialEq, Eq, Clone, HeapSizeOf)] + pub enum ContentItem { + /// Literal string content. + String(String), + /// `counter(name, style)`. + Counter(String, list_style_type::computed_value::T), + /// `counters(name, separator, style)`. + Counters(String, String, list_style_type::computed_value::T), + /// `open-quote`. + OpenQuote, + /// `close-quote`. + CloseQuote, + /// `no-open-quote`. + NoOpenQuote, + /// `no-close-quote`. + NoCloseQuote, + } + + impl ToCss for ContentItem { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match *self { + ContentItem::String(ref s) => { + cssparser::serialize_string(&**s, dest) + } + ContentItem::Counter(ref s, ref list_style_type) => { + try!(dest.write_str("counter(")); + try!(cssparser::serialize_identifier(&**s, dest)); + try!(dest.write_str(", ")); + try!(list_style_type.to_css(dest)); + dest.write_str(")") + } + ContentItem::Counters(ref s, ref separator, ref list_style_type) => { + try!(dest.write_str("counter(")); + try!(cssparser::serialize_identifier(&**s, dest)); + try!(dest.write_str(", ")); + try!(cssparser::serialize_string(&**separator, dest)); + try!(dest.write_str(", ")); + try!(list_style_type.to_css(dest)); + dest.write_str(")") + } + ContentItem::OpenQuote => dest.write_str("open-quote"), + ContentItem::CloseQuote => dest.write_str("close-quote"), + ContentItem::NoOpenQuote => dest.write_str("no-open-quote"), + ContentItem::NoCloseQuote => dest.write_str("no-close-quote"), + } + } + } + + #[allow(non_camel_case_types)] + #[derive(Debug, PartialEq, Eq, Clone, HeapSizeOf)] + pub enum T { + normal, + none, + Content(Vec<ContentItem>), + } + + impl ToCss for T { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match *self { + T::normal => dest.write_str("normal"), + T::none => dest.write_str("none"), + T::Content(ref content) => { + let mut iter = content.iter(); + try!(iter.next().unwrap().to_css(dest)); + for c in iter { + try!(dest.write_str(" ")); + try!(c.to_css(dest)); + } + Ok(()) + } + } + } + } + } + #[inline] + pub fn get_initial_value() -> computed_value::T { + computed_value::T::normal + } + + pub fn counter_name_is_illegal(name: &str) -> bool { + name.eq_ignore_ascii_case("none") || name.eq_ignore_ascii_case("inherit") || + name.eq_ignore_ascii_case("initial") + } + + // normal | none | [ <string> | <counter> | open-quote | close-quote | no-open-quote | + // no-close-quote ]+ + // TODO: <uri>, attr(<identifier>) + pub fn parse(context: &ParserContext, input: &mut Parser) + -> Result<SpecifiedValue, ()> { + if input.try(|input| input.expect_ident_matching("normal")).is_ok() { + return Ok(SpecifiedValue::normal) + } + if input.try(|input| input.expect_ident_matching("none")).is_ok() { + return Ok(SpecifiedValue::none) + } + let mut content = vec![]; + loop { + match input.next() { + Ok(Token::QuotedString(value)) => { + content.push(ContentItem::String(value.into_owned())) + } + Ok(Token::Function(name)) => { + content.push(try!(match_ignore_ascii_case! { name, + "counter" => input.parse_nested_block(|input| { + let name = try!(input.expect_ident()).into_owned(); + let style = input.try(|input| { + try!(input.expect_comma()); + list_style_type::parse(context, input) + }).unwrap_or(list_style_type::computed_value::T::decimal); + Ok(ContentItem::Counter(name, style)) + }), + "counters" => input.parse_nested_block(|input| { + let name = try!(input.expect_ident()).into_owned(); + try!(input.expect_comma()); + let separator = try!(input.expect_string()).into_owned(); + let style = input.try(|input| { + try!(input.expect_comma()); + list_style_type::parse(context, input) + }).unwrap_or(list_style_type::computed_value::T::decimal); + Ok(ContentItem::Counters(name, separator, style)) + }), + _ => return Err(()) + })); + } + Ok(Token::Ident(ident)) => { + match_ignore_ascii_case! { ident, + "open-quote" => content.push(ContentItem::OpenQuote), + "close-quote" => content.push(ContentItem::CloseQuote), + "no-open-quote" => content.push(ContentItem::NoOpenQuote), + "no-close-quote" => content.push(ContentItem::NoCloseQuote), + _ => return Err(()) + } + } + Err(_) => break, + _ => return Err(()) + } + } + if !content.is_empty() { + Ok(SpecifiedValue::Content(content)) + } else { + Err(()) + } + } +</%helpers:longhand> + +<%helpers:longhand name="counter-increment"> + use std::fmt; + use super::content; + use values::computed::ComputedValueAsSpecified; + + use cssparser::{ToCss, Token, serialize_identifier}; + use std::borrow::{Cow, ToOwned}; + + pub use self::computed_value::T as SpecifiedValue; + + pub mod computed_value { + #[derive(Debug, Clone, PartialEq, HeapSizeOf)] + pub struct T(pub Vec<(String,i32)>); + } + + #[inline] + pub fn get_initial_value() -> computed_value::T { + computed_value::T(Vec::new()) + } + + impl ComputedValueAsSpecified for SpecifiedValue {} + + impl ToCss for SpecifiedValue { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + let mut first = true; + for pair in &self.0 { + if !first { + try!(dest.write_str(" ")); + } + first = false; + try!(serialize_identifier(&pair.0, dest)); + try!(write!(dest, " {}", pair.1)); + } + Ok(()) + } + } + + pub fn parse(_: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue,()> { + parse_common(1, input) + } + + pub fn parse_common(default_value: i32, input: &mut Parser) -> Result<SpecifiedValue,()> { + if input.try(|input| input.expect_ident_matching("none")).is_ok() { + return Ok(SpecifiedValue(Vec::new())) + } + + let mut counters = Vec::new(); + loop { + let counter_name = match input.next() { + Ok(Token::Ident(ident)) => (*ident).to_owned(), + Ok(_) => return Err(()), + Err(_) => break, + }; + if content::counter_name_is_illegal(&counter_name) { + return Err(()) + } + let counter_delta = + input.try(|input| specified::parse_integer(input)).unwrap_or(default_value); + counters.push((counter_name, counter_delta)) + } + + if !counters.is_empty() { + Ok(SpecifiedValue(counters)) + } else { + Err(()) + } + } +</%helpers:longhand> + +<%helpers:longhand name="counter-reset"> + pub use super::counter_increment::{SpecifiedValue, computed_value, get_initial_value}; + use super::counter_increment::{parse_common}; + + pub fn parse(_: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue,()> { + parse_common(0, input) + } +</%helpers:longhand> diff --git a/components/style/properties/longhand/effects.mako.rs b/components/style/properties/longhand/effects.mako.rs new file mode 100644 index 00000000000..3424debe2b8 --- /dev/null +++ b/components/style/properties/longhand/effects.mako.rs @@ -0,0 +1,1343 @@ +/* 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/. */ + +<%namespace name="helpers" file="/helpers.mako.rs" /> + +// Box-shadow, etc. +<% data.new_style_struct("Effects", inherited=False, gecko_ffi_name="nsStyleEffects") %> + +<%helpers:longhand name="opacity"> + use cssparser::ToCss; + use std::fmt; + use values::CSSFloat; + + impl ToCss for SpecifiedValue { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + self.0.to_css(dest) + } + } + + #[derive(Debug, Clone, PartialEq, HeapSizeOf)] + pub struct SpecifiedValue(pub CSSFloat); + pub mod computed_value { + use values::CSSFloat; + pub type T = CSSFloat; + } + #[inline] + pub fn get_initial_value() -> computed_value::T { + 1.0 + } + + impl ToComputedValue for SpecifiedValue { + type ComputedValue = computed_value::T; + + #[inline] + fn to_computed_value<Cx: TContext>(&self, _context: &Cx) -> computed_value::T { + if self.0 < 0.0 { + 0.0 + } else if self.0 > 1.0 { + 1.0 + } else { + self.0 + } + } + } + fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { + specified::parse_number(input).map(SpecifiedValue) + } +</%helpers:longhand> + +<%helpers:longhand name="box-shadow"> + use cssparser::{self, ToCss}; + use std::fmt; + use values::AuExtensionMethods; + + #[derive(Debug, Clone, PartialEq, HeapSizeOf)] + pub struct SpecifiedValue(Vec<SpecifiedBoxShadow>); + + #[derive(Debug, Clone, PartialEq, HeapSizeOf)] + pub struct SpecifiedBoxShadow { + pub offset_x: specified::Length, + pub offset_y: specified::Length, + pub blur_radius: specified::Length, + pub spread_radius: specified::Length, + pub color: Option<specified::CSSColor>, + pub inset: bool, + } + + impl ToCss for SpecifiedValue { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + let mut iter = self.0.iter(); + if let Some(shadow) = iter.next() { + try!(shadow.to_css(dest)); + } else { + try!(dest.write_str("none")); + return Ok(()) + } + for shadow in iter { + try!(dest.write_str(", ")); + try!(shadow.to_css(dest)); + } + Ok(()) + } + } + + impl ToCss for SpecifiedBoxShadow { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + if self.inset { + try!(dest.write_str("inset ")); + } + try!(self.blur_radius.to_css(dest)); + try!(dest.write_str(" ")); + try!(self.spread_radius.to_css(dest)); + try!(dest.write_str(" ")); + try!(self.offset_x.to_css(dest)); + try!(dest.write_str(" ")); + try!(self.offset_y.to_css(dest)); + + if let Some(ref color) = self.color { + try!(dest.write_str(" ")); + try!(color.to_css(dest)); + } + Ok(()) + } + } + + pub mod computed_value { + use app_units::Au; + use std::fmt; + use values::computed; + + #[derive(Clone, PartialEq, HeapSizeOf, Debug)] + pub struct T(pub Vec<BoxShadow>); + + #[derive(Clone, PartialEq, Copy, HeapSizeOf, Debug)] + pub struct BoxShadow { + pub offset_x: Au, + pub offset_y: Au, + pub blur_radius: Au, + pub spread_radius: Au, + pub color: computed::CSSColor, + pub inset: bool, + } + } + + impl ToCss for computed_value::T { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + let mut iter = self.0.iter(); + if let Some(shadow) = iter.next() { + try!(shadow.to_css(dest)); + } else { + try!(dest.write_str("none")); + return Ok(()) + } + for shadow in iter { + try!(dest.write_str(", ")); + try!(shadow.to_css(dest)); + } + Ok(()) + } + } + + impl ToCss for computed_value::BoxShadow { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + if self.inset { + try!(dest.write_str("inset ")); + } + try!(self.blur_radius.to_css(dest)); + try!(dest.write_str(" ")); + try!(self.spread_radius.to_css(dest)); + try!(dest.write_str(" ")); + try!(self.offset_x.to_css(dest)); + try!(dest.write_str(" ")); + try!(self.offset_y.to_css(dest)); + try!(dest.write_str(" ")); + try!(self.color.to_css(dest)); + Ok(()) + } + } + + #[inline] + pub fn get_initial_value() -> computed_value::T { + computed_value::T(Vec::new()) + } + + pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { + if input.try(|input| input.expect_ident_matching("none")).is_ok() { + Ok(SpecifiedValue(Vec::new())) + } else { + input.parse_comma_separated(parse_one_box_shadow).map(SpecifiedValue) + } + } + + impl ToComputedValue for SpecifiedValue { + type ComputedValue = computed_value::T; + + #[inline] + fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { + computed_value::T(self.0.iter().map(|value| compute_one_box_shadow(value, context)).collect()) + } + } + + pub fn compute_one_box_shadow<Cx: TContext>(value: &SpecifiedBoxShadow, context: &Cx) + -> computed_value::BoxShadow { + computed_value::BoxShadow { + offset_x: value.offset_x.to_computed_value(context), + offset_y: value.offset_y.to_computed_value(context), + blur_radius: value.blur_radius.to_computed_value(context), + spread_radius: value.spread_radius.to_computed_value(context), + color: value.color + .as_ref() + .map(|color| color.parsed) + .unwrap_or(cssparser::Color::CurrentColor), + inset: value.inset, + } + } + + pub fn parse_one_box_shadow(input: &mut Parser) -> Result<SpecifiedBoxShadow, ()> { + use app_units::Au; + let mut lengths = [specified::Length::Absolute(Au(0)); 4]; + let mut lengths_parsed = false; + let mut color = None; + let mut inset = false; + + loop { + if !inset { + if input.try(|input| input.expect_ident_matching("inset")).is_ok() { + inset = true; + continue + } + } + if !lengths_parsed { + if let Ok(value) = input.try(specified::Length::parse) { + lengths[0] = value; + let mut length_parsed_count = 1; + while length_parsed_count < 4 { + if let Ok(value) = input.try(specified::Length::parse) { + lengths[length_parsed_count] = value + } else { + break + } + length_parsed_count += 1; + } + + // The first two lengths must be specified. + if length_parsed_count < 2 { + return Err(()) + } + + lengths_parsed = true; + continue + } + } + if color.is_none() { + if let Ok(value) = input.try(specified::CSSColor::parse) { + color = Some(value); + continue + } + } + break + } + + // Lengths must be specified. + if !lengths_parsed { + return Err(()) + } + + Ok(SpecifiedBoxShadow { + offset_x: lengths[0], + offset_y: lengths[1], + blur_radius: lengths[2], + spread_radius: lengths[3], + color: color, + inset: inset, + }) + } +</%helpers:longhand> + +<%helpers:longhand name="clip"> + use cssparser::ToCss; + use std::fmt; + use values::AuExtensionMethods; + + // NB: `top` and `left` are 0 if `auto` per CSS 2.1 11.1.2. + + pub mod computed_value { + use app_units::Au; + + #[derive(Clone, PartialEq, Eq, Copy, Debug, HeapSizeOf)] + pub struct ClipRect { + pub top: Au, + pub right: Option<Au>, + pub bottom: Option<Au>, + pub left: Au, + } + + #[derive(Debug, Clone, PartialEq, HeapSizeOf)] + pub struct T(pub Option<ClipRect>); + } + + impl ToCss for computed_value::T { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match self.0 { + None => dest.write_str("auto"), + Some(rect) => { + try!(dest.write_str("rect(")); + try!(rect.top.to_css(dest)); + try!(dest.write_str(", ")); + if let Some(right) = rect.right { + try!(right.to_css(dest)); + try!(dest.write_str(", ")); + } else { + try!(dest.write_str("auto, ")); + } + + if let Some(bottom) = rect.bottom { + try!(bottom.to_css(dest)); + try!(dest.write_str(", ")); + } else { + try!(dest.write_str("auto, ")); + } + + try!(rect.left.to_css(dest)); + try!(dest.write_str(")")); + Ok(()) + } + } + } + } + + #[derive(Clone, Debug, PartialEq, Copy, HeapSizeOf)] + pub struct SpecifiedClipRect { + pub top: specified::Length, + pub right: Option<specified::Length>, + pub bottom: Option<specified::Length>, + pub left: specified::Length, + } + + #[derive(Clone, Debug, PartialEq, Copy, HeapSizeOf)] + pub struct SpecifiedValue(Option<SpecifiedClipRect>); + + impl ToCss for SpecifiedClipRect { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + try!(dest.write_str("rect(")); + + try!(self.top.to_css(dest)); + try!(dest.write_str(", ")); + + if let Some(right) = self.right { + try!(right.to_css(dest)); + try!(dest.write_str(", ")); + } else { + try!(dest.write_str("auto, ")); + } + + if let Some(bottom) = self.bottom { + try!(bottom.to_css(dest)); + try!(dest.write_str(", ")); + } else { + try!(dest.write_str("auto, ")); + } + + try!(self.left.to_css(dest)); + + try!(dest.write_str(")")); + Ok(()) + } + } + + impl ToCss for SpecifiedValue { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + if let Some(ref rect) = self.0 { + rect.to_css(dest) + } else { + dest.write_str("auto") + } + } + } + + #[inline] + pub fn get_initial_value() -> computed_value::T { + computed_value::T(None) + } + + impl ToComputedValue for SpecifiedValue { + type ComputedValue = computed_value::T; + + #[inline] + fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { + computed_value::T(self.0.map(|value| computed_value::ClipRect { + top: value.top.to_computed_value(context), + right: value.right.map(|right| right.to_computed_value(context)), + bottom: value.bottom.map(|bottom| bottom.to_computed_value(context)), + left: value.left.to_computed_value(context), + })) + } + } + + pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { + use app_units::Au; + use std::ascii::AsciiExt; + use values::specified::Length; + + if input.try(|input| input.expect_ident_matching("auto")).is_ok() { + return Ok(SpecifiedValue(None)) + } + if !try!(input.expect_function()).eq_ignore_ascii_case("rect") { + return Err(()) + } + let sides = try!(input.parse_nested_block(|input| { + input.parse_comma_separated(|input| { + if input.try(|input| input.expect_ident_matching("auto")).is_ok() { + Ok(None) + } else { + Length::parse(input).map(Some) + } + }) + })); + if sides.len() == 4 { + Ok(SpecifiedValue(Some(SpecifiedClipRect { + top: sides[0].unwrap_or(Length::Absolute(Au(0))), + right: sides[1], + bottom: sides[2], + left: sides[3].unwrap_or(Length::Absolute(Au(0))), + }))) + } else { + Err(()) + } + } +</%helpers:longhand> + +<%helpers:longhand name="filter"> + //pub use self::computed_value::T as SpecifiedValue; + use cssparser::ToCss; + use std::fmt; + use values::AuExtensionMethods; + use values::CSSFloat; + use values::specified::{Angle, Length}; + + #[derive(Debug, Clone, PartialEq, HeapSizeOf)] + pub struct SpecifiedValue(Vec<SpecifiedFilter>); + + // TODO(pcwalton): `drop-shadow` + #[derive(Clone, PartialEq, Debug, HeapSizeOf)] + pub enum SpecifiedFilter { + Blur(Length), + Brightness(CSSFloat), + Contrast(CSSFloat), + Grayscale(CSSFloat), + HueRotate(Angle), + Invert(CSSFloat), + Opacity(CSSFloat), + Saturate(CSSFloat), + Sepia(CSSFloat), + } + + pub mod computed_value { + use app_units::Au; + use values::CSSFloat; + use values::specified::{Angle}; + + #[derive(Clone, PartialEq, Debug, HeapSizeOf, Deserialize, Serialize)] + pub enum Filter { + Blur(Au), + Brightness(CSSFloat), + Contrast(CSSFloat), + Grayscale(CSSFloat), + HueRotate(Angle), + Invert(CSSFloat), + Opacity(CSSFloat), + Saturate(CSSFloat), + Sepia(CSSFloat), + } + + #[derive(Clone, PartialEq, Debug, HeapSizeOf, Deserialize, Serialize)] + pub struct T { pub filters: Vec<Filter> } + + impl T { + /// Creates a new filter pipeline. + #[inline] + pub fn new(filters: Vec<Filter>) -> T { + T + { + filters: filters, + } + } + + /// Adds a new filter to the filter pipeline. + #[inline] + pub fn push(&mut self, filter: Filter) { + self.filters.push(filter) + } + + /// Returns true if this filter pipeline is empty and false otherwise. + #[inline] + pub fn is_empty(&self) -> bool { + self.filters.is_empty() + } + + /// Returns the resulting opacity of this filter pipeline. + #[inline] + pub fn opacity(&self) -> CSSFloat { + let mut opacity = 1.0; + + for filter in &self.filters { + if let Filter::Opacity(ref opacity_value) = *filter { + opacity *= *opacity_value + } + } + opacity + } + } + } + + impl ToCss for computed_value::T { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + let mut iter = self.filters.iter(); + if let Some(filter) = iter.next() { + try!(filter.to_css(dest)); + } else { + try!(dest.write_str("none")); + return Ok(()) + } + for filter in iter { + try!(dest.write_str(" ")); + try!(filter.to_css(dest)); + } + Ok(()) + } + } + + impl ToCss for SpecifiedValue { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + let mut iter = self.0.iter(); + if let Some(filter) = iter.next() { + try!(filter.to_css(dest)); + } else { + try!(dest.write_str("none")); + return Ok(()) + } + for filter in iter { + try!(dest.write_str(" ")); + try!(filter.to_css(dest)); + } + Ok(()) + } + } + + impl ToCss for computed_value::Filter { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match *self { + computed_value::Filter::Blur(value) => { + try!(dest.write_str("blur(")); + try!(value.to_css(dest)); + try!(dest.write_str(")")); + } + computed_value::Filter::Brightness(value) => try!(write!(dest, "brightness({})", value)), + computed_value::Filter::Contrast(value) => try!(write!(dest, "contrast({})", value)), + computed_value::Filter::Grayscale(value) => try!(write!(dest, "grayscale({})", value)), + computed_value::Filter::HueRotate(value) => { + try!(dest.write_str("hue-rotate(")); + try!(value.to_css(dest)); + try!(dest.write_str(")")); + } + computed_value::Filter::Invert(value) => try!(write!(dest, "invert({})", value)), + computed_value::Filter::Opacity(value) => try!(write!(dest, "opacity({})", value)), + computed_value::Filter::Saturate(value) => try!(write!(dest, "saturate({})", value)), + computed_value::Filter::Sepia(value) => try!(write!(dest, "sepia({})", value)), + } + Ok(()) + } + } + + impl ToCss for SpecifiedFilter { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match *self { + SpecifiedFilter::Blur(value) => { + try!(dest.write_str("blur(")); + try!(value.to_css(dest)); + try!(dest.write_str(")")); + } + SpecifiedFilter::Brightness(value) => try!(write!(dest, "brightness({})", value)), + SpecifiedFilter::Contrast(value) => try!(write!(dest, "contrast({})", value)), + SpecifiedFilter::Grayscale(value) => try!(write!(dest, "grayscale({})", value)), + SpecifiedFilter::HueRotate(value) => { + try!(dest.write_str("hue-rotate(")); + try!(value.to_css(dest)); + try!(dest.write_str(")")); + } + SpecifiedFilter::Invert(value) => try!(write!(dest, "invert({})", value)), + SpecifiedFilter::Opacity(value) => try!(write!(dest, "opacity({})", value)), + SpecifiedFilter::Saturate(value) => try!(write!(dest, "saturate({})", value)), + SpecifiedFilter::Sepia(value) => try!(write!(dest, "sepia({})", value)), + } + Ok(()) + } + } + + #[inline] + pub fn get_initial_value() -> computed_value::T { + computed_value::T::new(Vec::new()) + } + + pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { + let mut filters = Vec::new(); + if input.try(|input| input.expect_ident_matching("none")).is_ok() { + return Ok(SpecifiedValue(filters)) + } + loop { + if let Ok(function_name) = input.try(|input| input.expect_function()) { + filters.push(try!(input.parse_nested_block(|input| { + match_ignore_ascii_case! { function_name, + "blur" => specified::Length::parse_non_negative(input).map(SpecifiedFilter::Blur), + "brightness" => parse_factor(input).map(SpecifiedFilter::Brightness), + "contrast" => parse_factor(input).map(SpecifiedFilter::Contrast), + "grayscale" => parse_factor(input).map(SpecifiedFilter::Grayscale), + "hue-rotate" => Angle::parse(input).map(SpecifiedFilter::HueRotate), + "invert" => parse_factor(input).map(SpecifiedFilter::Invert), + "opacity" => parse_factor(input).map(SpecifiedFilter::Opacity), + "saturate" => parse_factor(input).map(SpecifiedFilter::Saturate), + "sepia" => parse_factor(input).map(SpecifiedFilter::Sepia), + _ => Err(()) + } + }))); + } else if filters.is_empty() { + return Err(()) + } else { + return Ok(SpecifiedValue(filters)) + } + } + } + + fn parse_factor(input: &mut Parser) -> Result<::values::CSSFloat, ()> { + use cssparser::Token; + match input.next() { + Ok(Token::Number(value)) => Ok(value.value), + Ok(Token::Percentage(value)) => Ok(value.unit_value), + _ => Err(()) + } + } + + impl ToComputedValue for SpecifiedValue { + type ComputedValue = computed_value::T; + + fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { + computed_value::T{ filters: self.0.iter().map(|value| { + match *value { + SpecifiedFilter::Blur(factor) => + computed_value::Filter::Blur(factor.to_computed_value(context)), + SpecifiedFilter::Brightness(factor) => computed_value::Filter::Brightness(factor), + SpecifiedFilter::Contrast(factor) => computed_value::Filter::Contrast(factor), + SpecifiedFilter::Grayscale(factor) => computed_value::Filter::Grayscale(factor), + SpecifiedFilter::HueRotate(factor) => computed_value::Filter::HueRotate(factor), + SpecifiedFilter::Invert(factor) => computed_value::Filter::Invert(factor), + SpecifiedFilter::Opacity(factor) => computed_value::Filter::Opacity(factor), + SpecifiedFilter::Saturate(factor) => computed_value::Filter::Saturate(factor), + SpecifiedFilter::Sepia(factor) => computed_value::Filter::Sepia(factor), + } + }).collect() } + } + } +</%helpers:longhand> + +<%helpers:longhand name="transform"> + use app_units::Au; + use values::CSSFloat; + + use cssparser::ToCss; + use std::fmt; + + pub mod computed_value { + use values::CSSFloat; + use values::computed; + + #[derive(Clone, Copy, Debug, PartialEq, HeapSizeOf)] + pub struct ComputedMatrix { + pub m11: CSSFloat, pub m12: CSSFloat, pub m13: CSSFloat, pub m14: CSSFloat, + pub m21: CSSFloat, pub m22: CSSFloat, pub m23: CSSFloat, pub m24: CSSFloat, + pub m31: CSSFloat, pub m32: CSSFloat, pub m33: CSSFloat, pub m34: CSSFloat, + pub m41: CSSFloat, pub m42: CSSFloat, pub m43: CSSFloat, pub m44: CSSFloat, + } + + impl ComputedMatrix { + pub fn identity() -> ComputedMatrix { + ComputedMatrix { + m11: 1.0, m12: 0.0, m13: 0.0, m14: 0.0, + m21: 0.0, m22: 1.0, m23: 0.0, m24: 0.0, + m31: 0.0, m32: 0.0, m33: 1.0, m34: 0.0, + m41: 0.0, m42: 0.0, m43: 0.0, m44: 1.0 + } + } + } + + #[derive(Clone, Debug, PartialEq, HeapSizeOf)] + pub enum ComputedOperation { + Matrix(ComputedMatrix), + Skew(computed::Angle, computed::Angle), + Translate(computed::LengthOrPercentage, + computed::LengthOrPercentage, + computed::Length), + Scale(CSSFloat, CSSFloat, CSSFloat), + Rotate(CSSFloat, CSSFloat, CSSFloat, computed::Angle), + Perspective(computed::Length), + } + + #[derive(Clone, Debug, PartialEq, HeapSizeOf)] + pub struct T(pub Option<Vec<ComputedOperation>>); + } + + pub use self::computed_value::ComputedMatrix as SpecifiedMatrix; + + fn parse_two_lengths_or_percentages(input: &mut Parser) + -> Result<(specified::LengthOrPercentage, + specified::LengthOrPercentage),()> { + let first = try!(specified::LengthOrPercentage::parse(input)); + let second = input.try(|input| { + try!(input.expect_comma()); + specified::LengthOrPercentage::parse(input) + }).unwrap_or(specified::LengthOrPercentage::zero()); + Ok((first, second)) + } + + fn parse_two_floats(input: &mut Parser) -> Result<(CSSFloat,CSSFloat),()> { + let first = try!(specified::parse_number(input)); + let second = input.try(|input| { + try!(input.expect_comma()); + specified::parse_number(input) + }).unwrap_or(first); + Ok((first, second)) + } + + fn parse_two_angles(input: &mut Parser) -> Result<(specified::Angle, specified::Angle),()> { + let first = try!(specified::Angle::parse(input)); + let second = input.try(|input| { + try!(input.expect_comma()); + specified::Angle::parse(input) + }).unwrap_or(specified::Angle(0.0)); + Ok((first, second)) + } + + #[derive(Copy, Clone, Debug, PartialEq, HeapSizeOf)] + enum TranslateKind { + Translate, + TranslateX, + TranslateY, + TranslateZ, + Translate3D, + } + + #[derive(Clone, Debug, PartialEq, HeapSizeOf)] + enum SpecifiedOperation { + Matrix(SpecifiedMatrix), + Skew(specified::Angle, specified::Angle), + Translate(TranslateKind, + specified::LengthOrPercentage, + specified::LengthOrPercentage, + specified::Length), + Scale(CSSFloat, CSSFloat, CSSFloat), + Rotate(CSSFloat, CSSFloat, CSSFloat, specified::Angle), + Perspective(specified::Length), + } + + impl ToCss for computed_value::T { + fn to_css<W>(&self, _: &mut W) -> fmt::Result where W: fmt::Write { + // TODO(pcwalton) + Ok(()) + } + } + + impl ToCss for SpecifiedOperation { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match *self { + // todo(gw): implement serialization for transform + // types other than translate. + SpecifiedOperation::Matrix(_m) => { + Ok(()) + } + SpecifiedOperation::Skew(_sx, _sy) => { + Ok(()) + } + SpecifiedOperation::Translate(kind, tx, ty, tz) => { + match kind { + TranslateKind::Translate => { + try!(dest.write_str("translate(")); + try!(tx.to_css(dest)); + try!(dest.write_str(", ")); + try!(ty.to_css(dest)); + dest.write_str(")") + } + TranslateKind::TranslateX => { + try!(dest.write_str("translateX(")); + try!(tx.to_css(dest)); + dest.write_str(")") + } + TranslateKind::TranslateY => { + try!(dest.write_str("translateY(")); + try!(ty.to_css(dest)); + dest.write_str(")") + } + TranslateKind::TranslateZ => { + try!(dest.write_str("translateZ(")); + try!(tz.to_css(dest)); + dest.write_str(")") + } + TranslateKind::Translate3D => { + try!(dest.write_str("translate3d(")); + try!(tx.to_css(dest)); + try!(dest.write_str(", ")); + try!(ty.to_css(dest)); + try!(dest.write_str(", ")); + try!(tz.to_css(dest)); + dest.write_str(")") + } + } + } + SpecifiedOperation::Scale(_sx, _sy, _sz) => { + Ok(()) + } + SpecifiedOperation::Rotate(_ax, _ay, _az, _angle) => { + Ok(()) + } + SpecifiedOperation::Perspective(_p) => { + Ok(()) + } + } + } + } + + #[derive(Clone, Debug, PartialEq, HeapSizeOf)] + pub struct SpecifiedValue(Vec<SpecifiedOperation>); + + impl ToCss for SpecifiedValue { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + let mut first = true; + for operation in &self.0 { + if !first { + try!(dest.write_str(" ")); + } + first = false; + try!(operation.to_css(dest)) + } + Ok(()) + } + } + + #[inline] + pub fn get_initial_value() -> computed_value::T { + computed_value::T(None) + } + + pub fn parse(_: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue,()> { + if input.try(|input| input.expect_ident_matching("none")).is_ok() { + return Ok(SpecifiedValue(Vec::new())) + } + + let mut result = Vec::new(); + loop { + let name = match input.expect_function() { + Ok(name) => name, + Err(_) => break, + }; + match_ignore_ascii_case! { + name, + "matrix" => { + try!(input.parse_nested_block(|input| { + let values = try!(input.parse_comma_separated(|input| { + specified::parse_number(input) + })); + if values.len() != 6 { + return Err(()) + } + result.push(SpecifiedOperation::Matrix( + SpecifiedMatrix { + m11: values[0], m12: values[1], m13: 0.0, m14: 0.0, + m21: values[2], m22: values[3], m23: 0.0, m24: 0.0, + m31: 0.0, m32: 0.0, m33: 1.0, m34: 0.0, + m41: values[4], m42: values[5], m43: 0.0, m44: 1.0 + })); + Ok(()) + })) + }, + "matrix3d" => { + try!(input.parse_nested_block(|input| { + let values = try!(input.parse_comma_separated(|input| { + specified::parse_number(input) + })); + if values.len() != 16 { + return Err(()) + } + result.push(SpecifiedOperation::Matrix( + SpecifiedMatrix { + m11: values[ 0], m12: values[ 1], m13: values[ 2], m14: values[ 3], + m21: values[ 4], m22: values[ 5], m23: values[ 6], m24: values[ 7], + m31: values[ 8], m32: values[ 9], m33: values[10], m34: values[11], + m41: values[12], m42: values[13], m43: values[14], m44: values[15] + })); + Ok(()) + })) + }, + "translate" => { + try!(input.parse_nested_block(|input| { + let (tx, ty) = try!(parse_two_lengths_or_percentages(input)); + result.push(SpecifiedOperation::Translate(TranslateKind::Translate, + tx, + ty, + specified::Length::Absolute(Au(0)))); + Ok(()) + })) + }, + "translatex" => { + try!(input.parse_nested_block(|input| { + let tx = try!(specified::LengthOrPercentage::parse(input)); + result.push(SpecifiedOperation::Translate( + TranslateKind::TranslateX, + tx, + specified::LengthOrPercentage::zero(), + specified::Length::Absolute(Au(0)))); + Ok(()) + })) + }, + "translatey" => { + try!(input.parse_nested_block(|input| { + let ty = try!(specified::LengthOrPercentage::parse(input)); + result.push(SpecifiedOperation::Translate( + TranslateKind::TranslateY, + specified::LengthOrPercentage::zero(), + ty, + specified::Length::Absolute(Au(0)))); + Ok(()) + })) + }, + "translatez" => { + try!(input.parse_nested_block(|input| { + let tz = try!(specified::Length::parse(input)); + result.push(SpecifiedOperation::Translate( + TranslateKind::TranslateZ, + specified::LengthOrPercentage::zero(), + specified::LengthOrPercentage::zero(), + tz)); + Ok(()) + })) + }, + "translate3d" => { + try!(input.parse_nested_block(|input| { + let tx = try!(specified::LengthOrPercentage::parse(input)); + try!(input.expect_comma()); + let ty = try!(specified::LengthOrPercentage::parse(input)); + try!(input.expect_comma()); + let tz = try!(specified::Length::parse(input)); + result.push(SpecifiedOperation::Translate( + TranslateKind::Translate3D, + tx, + ty, + tz)); + Ok(()) + })) + + }, + "scale" => { + try!(input.parse_nested_block(|input| { + let (sx, sy) = try!(parse_two_floats(input)); + result.push(SpecifiedOperation::Scale(sx, sy, 1.0)); + Ok(()) + })) + }, + "scalex" => { + try!(input.parse_nested_block(|input| { + let sx = try!(specified::parse_number(input)); + result.push(SpecifiedOperation::Scale(sx, 1.0, 1.0)); + Ok(()) + })) + }, + "scaley" => { + try!(input.parse_nested_block(|input| { + let sy = try!(specified::parse_number(input)); + result.push(SpecifiedOperation::Scale(1.0, sy, 1.0)); + Ok(()) + })) + }, + "scalez" => { + try!(input.parse_nested_block(|input| { + let sz = try!(specified::parse_number(input)); + result.push(SpecifiedOperation::Scale(1.0, 1.0, sz)); + Ok(()) + })) + }, + "scale3d" => { + try!(input.parse_nested_block(|input| { + let sx = try!(specified::parse_number(input)); + try!(input.expect_comma()); + let sy = try!(specified::parse_number(input)); + try!(input.expect_comma()); + let sz = try!(specified::parse_number(input)); + result.push(SpecifiedOperation::Scale(sx, sy, sz)); + Ok(()) + })) + }, + "rotate" => { + try!(input.parse_nested_block(|input| { + let theta = try!(specified::Angle::parse(input)); + result.push(SpecifiedOperation::Rotate(0.0, 0.0, 1.0, theta)); + Ok(()) + })) + }, + "rotatex" => { + try!(input.parse_nested_block(|input| { + let theta = try!(specified::Angle::parse(input)); + result.push(SpecifiedOperation::Rotate(1.0, 0.0, 0.0, theta)); + Ok(()) + })) + }, + "rotatey" => { + try!(input.parse_nested_block(|input| { + let theta = try!(specified::Angle::parse(input)); + result.push(SpecifiedOperation::Rotate(0.0, 1.0, 0.0, theta)); + Ok(()) + })) + }, + "rotatez" => { + try!(input.parse_nested_block(|input| { + let theta = try!(specified::Angle::parse(input)); + result.push(SpecifiedOperation::Rotate(0.0, 0.0, 1.0, theta)); + Ok(()) + })) + }, + "rotate3d" => { + try!(input.parse_nested_block(|input| { + let ax = try!(specified::parse_number(input)); + try!(input.expect_comma()); + let ay = try!(specified::parse_number(input)); + try!(input.expect_comma()); + let az = try!(specified::parse_number(input)); + try!(input.expect_comma()); + let theta = try!(specified::Angle::parse(input)); + // TODO(gw): Check the axis can be normalized!! + result.push(SpecifiedOperation::Rotate(ax, ay, az, theta)); + Ok(()) + })) + }, + "skew" => { + try!(input.parse_nested_block(|input| { + let (theta_x, theta_y) = try!(parse_two_angles(input)); + result.push(SpecifiedOperation::Skew(theta_x, theta_y)); + Ok(()) + })) + }, + "skewx" => { + try!(input.parse_nested_block(|input| { + let theta_x = try!(specified::Angle::parse(input)); + result.push(SpecifiedOperation::Skew(theta_x, specified::Angle(0.0))); + Ok(()) + })) + }, + "skewy" => { + try!(input.parse_nested_block(|input| { + let theta_y = try!(specified::Angle::parse(input)); + result.push(SpecifiedOperation::Skew(specified::Angle(0.0), theta_y)); + Ok(()) + })) + }, + "perspective" => { + try!(input.parse_nested_block(|input| { + let d = try!(specified::Length::parse(input)); + result.push(SpecifiedOperation::Perspective(d)); + Ok(()) + })) + }, + _ => return Err(()) + } + } + + if !result.is_empty() { + Ok(SpecifiedValue(result)) + } else { + Err(()) + } + } + + impl ToComputedValue for SpecifiedValue { + type ComputedValue = computed_value::T; + + #[inline] + fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { + if self.0.is_empty() { + return computed_value::T(None) + } + + let mut result = vec!(); + for operation in &self.0 { + match *operation { + SpecifiedOperation::Matrix(ref matrix) => { + result.push(computed_value::ComputedOperation::Matrix(*matrix)); + } + SpecifiedOperation::Translate(_, ref tx, ref ty, ref tz) => { + result.push(computed_value::ComputedOperation::Translate(tx.to_computed_value(context), + ty.to_computed_value(context), + tz.to_computed_value(context))); + } + SpecifiedOperation::Scale(sx, sy, sz) => { + result.push(computed_value::ComputedOperation::Scale(sx, sy, sz)); + } + SpecifiedOperation::Rotate(ax, ay, az, theta) => { + result.push(computed_value::ComputedOperation::Rotate(ax, ay, az, theta)); + } + SpecifiedOperation::Skew(theta_x, theta_y) => { + result.push(computed_value::ComputedOperation::Skew(theta_x, theta_y)); + } + SpecifiedOperation::Perspective(d) => { + result.push(computed_value::ComputedOperation::Perspective(d.to_computed_value(context))); + } + }; + } + + computed_value::T(Some(result)) + } + } +</%helpers:longhand> + +pub struct OriginParseResult { + horizontal: Option<specified::LengthOrPercentage>, + vertical: Option<specified::LengthOrPercentage>, + depth: Option<specified::Length> +} + +pub fn parse_origin(_: &ParserContext, input: &mut Parser) -> Result<OriginParseResult,()> { + use values::specified::{LengthOrPercentage, Percentage}; + let (mut horizontal, mut vertical, mut depth) = (None, None, None); + loop { + if let Err(_) = input.try(|input| { + let token = try!(input.expect_ident()); + match_ignore_ascii_case! { + token, + "left" => { + if horizontal.is_none() { + horizontal = Some(LengthOrPercentage::Percentage(Percentage(0.0))) + } else { + return Err(()) + } + }, + "center" => { + if horizontal.is_none() { + horizontal = Some(LengthOrPercentage::Percentage(Percentage(0.5))) + } else if vertical.is_none() { + vertical = Some(LengthOrPercentage::Percentage(Percentage(0.5))) + } else { + return Err(()) + } + }, + "right" => { + if horizontal.is_none() { + horizontal = Some(LengthOrPercentage::Percentage(Percentage(1.0))) + } else { + return Err(()) + } + }, + "top" => { + if vertical.is_none() { + vertical = Some(LengthOrPercentage::Percentage(Percentage(0.0))) + } else { + return Err(()) + } + }, + "bottom" => { + if vertical.is_none() { + vertical = Some(LengthOrPercentage::Percentage(Percentage(1.0))) + } else { + return Err(()) + } + }, + _ => return Err(()) + } + Ok(()) + }) { + match LengthOrPercentage::parse(input) { + Ok(value) => { + if horizontal.is_none() { + horizontal = Some(value); + } else if vertical.is_none() { + vertical = Some(value); + } else if let LengthOrPercentage::Length(length) = value { + depth = Some(length); + } else { + break; + } + } + _ => break, + } + } + } + + if horizontal.is_some() || vertical.is_some() { + Ok(OriginParseResult { + horizontal: horizontal, + vertical: vertical, + depth: depth, + }) + } else { + Err(()) + } +} + +${helpers.single_keyword("backface-visibility", "visible hidden")} + +${helpers.single_keyword("transform-box", "border-box fill-box view-box", products="gecko")} + +${helpers.single_keyword("transform-style", "auto flat preserve-3d")} + +<%helpers:longhand name="transform-origin"> + use app_units::Au; + use values::AuExtensionMethods; + use values::specified::{Length, LengthOrPercentage, Percentage}; + + use cssparser::ToCss; + use std::fmt; + + pub mod computed_value { + use values::computed::{Length, LengthOrPercentage}; + + #[derive(Clone, Copy, Debug, PartialEq, HeapSizeOf)] + pub struct T { + pub horizontal: LengthOrPercentage, + pub vertical: LengthOrPercentage, + pub depth: Length, + } + } + + #[derive(Clone, Copy, Debug, PartialEq, HeapSizeOf)] + pub struct SpecifiedValue { + horizontal: LengthOrPercentage, + vertical: LengthOrPercentage, + depth: Length, + } + + impl ToCss for computed_value::T { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + try!(self.horizontal.to_css(dest)); + try!(dest.write_str(" ")); + try!(self.vertical.to_css(dest)); + try!(dest.write_str(" ")); + self.depth.to_css(dest) + } + } + + impl ToCss for SpecifiedValue { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + try!(self.horizontal.to_css(dest)); + try!(dest.write_str(" ")); + try!(self.vertical.to_css(dest)); + try!(dest.write_str(" ")); + self.depth.to_css(dest) + } + } + + #[inline] + pub fn get_initial_value() -> computed_value::T { + computed_value::T { + horizontal: computed::LengthOrPercentage::Percentage(0.5), + vertical: computed::LengthOrPercentage::Percentage(0.5), + depth: Au(0), + } + } + + pub fn parse(context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue,()> { + let result = try!(super::parse_origin(context, input)); + Ok(SpecifiedValue { + horizontal: result.horizontal.unwrap_or(LengthOrPercentage::Percentage(Percentage(0.5))), + vertical: result.vertical.unwrap_or(LengthOrPercentage::Percentage(Percentage(0.5))), + depth: result.depth.unwrap_or(Length::Absolute(Au(0))), + }) + } + + impl ToComputedValue for SpecifiedValue { + type ComputedValue = computed_value::T; + + #[inline] + fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { + computed_value::T { + horizontal: self.horizontal.to_computed_value(context), + vertical: self.vertical.to_computed_value(context), + depth: self.depth.to_computed_value(context), + } + } + } +</%helpers:longhand> + +${helpers.predefined_type("perspective", + "LengthOrNone", + "computed::LengthOrNone::None")} + +<%helpers:longhand name="perspective-origin"> + use values::specified::{LengthOrPercentage, Percentage}; + + use cssparser::ToCss; + use std::fmt; + + pub mod computed_value { + use values::computed::LengthOrPercentage; + + #[derive(Clone, Copy, Debug, PartialEq, HeapSizeOf)] + pub struct T { + pub horizontal: LengthOrPercentage, + pub vertical: LengthOrPercentage, + } + } + + impl ToCss for computed_value::T { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + try!(self.horizontal.to_css(dest)); + try!(dest.write_str(" ")); + self.vertical.to_css(dest) + } + } + + #[derive(Clone, Copy, Debug, PartialEq, HeapSizeOf)] + pub struct SpecifiedValue { + horizontal: LengthOrPercentage, + vertical: LengthOrPercentage, + } + + impl ToCss for SpecifiedValue { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + try!(self.horizontal.to_css(dest)); + try!(dest.write_str(" ")); + self.vertical.to_css(dest) + } + } + + #[inline] + pub fn get_initial_value() -> computed_value::T { + computed_value::T { + horizontal: computed::LengthOrPercentage::Percentage(0.5), + vertical: computed::LengthOrPercentage::Percentage(0.5), + } + } + + pub fn parse(context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue,()> { + let result = try!(super::parse_origin(context, input)); + match result.depth { + Some(_) => Err(()), + None => Ok(SpecifiedValue { + horizontal: result.horizontal.unwrap_or(LengthOrPercentage::Percentage(Percentage(0.5))), + vertical: result.vertical.unwrap_or(LengthOrPercentage::Percentage(Percentage(0.5))), + }) + } + } + + impl ToComputedValue for SpecifiedValue { + type ComputedValue = computed_value::T; + + #[inline] + fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { + computed_value::T { + horizontal: self.horizontal.to_computed_value(context), + vertical: self.vertical.to_computed_value(context), + } + } + } +</%helpers:longhand> + +${helpers.single_keyword("mix-blend-mode", + """normal multiply screen overlay darken lighten color-dodge + color-burn hard-light soft-light difference exclusion hue + saturation color luminosity""", gecko_constant_prefix="NS_STYLE_BLEND")} diff --git a/components/style/properties/longhand/font.mako.rs b/components/style/properties/longhand/font.mako.rs new file mode 100644 index 00000000000..b12acc6ccc7 --- /dev/null +++ b/components/style/properties/longhand/font.mako.rs @@ -0,0 +1,312 @@ +/* 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/. */ + +<%namespace name="helpers" file="/helpers.mako.rs" /> +<% from data import Method %> + +<% data.new_style_struct("Font", + inherited=True, + gecko_ffi_name="nsStyleFont", + additional_methods=[Method("compute_font_hash", is_mut=True)]) %> +<%helpers:longhand name="font-family"> + use self::computed_value::FontFamily; + use values::computed::ComputedValueAsSpecified; + pub use self::computed_value::T as SpecifiedValue; + + const SERIF: &'static str = "serif"; + const SANS_SERIF: &'static str = "sans-serif"; + const CURSIVE: &'static str = "cursive"; + const FANTASY: &'static str = "fantasy"; + const MONOSPACE: &'static str = "monospace"; + + impl ComputedValueAsSpecified for SpecifiedValue {} + pub mod computed_value { + use cssparser::ToCss; + use std::fmt; + use string_cache::Atom; + + #[derive(Debug, PartialEq, Eq, Clone, Hash, HeapSizeOf, Deserialize, Serialize)] + pub enum FontFamily { + FamilyName(Atom), + // Generic, + Serif, + SansSerif, + Cursive, + Fantasy, + Monospace, + } + impl FontFamily { + #[inline] + pub fn name(&self) -> &str { + match *self { + FontFamily::FamilyName(ref name) => &*name, + FontFamily::Serif => super::SERIF, + FontFamily::SansSerif => super::SANS_SERIF, + FontFamily::Cursive => super::CURSIVE, + FontFamily::Fantasy => super::FANTASY, + FontFamily::Monospace => super::MONOSPACE + } + } + + pub fn from_atom(input: Atom) -> FontFamily { + let option = match_ignore_ascii_case! { &input, + super::SERIF => Some(FontFamily::Serif), + super::SANS_SERIF => Some(FontFamily::SansSerif), + super::CURSIVE => Some(FontFamily::Cursive), + super::FANTASY => Some(FontFamily::Fantasy), + super::MONOSPACE => Some(FontFamily::Monospace), + _ => None + }; + + match option { + Some(family) => family, + None => FontFamily::FamilyName(input) + } + } + } + impl ToCss for FontFamily { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + dest.write_str(self.name()) + } + } + impl ToCss for T { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + let mut iter = self.0.iter(); + try!(iter.next().unwrap().to_css(dest)); + for family in iter { + try!(dest.write_str(", ")); + try!(family.to_css(dest)); + } + Ok(()) + } + } + #[derive(Debug, Clone, PartialEq, Eq, Hash, HeapSizeOf)] + pub struct T(pub Vec<FontFamily>); + } + + #[inline] + pub fn get_initial_value() -> computed_value::T { + computed_value::T(vec![FontFamily::Serif]) + } + /// <family-name># + /// <family-name> = <string> | [ <ident>+ ] + /// TODO: <generic-family> + pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { + input.parse_comma_separated(parse_one_family).map(SpecifiedValue) + } + pub fn parse_one_family(input: &mut Parser) -> Result<FontFamily, ()> { + if let Ok(value) = input.try(|input| input.expect_string()) { + return Ok(FontFamily::FamilyName(Atom::from(&*value))) + } + let first_ident = try!(input.expect_ident()); + + match_ignore_ascii_case! { first_ident, + SERIF => return Ok(FontFamily::Serif), + SANS_SERIF => return Ok(FontFamily::SansSerif), + CURSIVE => return Ok(FontFamily::Cursive), + FANTASY => return Ok(FontFamily::Fantasy), + MONOSPACE => return Ok(FontFamily::Monospace), + _ => {} + } + let mut value = first_ident.into_owned(); + while let Ok(ident) = input.try(|input| input.expect_ident()) { + value.push_str(" "); + value.push_str(&ident); + } + Ok(FontFamily::FamilyName(Atom::from(value))) + } +</%helpers:longhand> + + +${helpers.single_keyword("font-style", "normal italic oblique")} +${helpers.single_keyword("font-variant", "normal small-caps")} + +<%helpers:longhand name="font-weight" need_clone="True"> + use cssparser::ToCss; + use std::fmt; + + #[derive(Debug, Clone, PartialEq, Eq, Copy, HeapSizeOf)] + pub enum SpecifiedValue { + Bolder, + Lighter, + % for weight in range(100, 901, 100): + Weight${weight}, + % endfor + } + + impl ToCss for SpecifiedValue { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match *self { + SpecifiedValue::Bolder => dest.write_str("bolder"), + SpecifiedValue::Lighter => dest.write_str("lighter"), + % for weight in range(100, 901, 100): + SpecifiedValue::Weight${weight} => dest.write_str("${weight}"), + % endfor + } + } + } + /// normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 + pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { + input.try(|input| { + match_ignore_ascii_case! { try!(input.expect_ident()), + "bold" => Ok(SpecifiedValue::Weight700), + "normal" => Ok(SpecifiedValue::Weight400), + "bolder" => Ok(SpecifiedValue::Bolder), + "lighter" => Ok(SpecifiedValue::Lighter), + _ => Err(()) + } + }).or_else(|()| { + match try!(input.expect_integer()) { + 100 => Ok(SpecifiedValue::Weight100), + 200 => Ok(SpecifiedValue::Weight200), + 300 => Ok(SpecifiedValue::Weight300), + 400 => Ok(SpecifiedValue::Weight400), + 500 => Ok(SpecifiedValue::Weight500), + 600 => Ok(SpecifiedValue::Weight600), + 700 => Ok(SpecifiedValue::Weight700), + 800 => Ok(SpecifiedValue::Weight800), + 900 => Ok(SpecifiedValue::Weight900), + _ => Err(()) + } + }) + } + pub mod computed_value { + use std::fmt; + #[derive(PartialEq, Eq, Copy, Clone, Hash, Deserialize, Serialize, HeapSizeOf, Debug)] + pub enum T { + % for weight in range(100, 901, 100): + Weight${weight} = ${weight}, + % endfor + } + impl T { + #[inline] + pub fn is_bold(self) -> bool { + match self { + T::Weight900 | T::Weight800 | + T::Weight700 | T::Weight600 => true, + _ => false + } + } + } + } + impl ToCss for computed_value::T { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match *self { + % for weight in range(100, 901, 100): + computed_value::T::Weight${weight} => dest.write_str("${weight}"), + % endfor + } + } + } + #[inline] + pub fn get_initial_value() -> computed_value::T { + computed_value::T::Weight400 // normal + } + + impl ToComputedValue for SpecifiedValue { + type ComputedValue = computed_value::T; + + #[inline] + fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { + match *self { + % for weight in range(100, 901, 100): + SpecifiedValue::Weight${weight} => computed_value::T::Weight${weight}, + % endfor + SpecifiedValue::Bolder => match context.inherited_style().get_font().clone_font_weight() { + computed_value::T::Weight100 => computed_value::T::Weight400, + computed_value::T::Weight200 => computed_value::T::Weight400, + computed_value::T::Weight300 => computed_value::T::Weight400, + computed_value::T::Weight400 => computed_value::T::Weight700, + computed_value::T::Weight500 => computed_value::T::Weight700, + computed_value::T::Weight600 => computed_value::T::Weight900, + computed_value::T::Weight700 => computed_value::T::Weight900, + computed_value::T::Weight800 => computed_value::T::Weight900, + computed_value::T::Weight900 => computed_value::T::Weight900, + }, + SpecifiedValue::Lighter => match context.inherited_style().get_font().clone_font_weight() { + computed_value::T::Weight100 => computed_value::T::Weight100, + computed_value::T::Weight200 => computed_value::T::Weight100, + computed_value::T::Weight300 => computed_value::T::Weight100, + computed_value::T::Weight400 => computed_value::T::Weight100, + computed_value::T::Weight500 => computed_value::T::Weight100, + computed_value::T::Weight600 => computed_value::T::Weight400, + computed_value::T::Weight700 => computed_value::T::Weight400, + computed_value::T::Weight800 => computed_value::T::Weight700, + computed_value::T::Weight900 => computed_value::T::Weight700, + }, + } + } + } +</%helpers:longhand> + +<%helpers:longhand name="font-size" need_clone="True"> + use app_units::Au; + use cssparser::ToCss; + use std::fmt; + use values::FONT_MEDIUM_PX; + use values::specified::{LengthOrPercentage, Length, Percentage}; + + impl ToCss for SpecifiedValue { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + self.0.to_css(dest) + } + } + + #[derive(Debug, Clone, PartialEq, HeapSizeOf)] + pub struct SpecifiedValue(pub specified::LengthOrPercentage); + pub mod computed_value { + use app_units::Au; + pub type T = Au; + } + #[inline] pub fn get_initial_value() -> computed_value::T { + Au::from_px(FONT_MEDIUM_PX) + } + + impl ToComputedValue for SpecifiedValue { + type ComputedValue = computed_value::T; + + #[inline] + fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { + match self.0 { + LengthOrPercentage::Length(Length::FontRelative(value)) => { + value.to_computed_value(context.inherited_style().get_font().clone_font_size(), + context.style().root_font_size()) + } + LengthOrPercentage::Length(Length::ServoCharacterWidth(value)) => { + value.to_computed_value(context.inherited_style().get_font().clone_font_size()) + } + LengthOrPercentage::Length(l) => { + l.to_computed_value(context) + } + LengthOrPercentage::Percentage(Percentage(value)) => { + context.inherited_style().get_font().clone_font_size().scale_by(value) + } + LengthOrPercentage::Calc(calc) => { + let calc = calc.to_computed_value(context); + calc.length() + context.inherited_style().get_font().clone_font_size() + .scale_by(calc.percentage()) + } + } + } + } + /// <length> | <percentage> | <absolute-size> | <relative-size> + pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { + use values::specified::{Length, LengthOrPercentage}; + + input.try(specified::LengthOrPercentage::parse_non_negative) + .or_else(|()| { + let ident = try!(input.expect_ident()); + specified::Length::from_str(&ident as &str) + .ok_or(()) + .map(specified::LengthOrPercentage::Length) + }) + .map(SpecifiedValue) + } +</%helpers:longhand> + +${helpers.single_keyword("font-stretch", + "normal ultra-condensed extra-condensed condensed semi-condensed semi-expanded \ + expanded extra-expanded ultra-expanded")} + +${helpers.single_keyword("font-kerning", "auto none normal", products="gecko")} diff --git a/components/style/properties/longhand/inherited_box.mako.rs b/components/style/properties/longhand/inherited_box.mako.rs new file mode 100644 index 00000000000..4c8dd202596 --- /dev/null +++ b/components/style/properties/longhand/inherited_box.mako.rs @@ -0,0 +1,90 @@ +/* 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/. */ + +<%namespace name="helpers" file="/helpers.mako.rs" /> + +<% data.new_style_struct("InheritedBox", inherited=True, gecko_ffi_name="nsStyleVisibility") %> + +${helpers.single_keyword("direction", "ltr rtl", need_clone=True)} + +// TODO: collapse. Well, do tables first. +${helpers.single_keyword("visibility", + "visible hidden", + extra_gecko_values="collapse", + gecko_ffi_name="mVisible")} + +// CSS Writing Modes Level 3 +// http://dev.w3.org/csswg/css-writing-modes/ +${helpers.single_keyword("writing-mode", + "horizontal-tb vertical-rl vertical-lr", + experimental=True, + need_clone=True)} + +// FIXME(SimonSapin): Add 'mixed' and 'upright' (needs vertical text support) +// FIXME(SimonSapin): initial (first) value should be 'mixed', when that's implemented +// FIXME(bholley): sideways-right is needed as an alias to sideways in gecko. +${helpers.single_keyword("text-orientation", + "sideways", + experimental=True, + need_clone=True, + extra_gecko_values="mixed upright", + extra_servo_values="sideways-right sideways-left")} + +// CSS Color Module Level 4 +// https://drafts.csswg.org/css-color/ +${helpers.single_keyword("color-adjust", "economy exact", products="gecko")} + +<%helpers:longhand name="image-rendering"> + pub mod computed_value { + use cssparser::ToCss; + use std::fmt; + + #[derive(Copy, Clone, Debug, PartialEq, HeapSizeOf, Deserialize, Serialize)] + pub enum T { + Auto, + CrispEdges, + Pixelated, + } + + impl ToCss for T { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match *self { + T::Auto => dest.write_str("auto"), + T::CrispEdges => dest.write_str("crisp-edges"), + T::Pixelated => dest.write_str("pixelated"), + } + } + } + } + + pub type SpecifiedValue = computed_value::T; + + #[inline] + pub fn get_initial_value() -> computed_value::T { + computed_value::T::Auto + } + + pub fn parse(_: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue,()> { + // According to to CSS-IMAGES-3, `optimizespeed` and `optimizequality` are synonyms for + // `auto`. + match_ignore_ascii_case! { + try!(input.expect_ident()), + "auto" => Ok(computed_value::T::Auto), + "optimizespeed" => Ok(computed_value::T::Auto), + "optimizequality" => Ok(computed_value::T::Auto), + "crisp-edges" => Ok(computed_value::T::CrispEdges), + "pixelated" => Ok(computed_value::T::Pixelated), + _ => Err(()) + } + } + + impl ToComputedValue for SpecifiedValue { + type ComputedValue = computed_value::T; + + #[inline] + fn to_computed_value<Cx: TContext>(&self, _: &Cx) -> computed_value::T { + *self + } + } +</%helpers:longhand> diff --git a/components/style/properties/longhand/inherited_table.mako.rs b/components/style/properties/longhand/inherited_table.mako.rs new file mode 100644 index 00000000000..5ec6a2e1982 --- /dev/null +++ b/components/style/properties/longhand/inherited_table.mako.rs @@ -0,0 +1,100 @@ +/* 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/. */ + + <%namespace name="helpers" file="/helpers.mako.rs" /> + +<% data.new_style_struct("InheritedTable", inherited=True, gecko_ffi_name="nsStyleTableBorder") %> + +${helpers.single_keyword("border-collapse", "separate collapse", gecko_constant_prefix="NS_STYLE_BORDER")} +${helpers.single_keyword("empty-cells", "show hide", gecko_constant_prefix="NS_STYLE_TABLE_EMPTY_CELLS")} +${helpers.single_keyword("caption-side", "top bottom", extra_gecko_values="right left top-outside bottom-outside")} + +<%helpers:longhand name="border-spacing"> + use app_units::Au; + use values::AuExtensionMethods; + + use cssparser::ToCss; + use std::fmt; + + pub mod computed_value { + use app_units::Au; + + #[derive(Clone, Copy, Debug, PartialEq, RustcEncodable, HeapSizeOf)] + pub struct T { + pub horizontal: Au, + pub vertical: Au, + } + } + + #[derive(Clone, Debug, PartialEq, HeapSizeOf)] + pub struct SpecifiedValue { + pub horizontal: specified::Length, + pub vertical: specified::Length, + } + + #[inline] + pub fn get_initial_value() -> computed_value::T { + computed_value::T { + horizontal: Au(0), + vertical: Au(0), + } + } + + impl ToCss for SpecifiedValue { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + try!(self.horizontal.to_css(dest)); + try!(dest.write_str(" ")); + self.vertical.to_css(dest) + } + } + + impl ToCss for computed_value::T { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + try!(self.horizontal.to_css(dest)); + try!(dest.write_str(" ")); + self.vertical.to_css(dest) + } + } + + impl ToComputedValue for SpecifiedValue { + type ComputedValue = computed_value::T; + + #[inline] + fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { + computed_value::T { + horizontal: self.horizontal.to_computed_value(context), + vertical: self.vertical.to_computed_value(context), + } + } + } + + pub fn parse(_: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue,()> { + let mut lengths = [ None, None ]; + for i in 0..2 { + match specified::Length::parse_non_negative(input) { + Err(()) => break, + Ok(length) => lengths[i] = Some(length), + } + } + if input.next().is_ok() { + return Err(()) + } + match (lengths[0], lengths[1]) { + (None, None) => Err(()), + (Some(length), None) => { + Ok(SpecifiedValue { + horizontal: length, + vertical: length, + }) + } + (Some(horizontal), Some(vertical)) => { + Ok(SpecifiedValue { + horizontal: horizontal, + vertical: vertical, + }) + } + (None, Some(_)) => panic!("shouldn't happen"), + } + } +</%helpers:longhand> diff --git a/components/style/properties/longhand/inherited_text.mako.rs b/components/style/properties/longhand/inherited_text.mako.rs new file mode 100644 index 00000000000..32fef25c68a --- /dev/null +++ b/components/style/properties/longhand/inherited_text.mako.rs @@ -0,0 +1,613 @@ +/* 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/. */ + +<%namespace name="helpers" file="/helpers.mako.rs" /> + +<% data.new_style_struct("InheritedText", inherited=True, gecko_ffi_name="nsStyleText") %> + +<%helpers:longhand name="line-height"> + use cssparser::ToCss; + use std::fmt; + use values::AuExtensionMethods; + use values::CSSFloat; + + #[derive(Debug, Clone, PartialEq, Copy, HeapSizeOf)] + pub enum SpecifiedValue { + Normal, + Number(CSSFloat), + LengthOrPercentage(specified::LengthOrPercentage), + } + + impl ToCss for SpecifiedValue { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match *self { + SpecifiedValue::Normal => dest.write_str("normal"), + SpecifiedValue::LengthOrPercentage(value) => value.to_css(dest), + SpecifiedValue::Number(number) => write!(dest, "{}", number), + } + } + } + /// normal | <number> | <length> | <percentage> + pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { + use cssparser::Token; + use std::ascii::AsciiExt; + input.try(specified::LengthOrPercentage::parse_non_negative) + .map(SpecifiedValue::LengthOrPercentage) + .or_else(|()| { + match try!(input.next()) { + Token::Number(ref value) if value.value >= 0. => { + Ok(SpecifiedValue::Number(value.value)) + } + Token::Ident(ref value) if value.eq_ignore_ascii_case("normal") => { + Ok(SpecifiedValue::Normal) + } + _ => Err(()), + } + }) + } + pub mod computed_value { + use app_units::Au; + use std::fmt; + use values::CSSFloat; + #[derive(PartialEq, Copy, Clone, HeapSizeOf, Debug)] + pub enum T { + Normal, + Length(Au), + Number(CSSFloat), + } + } + impl ToCss for computed_value::T { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match *self { + computed_value::T::Normal => dest.write_str("normal"), + computed_value::T::Length(length) => length.to_css(dest), + computed_value::T::Number(number) => write!(dest, "{}", number), + } + } + } + #[inline] + pub fn get_initial_value() -> computed_value::T { computed_value::T::Normal } + + impl ToComputedValue for SpecifiedValue { + type ComputedValue = computed_value::T; + + #[inline] + fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { + match *self { + SpecifiedValue::Normal => computed_value::T::Normal, + SpecifiedValue::Number(value) => computed_value::T::Number(value), + SpecifiedValue::LengthOrPercentage(value) => { + match value { + specified::LengthOrPercentage::Length(value) => + computed_value::T::Length(value.to_computed_value(context)), + specified::LengthOrPercentage::Percentage(specified::Percentage(value)) => { + let fr = specified::Length::FontRelative(specified::FontRelativeLength::Em(value)); + computed_value::T::Length(fr.to_computed_value(context)) + }, + specified::LengthOrPercentage::Calc(calc) => { + let calc = calc.to_computed_value(context); + let fr = specified::FontRelativeLength::Em(calc.percentage()); + let fr = specified::Length::FontRelative(fr); + computed_value::T::Length(calc.length() + fr.to_computed_value(context)) + } + } + } + } + } + } +</%helpers:longhand> + +<%helpers:longhand name="text-align"> + pub use self::computed_value::T as SpecifiedValue; + use values::computed::ComputedValueAsSpecified; + impl ComputedValueAsSpecified for SpecifiedValue {} + pub mod computed_value { + macro_rules! define_text_align { + ( $( $name: ident ( $string: expr ) => $discriminant: expr, )+ ) => { + define_css_keyword_enum! { T: + $( + $string => $name, + )+ + } + impl T { + pub fn to_u32(self) -> u32 { + match self { + $( + T::$name => $discriminant, + )+ + } + } + pub fn from_u32(discriminant: u32) -> Option<T> { + match discriminant { + $( + $discriminant => Some(T::$name), + )+ + _ => None + } + } + } + } + } + define_text_align! { + start("start") => 0, + end("end") => 1, + left("left") => 2, + right("right") => 3, + center("center") => 4, + justify("justify") => 5, + servo_center("-servo-center") => 6, + servo_left("-servo-left") => 7, + servo_right("-servo-right") => 8, + } + } + #[inline] pub fn get_initial_value() -> computed_value::T { + computed_value::T::start + } + pub fn parse(_context: &ParserContext, input: &mut Parser) + -> Result<SpecifiedValue, ()> { + computed_value::T::parse(input) + } +</%helpers:longhand> + +<%helpers:longhand name="letter-spacing"> + use cssparser::ToCss; + use std::fmt; + use values::AuExtensionMethods; + + #[derive(Debug, Clone, Copy, PartialEq, HeapSizeOf)] + pub enum SpecifiedValue { + Normal, + Specified(specified::Length), + } + + impl ToCss for SpecifiedValue { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match *self { + SpecifiedValue::Normal => dest.write_str("normal"), + SpecifiedValue::Specified(l) => l.to_css(dest), + } + } + } + + pub mod computed_value { + use app_units::Au; + #[derive(Debug, Clone, PartialEq, HeapSizeOf)] + pub struct T(pub Option<Au>); + } + + impl ToCss for computed_value::T { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match self.0 { + None => dest.write_str("normal"), + Some(l) => l.to_css(dest), + } + } + } + + #[inline] + pub fn get_initial_value() -> computed_value::T { + computed_value::T(None) + } + + impl ToComputedValue for SpecifiedValue { + type ComputedValue = computed_value::T; + + #[inline] + fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { + match *self { + SpecifiedValue::Normal => computed_value::T(None), + SpecifiedValue::Specified(l) => + computed_value::T(Some(l.to_computed_value(context))) + } + } + } + + pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { + if input.try(|input| input.expect_ident_matching("normal")).is_ok() { + Ok(SpecifiedValue::Normal) + } else { + specified::Length::parse_non_negative(input).map(SpecifiedValue::Specified) + } + } +</%helpers:longhand> + +<%helpers:longhand name="word-spacing"> + use cssparser::ToCss; + use std::fmt; + use values::AuExtensionMethods; + + #[derive(Debug, Clone, Copy, PartialEq, HeapSizeOf)] + pub enum SpecifiedValue { + Normal, + Specified(specified::Length), // FIXME(SimonSapin) support percentages + } + + impl ToCss for SpecifiedValue { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match *self { + SpecifiedValue::Normal => dest.write_str("normal"), + SpecifiedValue::Specified(l) => l.to_css(dest), + } + } + } + + pub mod computed_value { + use app_units::Au; + #[derive(Debug, Clone, PartialEq, HeapSizeOf)] + pub struct T(pub Option<Au>); + } + + impl ToCss for computed_value::T { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match self.0 { + None => dest.write_str("normal"), + Some(l) => l.to_css(dest), + } + } + } + + #[inline] + pub fn get_initial_value() -> computed_value::T { + computed_value::T(None) + } + + impl ToComputedValue for SpecifiedValue { + type ComputedValue = computed_value::T; + + #[inline] + fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { + match *self { + SpecifiedValue::Normal => computed_value::T(None), + SpecifiedValue::Specified(l) => + computed_value::T(Some(l.to_computed_value(context))) + } + } + } + + pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { + if input.try(|input| input.expect_ident_matching("normal")).is_ok() { + Ok(SpecifiedValue::Normal) + } else { + specified::Length::parse_non_negative(input).map(SpecifiedValue::Specified) + } + } +</%helpers:longhand> + +${helpers.predefined_type("text-indent", + "LengthOrPercentage", + "computed::LengthOrPercentage::Length(Au(0))")} + +// Also known as "word-wrap" (which is more popular because of IE), but this is the preferred +// name per CSS-TEXT 6.2. +${helpers.single_keyword("overflow-wrap", + "normal break-word", + gecko_ffi_name="mWordWrap", + gecko_constant_prefix="NS_STYLE_WORDWRAP")} + +// TODO(pcwalton): Support `word-break: keep-all` once we have better CJK support. +${helpers.single_keyword("word-break", + "normal break-all", + extra_gecko_values="keep-all", + gecko_constant_prefix="NS_STYLE_WORDBREAK")} + +// TODO(pcwalton): Support `text-justify: distribute`. +${helpers.single_keyword("text-justify", + "auto none inter-word", + products="servo")} + +<%helpers:longhand name="-servo-text-decorations-in-effect" + derived_from="display text-decoration" need_clone="True" products="servo"> + use cssparser::{RGBA, ToCss}; + use std::fmt; + + use values::computed::ComputedValueAsSpecified; + use properties::style_struct_traits::{Box, Color, Text}; + + impl ComputedValueAsSpecified for SpecifiedValue {} + + #[derive(Clone, PartialEq, Copy, Debug, HeapSizeOf)] + pub struct SpecifiedValue { + pub underline: Option<RGBA>, + pub overline: Option<RGBA>, + pub line_through: Option<RGBA>, + } + + pub mod computed_value { + pub type T = super::SpecifiedValue; + } + + impl ToCss for SpecifiedValue { + fn to_css<W>(&self, _: &mut W) -> fmt::Result where W: fmt::Write { + // Web compat doesn't matter here. + Ok(()) + } + } + + #[inline] + pub fn get_initial_value() -> computed_value::T { + SpecifiedValue { + underline: None, + overline: None, + line_through: None, + } + } + + fn maybe<Cx: TContext>(flag: bool, context: &Cx) -> Option<RGBA> { + if flag { + Some(context.style().get_color().clone_color()) + } else { + None + } + } + + fn derive<Cx: TContext>(context: &Cx) -> computed_value::T { + // Start with no declarations if this is an atomic inline-level box; otherwise, start with the + // declarations in effect and add in the text decorations that this block specifies. + let mut result = match context.style().get_box().clone_display() { + super::display::computed_value::T::inline_block | + super::display::computed_value::T::inline_table => SpecifiedValue { + underline: None, + overline: None, + line_through: None, + }, + _ => context.inherited_style().get_inheritedtext().clone__servo_text_decorations_in_effect() + }; + + result.underline = maybe(context.style().get_text().has_underline() + || result.underline.is_some(), context); + result.overline = maybe(context.style().get_text().has_overline() + || result.overline.is_some(), context); + result.line_through = maybe(context.style().get_text().has_line_through() + || result.line_through.is_some(), context); + + result + } + + #[inline] + pub fn derive_from_text_decoration<Cx: TContext>(context: &mut Cx) { + let derived = derive(context); + context.mutate_style().mutate_inheritedtext().set__servo_text_decorations_in_effect(derived); + } + + #[inline] + pub fn derive_from_display<Cx: TContext>(context: &mut Cx) { + let derived = derive(context); + context.mutate_style().mutate_inheritedtext().set__servo_text_decorations_in_effect(derived); + } +</%helpers:longhand> + +<%helpers:single_keyword_computed name="white-space" values="normal pre nowrap pre-wrap pre-line", + gecko_constant_prefix="NS_STYLE_WHITESPACE"> + use values::computed::ComputedValueAsSpecified; + impl ComputedValueAsSpecified for SpecifiedValue {} + + impl SpecifiedValue { + pub fn allow_wrap(&self) -> bool { + match *self { + SpecifiedValue::nowrap | + SpecifiedValue::pre => false, + SpecifiedValue::normal | + SpecifiedValue::pre_wrap | + SpecifiedValue::pre_line => true, + } + } + + pub fn preserve_newlines(&self) -> bool { + match *self { + SpecifiedValue::normal | + SpecifiedValue::nowrap => false, + SpecifiedValue::pre | + SpecifiedValue::pre_wrap | + SpecifiedValue::pre_line => true, + } + } + + pub fn preserve_spaces(&self) -> bool { + match *self { + SpecifiedValue::normal | + SpecifiedValue::nowrap | + SpecifiedValue::pre_line => false, + SpecifiedValue::pre | + SpecifiedValue::pre_wrap => true, + } + } + } +</%helpers:single_keyword_computed> + +<%helpers:longhand name="text-shadow"> + use cssparser::{self, ToCss}; + use std::fmt; + use values::AuExtensionMethods; + + #[derive(Clone, PartialEq, Debug, HeapSizeOf)] + pub struct SpecifiedValue(Vec<SpecifiedTextShadow>); + + #[derive(Clone, PartialEq, Debug, HeapSizeOf)] + pub struct SpecifiedTextShadow { + pub offset_x: specified::Length, + pub offset_y: specified::Length, + pub blur_radius: specified::Length, + pub color: Option<specified::CSSColor>, + } + + pub mod computed_value { + use app_units::Au; + use cssparser::Color; + + #[derive(Clone, PartialEq, Debug, HeapSizeOf)] + pub struct T(pub Vec<TextShadow>); + + #[derive(Clone, PartialEq, Debug, HeapSizeOf)] + pub struct TextShadow { + pub offset_x: Au, + pub offset_y: Au, + pub blur_radius: Au, + pub color: Color, + } + } + + impl ToCss for computed_value::T { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + let mut iter = self.0.iter(); + if let Some(shadow) = iter.next() { + try!(shadow.to_css(dest)); + } else { + try!(dest.write_str("none")); + return Ok(()) + } + for shadow in iter { + try!(dest.write_str(", ")); + try!(shadow.to_css(dest)); + } + Ok(()) + } + } + + impl ToCss for computed_value::TextShadow { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + try!(self.offset_x.to_css(dest)); + try!(dest.write_str(" ")); + try!(self.offset_y.to_css(dest)); + try!(dest.write_str(" ")); + try!(self.blur_radius.to_css(dest)); + try!(dest.write_str(" ")); + try!(self.color.to_css(dest)); + Ok(()) + } + } + + impl ToCss for SpecifiedValue { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + let mut iter = self.0.iter(); + if let Some(shadow) = iter.next() { + try!(shadow.to_css(dest)); + } else { + try!(dest.write_str("none")); + return Ok(()) + } + for shadow in iter { + try!(dest.write_str(", ")); + try!(shadow.to_css(dest)); + } + Ok(()) + } + } + + impl ToCss for SpecifiedTextShadow { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + try!(self.offset_x.to_css(dest)); + try!(dest.write_str(" ")); + try!(self.offset_y.to_css(dest)); + try!(dest.write_str(" ")); + try!(self.blur_radius.to_css(dest)); + + if let Some(ref color) = self.color { + try!(dest.write_str(" ")); + try!(color.to_css(dest)); + } + Ok(()) + } + } + + #[inline] + pub fn get_initial_value() -> computed_value::T { + computed_value::T(Vec::new()) + } + + pub fn parse(_: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue,()> { + if input.try(|input| input.expect_ident_matching("none")).is_ok() { + Ok(SpecifiedValue(Vec::new())) + } else { + input.parse_comma_separated(parse_one_text_shadow).map(SpecifiedValue) + } + } + + fn parse_one_text_shadow(input: &mut Parser) -> Result<SpecifiedTextShadow,()> { + use app_units::Au; + let mut lengths = [specified::Length::Absolute(Au(0)); 3]; + let mut lengths_parsed = false; + let mut color = None; + + loop { + if !lengths_parsed { + if let Ok(value) = input.try(specified::Length::parse) { + lengths[0] = value; + let mut length_parsed_count = 1; + while length_parsed_count < 3 { + if let Ok(value) = input.try(specified::Length::parse) { + lengths[length_parsed_count] = value + } else { + break + } + length_parsed_count += 1; + } + + // The first two lengths must be specified. + if length_parsed_count < 2 { + return Err(()) + } + + lengths_parsed = true; + continue + } + } + if color.is_none() { + if let Ok(value) = input.try(specified::CSSColor::parse) { + color = Some(value); + continue + } + } + break + } + + // Lengths must be specified. + if !lengths_parsed { + return Err(()) + } + + Ok(SpecifiedTextShadow { + offset_x: lengths[0], + offset_y: lengths[1], + blur_radius: lengths[2], + color: color, + }) + } + + impl ToComputedValue for SpecifiedValue { + type ComputedValue = computed_value::T; + + fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { + computed_value::T(self.0.iter().map(|value| { + computed_value::TextShadow { + offset_x: value.offset_x.to_computed_value(context), + offset_y: value.offset_y.to_computed_value(context), + blur_radius: value.blur_radius.to_computed_value(context), + color: value.color + .as_ref() + .map(|color| color.parsed) + .unwrap_or(cssparser::Color::CurrentColor), + } + }).collect()) + } + } +</%helpers:longhand> + + + +// TODO(pcwalton): `full-width` +${helpers.single_keyword("text-transform", + "none capitalize uppercase lowercase", + extra_gecko_values="full-width")} + +${helpers.single_keyword("text-rendering", "auto optimizespeed optimizelegibility geometricprecision")} + +// CSS Text Module Level 3 +// https://www.w3.org/TR/css-text-3/ +${helpers.single_keyword("hyphens", "none manual auto", products="gecko")} + +// CSS Ruby Layout Module Level 1 +// https://www.w3.org/TR/css-ruby-1/ +${helpers.single_keyword("ruby-align", "start center space-between space-around", products="gecko")} + +${helpers.single_keyword("ruby-position", "over under", products="gecko")} diff --git a/components/style/properties/longhand/list.mako.rs b/components/style/properties/longhand/list.mako.rs new file mode 100644 index 00000000000..764a50617a6 --- /dev/null +++ b/components/style/properties/longhand/list.mako.rs @@ -0,0 +1,153 @@ +/* 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/. */ + +<%namespace name="helpers" file="/helpers.mako.rs" /> + +<% data.new_style_struct("List", inherited=True, gecko_ffi_name="nsStyleList") %> + +${helpers.single_keyword("list-style-position", "outside inside")} + +// TODO(pcwalton): Implement the full set of counter styles per CSS-COUNTER-STYLES [1] 6.1: +// +// decimal-leading-zero, armenian, upper-armenian, lower-armenian, georgian, lower-roman, +// upper-roman +// +// [1]: http://dev.w3.org/csswg/css-counter-styles/ +${helpers.single_keyword("list-style-type", """ + disc none circle square decimal arabic-indic bengali cambodian cjk-decimal devanagari + gujarati gurmukhi kannada khmer lao malayalam mongolian myanmar oriya persian telugu thai + tibetan lower-alpha upper-alpha cjk-earthly-branch cjk-heavenly-stem lower-greek hiragana + hiragana-iroha katakana katakana-iroha disclosure-open disclosure-closed +""")} + +<%helpers:longhand name="list-style-image"> + use cssparser::{ToCss, Token}; + use std::fmt; + use url::Url; + use values::LocalToCss; + + #[derive(Debug, Clone, PartialEq, Eq, HeapSizeOf)] + pub enum SpecifiedValue { + None, + Url(Url), + } + + impl ToCss for SpecifiedValue { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match *self { + SpecifiedValue::None => dest.write_str("none"), + SpecifiedValue::Url(ref url) => url.to_css(dest), + } + } + } + + pub mod computed_value { + use cssparser::{ToCss, Token}; + use std::fmt; + use url::Url; + use values::LocalToCss; + + #[derive(Debug, Clone, PartialEq, HeapSizeOf)] + pub struct T(pub Option<Url>); + + impl ToCss for T { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match self.0 { + None => dest.write_str("none"), + Some(ref url) => url.to_css(dest), + } + } + } + } + + impl ToComputedValue for SpecifiedValue { + type ComputedValue = computed_value::T; + + #[inline] + fn to_computed_value<Cx: TContext>(&self, _context: &Cx) -> computed_value::T { + match *self { + SpecifiedValue::None => computed_value::T(None), + SpecifiedValue::Url(ref url) => computed_value::T(Some(url.clone())), + } + } + } + + pub fn parse(context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { + if input.try(|input| input.expect_ident_matching("none")).is_ok() { + Ok(SpecifiedValue::None) + } else { + Ok(SpecifiedValue::Url(context.parse_url(&*try!(input.expect_url())))) + } + } + #[inline] + pub fn get_initial_value() -> computed_value::T { + computed_value::T(None) + } +</%helpers:longhand> + +<%helpers:longhand name="quotes"> + use std::borrow::Cow; + use std::fmt; + use values::computed::ComputedValueAsSpecified; + + use cssparser::{ToCss, Token}; + + pub use self::computed_value::T as SpecifiedValue; + + pub mod computed_value { + #[derive(Debug, Clone, PartialEq, HeapSizeOf)] + pub struct T(pub Vec<(String,String)>); + } + + impl ComputedValueAsSpecified for SpecifiedValue {} + + impl ToCss for SpecifiedValue { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + let mut first = true; + for pair in &self.0 { + if !first { + try!(dest.write_str(" ")); + } + first = false; + try!(Token::QuotedString(Cow::from(&*pair.0)).to_css(dest)); + try!(dest.write_str(" ")); + try!(Token::QuotedString(Cow::from(&*pair.1)).to_css(dest)); + } + Ok(()) + } + } + + #[inline] + pub fn get_initial_value() -> computed_value::T { + computed_value::T(vec![ + ("\u{201c}".to_owned(), "\u{201d}".to_owned()), + ("\u{2018}".to_owned(), "\u{2019}".to_owned()), + ]) + } + + pub fn parse(_: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue,()> { + if input.try(|input| input.expect_ident_matching("none")).is_ok() { + return Ok(SpecifiedValue(Vec::new())) + } + + let mut quotes = Vec::new(); + loop { + let first = match input.next() { + Ok(Token::QuotedString(value)) => value.into_owned(), + Ok(_) => return Err(()), + Err(()) => break, + }; + let second = match input.next() { + Ok(Token::QuotedString(value)) => value.into_owned(), + _ => return Err(()), + }; + quotes.push((first, second)) + } + if !quotes.is_empty() { + Ok(SpecifiedValue(quotes)) + } else { + Err(()) + } + } +</%helpers:longhand> diff --git a/components/style/properties/longhand/margin.mako.rs b/components/style/properties/longhand/margin.mako.rs new file mode 100644 index 00000000000..39411f1cff1 --- /dev/null +++ b/components/style/properties/longhand/margin.mako.rs @@ -0,0 +1,12 @@ +/* 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/. */ + +<%namespace name="helpers" file="/helpers.mako.rs" /> + +<% data.new_style_struct("Margin", inherited=False, gecko_ffi_name="nsStyleMargin") %> + +% for side in ["top", "right", "bottom", "left"]: + ${helpers.predefined_type("margin-" + side, "LengthOrPercentageOrAuto", + "computed::LengthOrPercentageOrAuto::Length(Au(0))")} +% endfor diff --git a/components/style/properties/longhand/outline.mako.rs b/components/style/properties/longhand/outline.mako.rs new file mode 100644 index 00000000000..3df026263b4 --- /dev/null +++ b/components/style/properties/longhand/outline.mako.rs @@ -0,0 +1,62 @@ +/* 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/. */ + +<%namespace name="helpers" file="/helpers.mako.rs" /> +<% from data import Method %> + +<% data.new_style_struct("Outline", + inherited=False, + gecko_ffi_name="nsStyleOutline", + additional_methods=[Method("outline_has_nonzero_width", "bool")]) %> + +// TODO(pcwalton): `invert` +${helpers.predefined_type("outline-color", "CSSColor", "::cssparser::Color::CurrentColor")} + +<%helpers:longhand name="outline-style" need_clone="True"> + pub use values::specified::BorderStyle as SpecifiedValue; + pub fn get_initial_value() -> SpecifiedValue { SpecifiedValue::none } + pub mod computed_value { + pub use values::specified::BorderStyle as T; + } + pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { + match SpecifiedValue::parse(input) { + Ok(SpecifiedValue::hidden) => Err(()), + result => result + } + } +</%helpers:longhand> + +<%helpers:longhand name="outline-width"> + use app_units::Au; + use cssparser::ToCss; + use std::fmt; + use values::AuExtensionMethods; + + impl ToCss for SpecifiedValue { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + self.0.to_css(dest) + } + } + + pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { + specified::parse_border_width(input).map(SpecifiedValue) + } + #[derive(Debug, Clone, PartialEq, HeapSizeOf)] + pub struct SpecifiedValue(pub specified::Length); + pub mod computed_value { + use app_units::Au; + pub type T = Au; + } + pub use super::border_top_width::get_initial_value; + impl ToComputedValue for SpecifiedValue { + type ComputedValue = computed_value::T; + + #[inline] + fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> computed_value::T { + self.0.to_computed_value(context) + } + } +</%helpers:longhand> + +${helpers.predefined_type("outline-offset", "Length", "Au(0)")} diff --git a/components/style/properties/longhand/padding.mako.rs b/components/style/properties/longhand/padding.mako.rs new file mode 100644 index 00000000000..fda8265e13f --- /dev/null +++ b/components/style/properties/longhand/padding.mako.rs @@ -0,0 +1,13 @@ +/* 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/. */ + +<%namespace name="helpers" file="/helpers.mako.rs" /> + +<% data.new_style_struct("Padding", inherited=False, gecko_ffi_name="nsStylePadding") %> + +% for side in ["top", "right", "bottom", "left"]: + ${helpers.predefined_type("padding-" + side, "LengthOrPercentage", + "computed::LengthOrPercentage::Length(Au(0))", + "parse_non_negative")} +% endfor diff --git a/components/style/properties/longhand/pointing.mako.rs b/components/style/properties/longhand/pointing.mako.rs new file mode 100644 index 00000000000..1d7f4a4040b --- /dev/null +++ b/components/style/properties/longhand/pointing.mako.rs @@ -0,0 +1,56 @@ +/* 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/. */ + +<%namespace name="helpers" file="/helpers.mako.rs" /> + +<% data.new_style_struct("Pointing", inherited=True, gecko_ffi_name="nsStyleUserInterface") %> + +<%helpers:longhand name="cursor"> + pub use self::computed_value::T as SpecifiedValue; + use values::computed::ComputedValueAsSpecified; + + impl ComputedValueAsSpecified for SpecifiedValue {} + + pub mod computed_value { + use cssparser::ToCss; + use std::fmt; + use style_traits::cursor::Cursor; + + #[derive(Clone, PartialEq, Eq, Copy, Debug, HeapSizeOf)] + pub enum T { + AutoCursor, + SpecifiedCursor(Cursor), + } + + impl ToCss for T { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match *self { + T::AutoCursor => dest.write_str("auto"), + T::SpecifiedCursor(c) => c.to_css(dest), + } + } + } + } + + #[inline] + pub fn get_initial_value() -> computed_value::T { + computed_value::T::AutoCursor + } + pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { + use std::ascii::AsciiExt; + use style_traits::cursor::Cursor; + let ident = try!(input.expect_ident()); + if ident.eq_ignore_ascii_case("auto") { + Ok(SpecifiedValue::AutoCursor) + } else { + Cursor::from_css_keyword(&ident) + .map(SpecifiedValue::SpecifiedCursor) + } + } +</%helpers:longhand> + +// NB: `pointer-events: auto` (and use of `pointer-events` in anything that isn't SVG, in fact) +// is nonstandard, slated for CSS4-UI. +// TODO(pcwalton): SVG-only values. +${helpers.single_keyword("pointer-events", "auto none")} diff --git a/components/style/properties/longhand/position.mako.rs b/components/style/properties/longhand/position.mako.rs new file mode 100644 index 00000000000..b3d35516b79 --- /dev/null +++ b/components/style/properties/longhand/position.mako.rs @@ -0,0 +1,117 @@ +/* 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/. */ + +<%namespace name="helpers" file="/helpers.mako.rs" /> + +<% data.new_style_struct("Position", inherited=False, gecko_ffi_name="nsStylePosition") %> + +% for side in ["top", "right", "bottom", "left"]: + ${helpers.predefined_type(side, "LengthOrPercentageOrAuto", + "computed::LengthOrPercentageOrAuto::Auto")} +% endfor + +<%helpers:longhand name="z-index"> + use values::computed::ComputedValueAsSpecified; + + impl ComputedValueAsSpecified for SpecifiedValue {} + pub type SpecifiedValue = computed_value::T; + pub mod computed_value { + use cssparser::ToCss; + use std::fmt; + + #[derive(PartialEq, Clone, Eq, Copy, Debug, HeapSizeOf)] + pub enum T { + Auto, + Number(i32), + } + + impl ToCss for T { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match *self { + T::Auto => dest.write_str("auto"), + T::Number(number) => write!(dest, "{}", number), + } + } + } + + impl T { + pub fn number_or_zero(self) -> i32 { + match self { + T::Auto => 0, + T::Number(value) => value, + } + } + } + } + #[inline] + pub fn get_initial_value() -> computed_value::T { + computed_value::T::Auto + } + fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { + if input.try(|input| input.expect_ident_matching("auto")).is_ok() { + Ok(computed_value::T::Auto) + } else { + specified::parse_integer(input).map(computed_value::T::Number) + } + } +</%helpers:longhand> + +// CSS Flexible Box Layout Module Level 1 +// http://www.w3.org/TR/css3-flexbox/ + +// Flex container properties +${helpers.single_keyword("flex-direction", "row row-reverse column column-reverse", experimental=True)} + +// https://drafts.csswg.org/css-flexbox/#propdef-order +<%helpers:longhand name="order"> + use values::computed::ComputedValueAsSpecified; + + impl ComputedValueAsSpecified for SpecifiedValue {} + + pub type SpecifiedValue = computed_value::T; + + pub mod computed_value { + pub type T = i32; + } + + #[inline] + pub fn get_initial_value() -> computed_value::T { + 0 + } + + fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { + specified::parse_integer(input) + } +</%helpers:longhand> + +${helpers.predefined_type("flex-basis", + "LengthOrPercentageOrAutoOrContent", + "computed::LengthOrPercentageOrAutoOrContent::Auto")} + +${helpers.single_keyword("flex-wrap", "nowrap wrap wrap-reverse", products="gecko")} + +${helpers.predefined_type("min-width", + "LengthOrPercentage", + "computed::LengthOrPercentage::Length(Au(0))", + "parse_non_negative")} +${helpers.predefined_type("max-width", + "LengthOrPercentageOrNone", + "computed::LengthOrPercentageOrNone::None", + "parse_non_negative")} + +${helpers.predefined_type("min-height", + "LengthOrPercentage", + "computed::LengthOrPercentage::Length(Au(0))", + "parse_non_negative")} +${helpers.predefined_type("max-height", + "LengthOrPercentageOrNone", + "computed::LengthOrPercentageOrNone::None", + "parse_non_negative")} + +${helpers.single_keyword("box-sizing", + "content-box border-box")} + +// CSS Image Values and Replaced Content Module Level 3 +// https://drafts.csswg.org/css-images-3/ +${helpers.single_keyword("object-fit", "fill contain cover none scale-down", products="gecko")} diff --git a/components/style/properties/longhand/svg.mako.rs b/components/style/properties/longhand/svg.mako.rs new file mode 100644 index 00000000000..759ac3fe2f6 --- /dev/null +++ b/components/style/properties/longhand/svg.mako.rs @@ -0,0 +1,18 @@ +/* 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/. */ + +<%namespace name="helpers" file="/helpers.mako.rs" /> + +<% data.new_style_struct("SVG", inherited=False, gecko_ffi_name="nsStyleSVGReset") %> + +${helpers.single_keyword("dominant-baseline", + """auto use-script no-change reset-size ideographic alphabetic hanging + mathematical central middle text-after-edge text-before-edge""", + products="gecko")} + +${helpers.single_keyword("vector-effect", "none non-scaling-stroke", products="gecko")} + +// CSS Masking Module Level 1 +// https://www.w3.org/TR/css-masking-1/ +${helpers.single_keyword("mask-type", "luminance alpha", products="gecko")} diff --git a/components/style/properties/longhand/svg_inherited.mako.rs b/components/style/properties/longhand/svg_inherited.mako.rs new file mode 100644 index 00000000000..2a0c6884974 --- /dev/null +++ b/components/style/properties/longhand/svg_inherited.mako.rs @@ -0,0 +1,38 @@ +/* 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/. */ + +<%namespace name="helpers" file="/helpers.mako.rs" /> + +// SVG 1.1 (Second Edition) +// https://www.w3.org/TR/SVG/ +<% data.new_style_struct("SVGInherited", + inherited=True, + gecko_ffi_name="nsStyleSVG") %> + +// Section 10 - Text + +${helpers.single_keyword("text-anchor", "start middle end", products="gecko")} + +// Section 11 - Painting: Filling, Stroking and Marker Symbols +${helpers.single_keyword("color-interpolation", "auto sRGB linearRGB", products="gecko")} + +${helpers.single_keyword("color-interpolation-filters", + "auto sRGB linearRGB", + products="gecko", + gecko_constant_prefix="NS_STYLE_COLOR_INTERPOLATION")} + +${helpers.single_keyword("fill-rule", "nonzero evenodd", products="gecko")} + +${helpers.single_keyword("shape-rendering", + "auto optimizeSpeed crispEdges geometricPrecision", + products="gecko")} + +${helpers.single_keyword("stroke-linecap", "butt round square", products="gecko")} + +${helpers.single_keyword("stroke-linejoin", "miter round bevel", products="gecko")} + +// Section 14 - Clipping, Masking and Compositing +${helpers.single_keyword("clip-rule", "nonzero evenodd", + products="gecko", + gecko_constant_prefix="NS_STYLE_FILL_RULE")} diff --git a/components/style/properties/longhand/table.mako.rs b/components/style/properties/longhand/table.mako.rs new file mode 100644 index 00000000000..0abe7b2ce1a --- /dev/null +++ b/components/style/properties/longhand/table.mako.rs @@ -0,0 +1,9 @@ +/* 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/. */ + +<%namespace name="helpers" file="/helpers.mako.rs" /> + +<% data.new_style_struct("Table", inherited=False, gecko_ffi_name="nsStyleTable") %> + +${helpers.single_keyword("table-layout", "auto fixed", gecko_ffi_name="mLayoutStrategy")} diff --git a/components/style/properties/longhand/text.mako.rs b/components/style/properties/longhand/text.mako.rs new file mode 100644 index 00000000000..b6d30dd0131 --- /dev/null +++ b/components/style/properties/longhand/text.mako.rs @@ -0,0 +1,109 @@ +/* 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/. */ + +<%namespace name="helpers" file="/helpers.mako.rs" /> +<% from data import Method %> + +<% data.new_style_struct("Text", + inherited=False, + gecko_ffi_name="nsStyleTextReset", + additional_methods=[Method("has_underline", "bool"), + Method("has_overline", "bool"), + Method("has_line_through", "bool")]) %> + +${helpers.single_keyword("text-overflow", "clip ellipsis")} + +${helpers.single_keyword("unicode-bidi", "normal embed isolate bidi-override isolate-override plaintext")} + +<%helpers:longhand name="text-decoration" custom_cascade="${product == 'servo'}"> + use cssparser::ToCss; + use std::fmt; + use values::computed::ComputedValueAsSpecified; + + impl ComputedValueAsSpecified for SpecifiedValue {} + + #[derive(PartialEq, Eq, Copy, Clone, Debug, HeapSizeOf)] + pub struct SpecifiedValue { + pub underline: bool, + pub overline: bool, + pub line_through: bool, + // 'blink' is accepted in the parser but ignored. + // Just not blinking the text is a conforming implementation per CSS 2.1. + } + + impl ToCss for SpecifiedValue { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + let mut space = false; + if self.underline { + try!(dest.write_str("underline")); + space = true; + } + if self.overline { + if space { + try!(dest.write_str(" ")); + } + try!(dest.write_str("overline")); + space = true; + } + if self.line_through { + if space { + try!(dest.write_str(" ")); + } + try!(dest.write_str("line-through")); + } + Ok(()) + } + } + pub mod computed_value { + pub type T = super::SpecifiedValue; + #[allow(non_upper_case_globals)] + pub const none: T = super::SpecifiedValue { + underline: false, overline: false, line_through: false + }; + } + #[inline] pub fn get_initial_value() -> computed_value::T { + computed_value::none + } + /// none | [ underline || overline || line-through || blink ] + pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { + let mut result = SpecifiedValue { + underline: false, overline: false, line_through: false, + }; + if input.try(|input| input.expect_ident_matching("none")).is_ok() { + return Ok(result) + } + let mut blink = false; + let mut empty = true; + while let Ok(ident) = input.expect_ident() { + match_ignore_ascii_case! { ident, + "underline" => if result.underline { return Err(()) } + else { empty = false; result.underline = true }, + "overline" => if result.overline { return Err(()) } + else { empty = false; result.overline = true }, + "line-through" => if result.line_through { return Err(()) } + else { empty = false; result.line_through = true }, + "blink" => if blink { return Err(()) } + else { empty = false; blink = true }, + _ => break + } + } + if !empty { Ok(result) } else { Err(()) } + } + + % if product == "servo": + fn cascade_property_custom<C: ComputedValues>( + _declaration: &PropertyDeclaration, + _inherited_style: &C, + context: &mut computed::Context<C>, + _seen: &mut PropertyBitField, + _cacheable: &mut bool, + _error_reporter: &mut StdBox<ParseErrorReporter + Send>) { + longhands::_servo_text_decorations_in_effect::derive_from_text_decoration(context); + } + % endif +</%helpers:longhand> + +${helpers.single_keyword("text-decoration-style", + "-moz-none solid double dotted dashed wavy", + products="gecko")} diff --git a/components/style/properties.html.mako b/components/style/properties/properties.html.mako index d06524d3e13..d06524d3e13 100644 --- a/components/style/properties.html.mako +++ b/components/style/properties/properties.html.mako diff --git a/components/style/properties/properties.mako.rs b/components/style/properties/properties.mako.rs new file mode 100644 index 00000000000..ab71f3047aa --- /dev/null +++ b/components/style/properties/properties.mako.rs @@ -0,0 +1,2414 @@ +/* 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/. */ + +// This file is a Mako template: http://www.makotemplates.org/ + +// Please note that valid Rust syntax may be mangled by the Mako parser. +// For example, Vec<&Foo> will be mangled as Vec&Foo>. To work around these issues, the code +// can be escaped. In the above example, Vec<<&Foo> achieves the desired result of Vec<&Foo>. + +<%namespace name="helpers" file="/helpers.mako.rs" /> + +use std::ascii::AsciiExt; +use std::boxed::Box as StdBox; +use std::collections::HashSet; +use std::fmt; +use std::intrinsics; +use std::mem; +use std::sync::Arc; + +use app_units::Au; +use cssparser::Color as CSSParserColor; +use cssparser::{Parser, RGBA, AtRuleParser, DeclarationParser, Delimiter, + DeclarationListParser, parse_important, ToCss, TokenSerializationType}; +use error_reporting::ParseErrorReporter; +use url::Url; +use euclid::SideOffsets2D; +use euclid::size::Size2D; +use string_cache::Atom; +use computed_values; +use logical_geometry::{LogicalMargin, PhysicalSide, WritingMode}; +use parser::{ParserContext, log_css_error}; +use selectors::matching::DeclarationBlock; +use stylesheets::Origin; +use values::AuExtensionMethods; +use values::computed::{self, TContext, ToComputedValue}; +use values::specified::BorderStyle; + +use self::property_bit_field::PropertyBitField; + +<%! + from data import Method, Keyword, to_rust_ident +%> + +pub mod longhands { + use cssparser::Parser; + use parser::ParserContext; + use values::specified; + + <%include file="/longhand/background.mako.rs" /> + <%include file="/longhand/border.mako.rs" /> + <%include file="/longhand/box.mako.rs" /> + <%include file="/longhand/color.mako.rs" /> + <%include file="/longhand/column.mako.rs" /> + <%include file="/longhand/counters.mako.rs" /> + <%include file="/longhand/effects.mako.rs" /> + <%include file="/longhand/font.mako.rs" /> + <%include file="/longhand/inherited_box.mako.rs" /> + <%include file="/longhand/inherited_table.mako.rs" /> + <%include file="/longhand/inherited_text.mako.rs" /> + <%include file="/longhand/list.mako.rs" /> + <%include file="/longhand/margin.mako.rs" /> + <%include file="/longhand/outline.mako.rs" /> + <%include file="/longhand/padding.mako.rs" /> + <%include file="/longhand/pointing.mako.rs" /> + <%include file="/longhand/position.mako.rs" /> + <%include file="/longhand/table.mako.rs" /> + <%include file="/longhand/text.mako.rs" /> + <%include file="/longhand/svg_inherited.mako.rs" /> + <%include file="/longhand/svg.mako.rs" /> +} + + +pub mod shorthands { + use cssparser::Parser; + use parser::ParserContext; + use values::specified; + + <%def name="shorthand(name, sub_properties, experimental=False)"> + <% + shorthand = data.declare_shorthand(name, sub_properties.split(), experimental=experimental) + %> + pub mod ${shorthand.ident} { + use cssparser::Parser; + use parser::ParserContext; + use properties::{longhands, PropertyDeclaration, DeclaredValue, Shorthand}; + + pub struct Longhands { + % for sub_property in shorthand.sub_properties: + pub ${sub_property.ident}: + Option<longhands::${sub_property.ident}::SpecifiedValue>, + % endfor + } + + pub fn parse(context: &ParserContext, input: &mut Parser, + declarations: &mut Vec<PropertyDeclaration>) + -> Result<(), ()> { + input.look_for_var_functions(); + let start = input.position(); + let value = input.parse_entirely(|input| parse_value(context, input)); + if value.is_err() { + while let Ok(_) = input.next() {} // Look for var() after the error. + } + let var = input.seen_var_functions(); + if let Ok(value) = value { + % for sub_property in shorthand.sub_properties: + declarations.push(PropertyDeclaration::${sub_property.camel_case}( + match value.${sub_property.ident} { + Some(value) => DeclaredValue::Value(value), + None => DeclaredValue::Initial, + } + )); + % endfor + Ok(()) + } else if var { + input.reset(start); + let (first_token_type, css) = try!( + ::custom_properties::parse_non_custom_with_var(input)); + % for sub_property in shorthand.sub_properties: + declarations.push(PropertyDeclaration::${sub_property.camel_case}( + DeclaredValue::WithVariables { + css: css.clone().into_owned(), + first_token_type: first_token_type, + base_url: context.base_url.clone(), + from_shorthand: Some(Shorthand::${shorthand.camel_case}), + } + )); + % endfor + Ok(()) + } else { + Err(()) + } + } + + #[allow(unused_variables)] + pub fn parse_value(context: &ParserContext, input: &mut Parser) -> Result<Longhands, ()> { + ${caller.body()} + } + } + </%def> + + fn parse_four_sides<F, T>(input: &mut Parser, parse_one: F) -> Result<(T, T, T, T), ()> + where F: Fn(&mut Parser) -> Result<T, ()>, F: Copy, T: Clone { + // zero or more than four values is invalid. + // one value sets them all + // two values set (top, bottom) and (left, right) + // three values set top, (left, right) and bottom + // four values set them in order + let top = try!(parse_one(input)); + let right; + let bottom; + let left; + match input.try(parse_one) { + Err(()) => { + right = top.clone(); + bottom = top.clone(); + left = top.clone(); + } + Ok(value) => { + right = value; + match input.try(parse_one) { + Err(()) => { + bottom = top.clone(); + left = right.clone(); + } + Ok(value) => { + bottom = value; + match input.try(parse_one) { + Err(()) => { + left = right.clone(); + } + Ok(value) => { + left = value; + } + } + + } + } + + } + } + Ok((top, right, bottom, left)) + } + + <%def name="four_sides_shorthand(name, sub_property_pattern, parser_function)"> + <%self:shorthand name="${name}" sub_properties="${ + ' '.join(sub_property_pattern % side + for side in ['top', 'right', 'bottom', 'left'])}"> + use super::parse_four_sides; + use values::specified; + let _unused = context; + let (top, right, bottom, left) = try!(parse_four_sides(input, ${parser_function})); + Ok(Longhands { + % for side in ["top", "right", "bottom", "left"]: + ${to_rust_ident(sub_property_pattern % side)}: Some(${side}), + % endfor + }) + </%self:shorthand> + </%def> + + // TODO: other background-* properties + <%self:shorthand name="background" + sub_properties="background-color background-position background-repeat background-attachment + background-image background-size background-origin background-clip"> + use properties::longhands::{background_color, background_position, background_repeat, background_attachment}; + use properties::longhands::{background_image, background_size, background_origin, background_clip}; + + let mut color = None; + let mut image = None; + let mut position = None; + let mut repeat = None; + let mut size = None; + let mut attachment = None; + let mut any = false; + let mut origin = None; + let mut clip = None; + + loop { + if position.is_none() { + if let Ok(value) = input.try(|input| background_position::parse(context, input)) { + position = Some(value); + any = true; + + // Parse background size, if applicable. + size = input.try(|input| { + try!(input.expect_delim('/')); + background_size::parse(context, input) + }).ok(); + + continue + } + } + if color.is_none() { + if let Ok(value) = input.try(|input| background_color::parse(context, input)) { + color = Some(value); + any = true; + continue + } + } + if image.is_none() { + if let Ok(value) = input.try(|input| background_image::parse(context, input)) { + image = Some(value); + any = true; + continue + } + } + if repeat.is_none() { + if let Ok(value) = input.try(|input| background_repeat::parse(context, input)) { + repeat = Some(value); + any = true; + continue + } + } + if attachment.is_none() { + if let Ok(value) = input.try(|input| background_attachment::parse(context, input)) { + attachment = Some(value); + any = true; + continue + } + } + if origin.is_none() { + if let Ok(value) = input.try(|input| background_origin::parse(context, input)) { + origin = Some(value); + any = true; + continue + } + } + if clip.is_none() { + if let Ok(value) = input.try(|input| background_clip::parse(context, input)) { + clip = Some(value); + any = true; + continue + } + } + break + } + + if any { + Ok(Longhands { + background_color: color, + background_image: image, + background_position: position, + background_repeat: repeat, + background_attachment: attachment, + background_size: size, + background_origin: origin, + background_clip: clip, + }) + } else { + Err(()) + } + </%self:shorthand> + + ${four_sides_shorthand("margin", "margin-%s", "specified::LengthOrPercentageOrAuto::parse")} + ${four_sides_shorthand("padding", "padding-%s", "specified::LengthOrPercentage::parse")} + + ${four_sides_shorthand("border-color", "border-%s-color", "specified::CSSColor::parse")} + ${four_sides_shorthand("border-style", "border-%s-style", + "specified::BorderStyle::parse")} + <%self:shorthand name="border-width" sub_properties="${ + ' '.join('border-%s-width' % side + for side in ['top', 'right', 'bottom', 'left'])}"> + use super::parse_four_sides; + use values::specified; + let _unused = context; + let (top, right, bottom, left) = try!(parse_four_sides(input, specified::parse_border_width)); + Ok(Longhands { + % for side in ["top", "right", "bottom", "left"]: + ${to_rust_ident('border-%s-width' % side)}: + Some(longhands::${to_rust_ident('border-%s-width' % side)}::SpecifiedValue(${side})), + % endfor + }) + </%self:shorthand> + + + pub fn parse_border(context: &ParserContext, input: &mut Parser) + -> Result<(Option<specified::CSSColor>, + Option<specified::BorderStyle>, + Option<specified::Length>), ()> { + use values::specified; + let _unused = context; + let mut color = None; + let mut style = None; + let mut width = None; + let mut any = false; + loop { + if color.is_none() { + if let Ok(value) = input.try(specified::CSSColor::parse) { + color = Some(value); + any = true; + continue + } + } + if style.is_none() { + if let Ok(value) = input.try(specified::BorderStyle::parse) { + style = Some(value); + any = true; + continue + } + } + if width.is_none() { + if let Ok(value) = input.try(specified::parse_border_width) { + width = Some(value); + any = true; + continue + } + } + break + } + if any { Ok((color, style, width)) } else { Err(()) } + } + + + % for side in ["top", "right", "bottom", "left"]: + <%self:shorthand name="border-${side}" sub_properties="${' '.join( + 'border-%s-%s' % (side, prop) + for prop in ['color', 'style', 'width'] + )}"> + let (color, style, width) = try!(super::parse_border(context, input)); + Ok(Longhands { + border_${side}_color: color, + border_${side}_style: style, + border_${side}_width: + width.map(longhands::${to_rust_ident('border-%s-width' % side)}::SpecifiedValue), + }) + </%self:shorthand> + % endfor + + <%self:shorthand name="border" sub_properties="${' '.join( + 'border-%s-%s' % (side, prop) + for side in ['top', 'right', 'bottom', 'left'] + for prop in ['color', 'style', 'width'] + )}"> + let (color, style, width) = try!(super::parse_border(context, input)); + Ok(Longhands { + % for side in ["top", "right", "bottom", "left"]: + border_${side}_color: color.clone(), + border_${side}_style: style, + border_${side}_width: + width.map(longhands::${to_rust_ident('border-%s-width' % side)}::SpecifiedValue), + % endfor + }) + </%self:shorthand> + + <%self:shorthand name="border-radius" sub_properties="${' '.join( + 'border-%s-radius' % (corner) + for corner in ['top-left', 'top-right', 'bottom-right', 'bottom-left'] + )}"> + use app_units::Au; + use values::specified::{Length, LengthOrPercentage}; + use values::specified::BorderRadiusSize; + + let _ignored = context; + + fn parse_one_set_of_border_values(mut input: &mut Parser) + -> Result<[LengthOrPercentage; 4], ()> { + let mut count = 0; + let mut values = [LengthOrPercentage::Length(Length::Absolute(Au(0))); 4]; + while count < 4 { + if let Ok(value) = input.try(LengthOrPercentage::parse) { + values[count] = value; + count += 1; + } else { + break + } + } + + match count { + 1 => Ok([values[0], values[0], values[0], values[0]]), + 2 => Ok([values[0], values[1], values[0], values[1]]), + 3 => Ok([values[0], values[1], values[2], values[1]]), + 4 => Ok([values[0], values[1], values[2], values[3]]), + _ => Err(()), + } + } + + fn parse_one_set_of_border_radii(mut input: &mut Parser) + -> Result<[BorderRadiusSize; 4], ()> { + let widths = try!(parse_one_set_of_border_values(input)); + let mut heights = widths.clone(); + let mut radii_values = [BorderRadiusSize::zero(); 4]; + if input.try(|input| input.expect_delim('/')).is_ok() { + heights = try!(parse_one_set_of_border_values(input)); + } + for i in 0..radii_values.len() { + radii_values[i] = BorderRadiusSize::new(widths[i], heights[i]); + } + Ok(radii_values) + } + + let radii = try!(parse_one_set_of_border_radii(input)); + Ok(Longhands { + border_top_left_radius: Some(radii[0]), + border_top_right_radius: Some(radii[1]), + border_bottom_right_radius: Some(radii[2]), + border_bottom_left_radius: Some(radii[3]), + }) + </%self:shorthand> + + <%self:shorthand name="outline" sub_properties="outline-color outline-style outline-width"> + use properties::longhands::outline_width; + use values::specified; + + let _unused = context; + let mut color = None; + let mut style = None; + let mut width = None; + let mut any = false; + loop { + if color.is_none() { + if let Ok(value) = input.try(specified::CSSColor::parse) { + color = Some(value); + any = true; + continue + } + } + if style.is_none() { + if let Ok(value) = input.try(specified::BorderStyle::parse) { + style = Some(value); + any = true; + continue + } + } + if width.is_none() { + if let Ok(value) = input.try(|input| outline_width::parse(context, input)) { + width = Some(value); + any = true; + continue + } + } + break + } + if any { + Ok(Longhands { + outline_color: color, + outline_style: style, + outline_width: width, + }) + } else { + Err(()) + } + </%self:shorthand> + + <%self:shorthand name="font" sub_properties="font-style font-variant font-weight + font-size line-height font-family"> + use properties::longhands::{font_style, font_variant, font_weight, font_size, + line_height, font_family}; + let mut nb_normals = 0; + let mut style = None; + let mut variant = None; + let mut weight = None; + let size; + loop { + // Special-case 'normal' because it is valid in each of + // font-style, font-weight and font-variant. + // Leaves the values to None, 'normal' is the initial value for each of them. + if input.try(|input| input.expect_ident_matching("normal")).is_ok() { + nb_normals += 1; + continue; + } + if style.is_none() { + if let Ok(value) = input.try(|input| font_style::parse(context, input)) { + style = Some(value); + continue + } + } + if weight.is_none() { + if let Ok(value) = input.try(|input| font_weight::parse(context, input)) { + weight = Some(value); + continue + } + } + if variant.is_none() { + if let Ok(value) = input.try(|input| font_variant::parse(context, input)) { + variant = Some(value); + continue + } + } + size = Some(try!(font_size::parse(context, input))); + break + } + #[inline] + fn count<T>(opt: &Option<T>) -> u8 { + if opt.is_some() { 1 } else { 0 } + } + if size.is_none() || (count(&style) + count(&weight) + count(&variant) + nb_normals) > 3 { + return Err(()) + } + let line_height = if input.try(|input| input.expect_delim('/')).is_ok() { + Some(try!(line_height::parse(context, input))) + } else { + None + }; + let family = try!(input.parse_comma_separated(font_family::parse_one_family)); + Ok(Longhands { + font_style: style, + font_variant: variant, + font_weight: weight, + font_size: size, + line_height: line_height, + font_family: Some(font_family::SpecifiedValue(family)) + }) + </%self:shorthand> + + // Per CSS-TEXT 6.2, "for legacy reasons, UAs must treat `word-wrap` as an alternate name for + // the `overflow-wrap` property, as if it were a shorthand of `overflow-wrap`." + <%self:shorthand name="word-wrap" sub_properties="overflow-wrap"> + use properties::longhands::overflow_wrap; + Ok(Longhands { + overflow_wrap: Some(try!(overflow_wrap::parse(context, input))), + }) + </%self:shorthand> + + <%self:shorthand name="list-style" + sub_properties="list-style-image list-style-position list-style-type"> + use properties::longhands::{list_style_image, list_style_position, list_style_type}; + + // `none` is ambiguous until we've finished parsing the shorthands, so we count the number + // of times we see it. + let mut nones = 0u8; + let (mut image, mut position, mut list_style_type, mut any) = (None, None, None, false); + loop { + if input.try(|input| input.expect_ident_matching("none")).is_ok() { + nones = nones + 1; + if nones > 2 { + return Err(()) + } + any = true; + continue + } + + if list_style_type.is_none() { + if let Ok(value) = input.try(|input| list_style_type::parse(context, input)) { + list_style_type = Some(value); + any = true; + continue + } + } + + if image.is_none() { + if let Ok(value) = input.try(|input| list_style_image::parse(context, input)) { + image = Some(value); + any = true; + continue + } + } + + if position.is_none() { + if let Ok(value) = input.try(|input| list_style_position::parse(context, input)) { + position = Some(value); + any = true; + continue + } + } + break + } + + // If there are two `none`s, then we can't have a type or image; if there is one `none`, + // then we can't have both a type *and* an image; if there is no `none` then we're fine as + // long as we parsed something. + match (any, nones, list_style_type, image) { + (true, 2, None, None) => { + Ok(Longhands { + list_style_position: position, + list_style_image: Some(list_style_image::SpecifiedValue::None), + list_style_type: Some(list_style_type::SpecifiedValue::none), + }) + } + (true, 1, None, Some(image)) => { + Ok(Longhands { + list_style_position: position, + list_style_image: Some(image), + list_style_type: Some(list_style_type::SpecifiedValue::none), + }) + } + (true, 1, Some(list_style_type), None) => { + Ok(Longhands { + list_style_position: position, + list_style_image: Some(list_style_image::SpecifiedValue::None), + list_style_type: Some(list_style_type), + }) + } + (true, 1, None, None) => { + Ok(Longhands { + list_style_position: position, + list_style_image: Some(list_style_image::SpecifiedValue::None), + list_style_type: Some(list_style_type::SpecifiedValue::none), + }) + } + (true, 0, list_style_type, image) => { + Ok(Longhands { + list_style_position: position, + list_style_image: image, + list_style_type: list_style_type, + }) + } + _ => Err(()), + } + </%self:shorthand> + + <%self:shorthand name="columns" sub_properties="column-count column-width" experimental="True"> + use properties::longhands::{column_count, column_width}; + let mut column_count = None; + let mut column_width = None; + let mut autos = 0; + + loop { + if input.try(|input| input.expect_ident_matching("auto")).is_ok() { + // Leave the options to None, 'auto' is the initial value. + autos += 1; + continue + } + + if column_count.is_none() { + if let Ok(value) = input.try(|input| column_count::parse(context, input)) { + column_count = Some(value); + continue + } + } + + if column_width.is_none() { + if let Ok(value) = input.try(|input| column_width::parse(context, input)) { + column_width = Some(value); + continue + } + } + + break + } + + let values = autos + column_count.iter().len() + column_width.iter().len(); + if values == 0 || values > 2 { + Err(()) + } else { + Ok(Longhands { + column_count: column_count, + column_width: column_width, + }) + } + </%self:shorthand> + + <%self:shorthand name="overflow" sub_properties="overflow-x overflow-y"> + use properties::longhands::{overflow_x, overflow_y}; + + let overflow = try!(overflow_x::parse(context, input)); + Ok(Longhands { + overflow_x: Some(overflow), + overflow_y: Some(overflow_y::SpecifiedValue(overflow)), + }) + </%self:shorthand> + + <%self:shorthand name="transition" + sub_properties="transition-property transition-duration transition-timing-function + transition-delay"> + use properties::longhands::{transition_delay, transition_duration, transition_property}; + use properties::longhands::{transition_timing_function}; + + struct SingleTransition { + transition_property: transition_property::SingleSpecifiedValue, + transition_duration: transition_duration::SingleSpecifiedValue, + transition_timing_function: transition_timing_function::SingleSpecifiedValue, + transition_delay: transition_delay::SingleSpecifiedValue, + } + + fn parse_one_transition(input: &mut Parser) -> Result<SingleTransition,()> { + let (mut property, mut duration) = (None, None); + let (mut timing_function, mut delay) = (None, None); + loop { + if property.is_none() { + if let Ok(value) = input.try(|input| transition_property::parse_one(input)) { + property = Some(value); + continue + } + } + + if duration.is_none() { + if let Ok(value) = input.try(|input| transition_duration::parse_one(input)) { + duration = Some(value); + continue + } + } + + if timing_function.is_none() { + if let Ok(value) = input.try(|input| { + transition_timing_function::parse_one(input) + }) { + timing_function = Some(value); + continue + } + } + + if delay.is_none() { + if let Ok(value) = input.try(|input| transition_delay::parse_one(input)) { + delay = Some(value); + continue; + } + } + + break + } + + if let Some(property) = property { + Ok(SingleTransition { + transition_property: property, + transition_duration: + duration.unwrap_or(transition_duration::get_initial_single_value()), + transition_timing_function: + timing_function.unwrap_or( + transition_timing_function::get_initial_single_value()), + transition_delay: + delay.unwrap_or(transition_delay::get_initial_single_value()), + }) + } else { + Err(()) + } + } + + if input.try(|input| input.expect_ident_matching("none")).is_ok() { + return Ok(Longhands { + transition_property: None, + transition_duration: None, + transition_timing_function: None, + transition_delay: None, + }) + } + + let results = try!(input.parse_comma_separated(parse_one_transition)); + let (mut properties, mut durations) = (Vec::new(), Vec::new()); + let (mut timing_functions, mut delays) = (Vec::new(), Vec::new()); + for result in results { + properties.push(result.transition_property); + durations.push(result.transition_duration); + timing_functions.push(result.transition_timing_function); + delays.push(result.transition_delay); + } + + Ok(Longhands { + transition_property: Some(transition_property::SpecifiedValue(properties)), + transition_duration: Some(transition_duration::SpecifiedValue(durations)), + transition_timing_function: + Some(transition_timing_function::SpecifiedValue(timing_functions)), + transition_delay: Some(transition_delay::SpecifiedValue(delays)), + }) + </%self:shorthand> +} + + +// TODO(SimonSapin): Convert this to a syntax extension rather than a Mako template. +// Maybe submit for inclusion in libstd? +mod property_bit_field { + + pub struct PropertyBitField { + storage: [u32; (${len(data.longhands)} - 1 + 32) / 32] + } + + impl PropertyBitField { + #[inline] + pub fn new() -> PropertyBitField { + PropertyBitField { storage: [0; (${len(data.longhands)} - 1 + 32) / 32] } + } + + #[inline] + fn get(&self, bit: usize) -> bool { + (self.storage[bit / 32] & (1 << (bit % 32))) != 0 + } + #[inline] + fn set(&mut self, bit: usize) { + self.storage[bit / 32] |= 1 << (bit % 32) + } + % for i, property in enumerate(data.longhands): + % if not property.derived_from: + #[allow(non_snake_case)] + #[inline] + pub fn get_${property.ident}(&self) -> bool { + self.get(${i}) + } + #[allow(non_snake_case)] + #[inline] + pub fn set_${property.ident}(&mut self) { + self.set(${i}) + } + % endif + % endfor + } +} + +% for property in data.longhands: + % if not property.derived_from: + #[allow(non_snake_case)] + fn substitute_variables_${property.ident}<F>( + value: &DeclaredValue<longhands::${property.ident}::SpecifiedValue>, + custom_properties: &Option<Arc<::custom_properties::ComputedValuesMap>>, + f: F, + error_reporter: &mut StdBox<ParseErrorReporter + Send>) + where F: FnOnce(&DeclaredValue<longhands::${property.ident}::SpecifiedValue>) + { + if let DeclaredValue::WithVariables { + ref css, first_token_type, ref base_url, from_shorthand + } = *value { + substitute_variables_${property.ident}_slow(css, + first_token_type, + base_url, + from_shorthand, + custom_properties, + f, + error_reporter); + } else { + f(value); + } + } + + #[allow(non_snake_case)] + #[inline(never)] + fn substitute_variables_${property.ident}_slow<F>( + css: &String, + first_token_type: TokenSerializationType, + base_url: &Url, + from_shorthand: Option<Shorthand>, + custom_properties: &Option<Arc<::custom_properties::ComputedValuesMap>>, + f: F, + error_reporter: &mut StdBox<ParseErrorReporter + Send>) + where F: FnOnce(&DeclaredValue<longhands::${property.ident}::SpecifiedValue>) { + f(& + ::custom_properties::substitute(css, first_token_type, custom_properties) + .and_then(|css| { + // As of this writing, only the base URL is used for property values: + // + // FIXME(pcwalton): Cloning the error reporter is slow! But so are custom + // properties, so whatever... + let context = ParserContext::new( + ::stylesheets::Origin::Author, base_url, (*error_reporter).clone()); + Parser::new(&css).parse_entirely(|input| { + match from_shorthand { + None => { + longhands::${property.ident}::parse_specified(&context, input) + } + % for shorthand in data.shorthands: + % if property in shorthand.sub_properties: + Some(Shorthand::${shorthand.camel_case}) => { + shorthands::${shorthand.ident}::parse_value(&context, input) + .map(|result| match result.${property.ident} { + Some(value) => DeclaredValue::Value(value), + None => DeclaredValue::Initial, + }) + } + % endif + % endfor + _ => unreachable!() + } + }) + }) + .unwrap_or( + // Invalid at computed-value time. + DeclaredValue::${"Inherit" if property.style_struct.inherited else "Initial"} + ) + ); + } + % endif +% endfor + +/// Declarations are stored in reverse order. +/// Overridden declarations are skipped. +#[derive(Debug, PartialEq, HeapSizeOf)] +pub struct PropertyDeclarationBlock { + #[ignore_heap_size_of = "#7038"] + pub important: Arc<Vec<PropertyDeclaration>>, + #[ignore_heap_size_of = "#7038"] + pub normal: Arc<Vec<PropertyDeclaration>>, +} + +pub fn parse_style_attribute(input: &str, base_url: &Url, error_reporter: StdBox<ParseErrorReporter + Send>) + -> PropertyDeclarationBlock { + let context = ParserContext::new(Origin::Author, base_url, error_reporter); + parse_property_declaration_list(&context, &mut Parser::new(input)) +} + +pub fn parse_one_declaration(name: &str, input: &str, base_url: &Url, error_reporter: StdBox<ParseErrorReporter + Send>) + -> Result<Vec<PropertyDeclaration>, ()> { + let context = ParserContext::new(Origin::Author, base_url, error_reporter); + let mut results = vec![]; + match PropertyDeclaration::parse(name, &context, &mut Parser::new(input), &mut results) { + PropertyDeclarationParseResult::ValidOrIgnoredDeclaration => Ok(results), + _ => Err(()) + } +} + +struct PropertyDeclarationParser<'a, 'b: 'a> { + context: &'a ParserContext<'b>, +} + + +/// Default methods reject all at rules. +impl<'a, 'b> AtRuleParser for PropertyDeclarationParser<'a, 'b> { + type Prelude = (); + type AtRule = (Vec<PropertyDeclaration>, bool); +} + + +impl<'a, 'b> DeclarationParser for PropertyDeclarationParser<'a, 'b> { + type Declaration = (Vec<PropertyDeclaration>, bool); + + fn parse_value(&self, name: &str, input: &mut Parser) -> Result<(Vec<PropertyDeclaration>, bool), ()> { + let mut results = vec![]; + try!(input.parse_until_before(Delimiter::Bang, |input| { + match PropertyDeclaration::parse(name, self.context, input, &mut results) { + PropertyDeclarationParseResult::ValidOrIgnoredDeclaration => Ok(()), + _ => Err(()) + } + })); + let important = input.try(parse_important).is_ok(); + Ok((results, important)) + } +} + + +pub fn parse_property_declaration_list(context: &ParserContext, input: &mut Parser) + -> PropertyDeclarationBlock { + let mut important_declarations = Vec::new(); + let mut normal_declarations = Vec::new(); + let parser = PropertyDeclarationParser { + context: context, + }; + let mut iter = DeclarationListParser::new(input, parser); + while let Some(declaration) = iter.next() { + match declaration { + Ok((results, important)) => { + if important { + important_declarations.extend(results); + } else { + normal_declarations.extend(results); + } + } + Err(range) => { + let pos = range.start; + let message = format!("Unsupported property declaration: '{}'", + iter.input.slice(range)); + log_css_error(iter.input, pos, &*message, &context); + } + } + } + PropertyDeclarationBlock { + important: Arc::new(deduplicate_property_declarations(important_declarations)), + normal: Arc::new(deduplicate_property_declarations(normal_declarations)), + } +} + + +/// Only keep the last declaration for any given property. +/// The input is in source order, output in reverse source order. +fn deduplicate_property_declarations(declarations: Vec<PropertyDeclaration>) + -> Vec<PropertyDeclaration> { + let mut deduplicated = vec![]; + let mut seen = PropertyBitField::new(); + let mut seen_custom = Vec::new(); + for declaration in declarations.into_iter().rev() { + match declaration { + % for property in data.longhands: + PropertyDeclaration::${property.camel_case}(..) => { + % if not property.derived_from: + if seen.get_${property.ident}() { + continue + } + seen.set_${property.ident}() + % else: + unreachable!(); + % endif + }, + % endfor + PropertyDeclaration::Custom(ref name, _) => { + if seen_custom.contains(name) { + continue + } + seen_custom.push(name.clone()) + } + } + deduplicated.push(declaration) + } + deduplicated +} + + +#[derive(Copy, Clone, PartialEq, Eq, Debug)] +pub enum CSSWideKeyword { + InitialKeyword, + InheritKeyword, + UnsetKeyword, +} + +impl CSSWideKeyword { + pub fn parse(input: &mut Parser) -> Result<CSSWideKeyword, ()> { + match_ignore_ascii_case! { try!(input.expect_ident()), + "initial" => Ok(CSSWideKeyword::InitialKeyword), + "inherit" => Ok(CSSWideKeyword::InheritKeyword), + "unset" => Ok(CSSWideKeyword::UnsetKeyword), + _ => Err(()) + } + } +} + +#[derive(Clone, Copy, Eq, PartialEq, Debug, HeapSizeOf)] +pub enum Shorthand { + % for property in data.shorthands: + ${property.camel_case}, + % endfor +} + +impl Shorthand { + pub fn from_name(name: &str) -> Option<Shorthand> { + match_ignore_ascii_case! { name, + % for property in data.shorthands: + "${property.name}" => Some(Shorthand::${property.camel_case}), + % endfor + _ => None + } + } + + pub fn longhands(&self) -> &'static [&'static str] { + % for property in data.shorthands: + static ${property.ident.upper()}: &'static [&'static str] = &[ + % for sub in property.sub_properties: + "${sub.name}", + % endfor + ]; + % endfor + match *self { + % for property in data.shorthands: + Shorthand::${property.camel_case} => ${property.ident.upper()}, + % endfor + } + } +} + +#[derive(Clone, PartialEq, Eq, Debug, HeapSizeOf)] +pub enum DeclaredValue<T> { + Value(T), + WithVariables { + css: String, + first_token_type: TokenSerializationType, + base_url: Url, + from_shorthand: Option<Shorthand>, + }, + Initial, + Inherit, + // There is no Unset variant here. + // The 'unset' keyword is represented as either Initial or Inherit, + // depending on whether the property is inherited. +} + +impl<T: ToCss> ToCss for DeclaredValue<T> { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match *self { + DeclaredValue::Value(ref inner) => inner.to_css(dest), + DeclaredValue::WithVariables { ref css, from_shorthand: None, .. } => { + dest.write_str(css) + } + // https://drafts.csswg.org/css-variables/#variables-in-shorthands + DeclaredValue::WithVariables { .. } => Ok(()), + DeclaredValue::Initial => dest.write_str("initial"), + DeclaredValue::Inherit => dest.write_str("inherit"), + } + } +} + +#[derive(PartialEq, Clone, Debug, HeapSizeOf)] +pub enum PropertyDeclaration { + % for property in data.longhands: + ${property.camel_case}(DeclaredValue<longhands::${property.ident}::SpecifiedValue>), + % endfor + Custom(::custom_properties::Name, DeclaredValue<::custom_properties::SpecifiedValue>), +} + + +#[derive(Eq, PartialEq, Copy, Clone)] +pub enum PropertyDeclarationParseResult { + UnknownProperty, + ExperimentalProperty, + InvalidValue, + ValidOrIgnoredDeclaration, +} + +#[derive(Eq, PartialEq, Clone)] +pub enum PropertyDeclarationName { + Longhand(&'static str), + Custom(::custom_properties::Name), + Internal +} + +impl PartialEq<str> for PropertyDeclarationName { + fn eq(&self, other: &str) -> bool { + match *self { + PropertyDeclarationName::Longhand(n) => n == other, + PropertyDeclarationName::Custom(ref n) => { + ::custom_properties::parse_name(other) == Ok(&**n) + } + PropertyDeclarationName::Internal => false, + } + } +} + +impl fmt::Display for PropertyDeclarationName { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match *self { + PropertyDeclarationName::Longhand(n) => f.write_str(n), + PropertyDeclarationName::Custom(ref n) => { + try!(f.write_str("--")); + f.write_str(n) + } + PropertyDeclarationName::Internal => Ok(()), + } + } +} + +impl PropertyDeclaration { + pub fn name(&self) -> PropertyDeclarationName { + match *self { + % for property in data.longhands: + PropertyDeclaration::${property.camel_case}(..) => + % if not property.derived_from: + PropertyDeclarationName::Longhand("${property.name}"), + % else: + PropertyDeclarationName::Internal, + % endif + % endfor + PropertyDeclaration::Custom(ref name, _) => { + PropertyDeclarationName::Custom(name.clone()) + } + } + } + + pub fn value(&self) -> String { + match *self { + % for property in data.longhands: + PropertyDeclaration::${property.camel_case} + % if not property.derived_from: + (ref value) => value.to_css_string(), + % else: + (_) => panic!("unsupported property declaration: ${property.name}"), + % endif + % endfor + PropertyDeclaration::Custom(_, ref value) => value.to_css_string(), + } + } + + /// If this is a pending-substitution value from the given shorthand, return that value + // Extra space here because < seems to be removed by Mako when immediately followed by &. + // ↓ + pub fn with_variables_from_shorthand(&self, shorthand: Shorthand) -> Option< &str> { + match *self { + % for property in data.longhands: + PropertyDeclaration::${property.camel_case}(ref value) => match *value { + DeclaredValue::WithVariables { ref css, from_shorthand: Some(s), .. } + if s == shorthand => { + Some(&**css) + } + _ => None + }, + % endfor + PropertyDeclaration::Custom(..) => None, + } + } + + /// Return whether this is a pending-substitution value. + /// https://drafts.csswg.org/css-variables/#variables-in-shorthands + pub fn with_variables(&self) -> bool { + match *self { + % for property in data.longhands: + PropertyDeclaration::${property.camel_case}(ref value) => match *value { + DeclaredValue::WithVariables { .. } => true, + _ => false, + }, + % endfor + PropertyDeclaration::Custom(_, ref value) => match *value { + DeclaredValue::WithVariables { .. } => true, + _ => false, + } + } + } + + pub fn matches(&self, name: &str) -> bool { + match *self { + % for property in data.longhands: + PropertyDeclaration::${property.camel_case}(..) => + % if not property.derived_from: + name.eq_ignore_ascii_case("${property.name}"), + % else: + false, + % endif + % endfor + PropertyDeclaration::Custom(ref declaration_name, _) => { + ::custom_properties::parse_name(name) == Ok(&**declaration_name) + } + } + } + + pub fn parse(name: &str, context: &ParserContext, input: &mut Parser, + result_list: &mut Vec<PropertyDeclaration>) -> PropertyDeclarationParseResult { + if let Ok(name) = ::custom_properties::parse_name(name) { + let value = match input.try(CSSWideKeyword::parse) { + Ok(CSSWideKeyword::UnsetKeyword) | // Custom properties are alawys inherited + Ok(CSSWideKeyword::InheritKeyword) => DeclaredValue::Inherit, + Ok(CSSWideKeyword::InitialKeyword) => DeclaredValue::Initial, + Err(()) => match ::custom_properties::parse(input) { + Ok(value) => DeclaredValue::Value(value), + Err(()) => return PropertyDeclarationParseResult::InvalidValue, + } + }; + result_list.push(PropertyDeclaration::Custom(Atom::from(name), value)); + return PropertyDeclarationParseResult::ValidOrIgnoredDeclaration; + } + match_ignore_ascii_case! { name, + % for property in data.longhands: + % if not property.derived_from: + "${property.name}" => { + % if property.internal: + if context.stylesheet_origin != Origin::UserAgent { + return PropertyDeclarationParseResult::UnknownProperty + } + % endif + % if property.experimental: + if !::util::prefs::get_pref("${property.experimental}") + .as_boolean().unwrap_or(false) { + return PropertyDeclarationParseResult::ExperimentalProperty + } + % endif + match longhands::${property.ident}::parse_declared(context, input) { + Ok(value) => { + result_list.push(PropertyDeclaration::${property.camel_case}(value)); + PropertyDeclarationParseResult::ValidOrIgnoredDeclaration + }, + Err(()) => PropertyDeclarationParseResult::InvalidValue, + } + }, + % else: + "${property.name}" => PropertyDeclarationParseResult::UnknownProperty, + % endif + % endfor + % for shorthand in data.shorthands: + "${shorthand.name}" => { + % if shorthand.internal: + if context.stylesheet_origin != Origin::UserAgent { + return PropertyDeclarationParseResult::UnknownProperty + } + % endif + % if shorthand.experimental: + if !::util::prefs::get_pref("${shorthand.experimental}") + .as_boolean().unwrap_or(false) { + return PropertyDeclarationParseResult::ExperimentalProperty + } + % endif + match input.try(CSSWideKeyword::parse) { + Ok(CSSWideKeyword::InheritKeyword) => { + % for sub_property in shorthand.sub_properties: + result_list.push( + PropertyDeclaration::${sub_property.camel_case}( + DeclaredValue::Inherit)); + % endfor + PropertyDeclarationParseResult::ValidOrIgnoredDeclaration + }, + Ok(CSSWideKeyword::InitialKeyword) => { + % for sub_property in shorthand.sub_properties: + result_list.push( + PropertyDeclaration::${sub_property.camel_case}( + DeclaredValue::Initial)); + % endfor + PropertyDeclarationParseResult::ValidOrIgnoredDeclaration + }, + Ok(CSSWideKeyword::UnsetKeyword) => { + % for sub_property in shorthand.sub_properties: + result_list.push(PropertyDeclaration::${sub_property.camel_case}( + DeclaredValue::${"Inherit" if sub_property.style_struct.inherited else "Initial"} + )); + % endfor + PropertyDeclarationParseResult::ValidOrIgnoredDeclaration + }, + Err(()) => match shorthands::${shorthand.ident}::parse(context, input, result_list) { + Ok(()) => PropertyDeclarationParseResult::ValidOrIgnoredDeclaration, + Err(()) => PropertyDeclarationParseResult::InvalidValue, + } + } + }, + % endfor + + _ => PropertyDeclarationParseResult::UnknownProperty + } + } +} + +pub mod style_struct_traits { + use super::longhands; + + % for style_struct in data.active_style_structs(): + pub trait ${style_struct.trait_name}: Clone { + % for longhand in style_struct.longhands: + #[allow(non_snake_case)] + fn set_${longhand.ident}(&mut self, v: longhands::${longhand.ident}::computed_value::T); + #[allow(non_snake_case)] + fn copy_${longhand.ident}_from(&mut self, other: &Self); + % if longhand.need_clone: + #[allow(non_snake_case)] + fn clone_${longhand.ident}(&self) -> longhands::${longhand.ident}::computed_value::T; + % endif + % endfor + % for additional in style_struct.additional_methods: + #[allow(non_snake_case)] + ${additional.declare()} + % endfor + } + % endfor +} + +pub mod style_structs { + use fnv::FnvHasher; + use super::longhands; + use std::hash::{Hash, Hasher}; + + % for style_struct in data.active_style_structs(): + % if style_struct.trait_name == "Font": + #[derive(Clone, HeapSizeOf, Debug)] + % else: + #[derive(PartialEq, Clone, HeapSizeOf)] + % endif + pub struct ${style_struct.servo_struct_name} { + % for longhand in style_struct.longhands: + pub ${longhand.ident}: longhands::${longhand.ident}::computed_value::T, + % endfor + % if style_struct.trait_name == "Font": + pub hash: u64, + % endif + } + % if style_struct.trait_name == "Font": + + impl PartialEq for ${style_struct.servo_struct_name} { + fn eq(&self, other: &${style_struct.servo_struct_name}) -> bool { + self.hash == other.hash + % for longhand in style_struct.longhands: + && self.${longhand.ident} == other.${longhand.ident} + % endfor + } + } + % endif + + impl super::style_struct_traits::${style_struct.trait_name} for ${style_struct.servo_struct_name} { + % for longhand in style_struct.longhands: + fn set_${longhand.ident}(&mut self, v: longhands::${longhand.ident}::computed_value::T) { + self.${longhand.ident} = v; + } + fn copy_${longhand.ident}_from(&mut self, other: &Self) { + self.${longhand.ident} = other.${longhand.ident}.clone(); + } + % endfor + % if style_struct.trait_name == "Border": + % for side in ["top", "right", "bottom", "left"]: + fn clone_border_${side}_style(&self) -> longhands::border_${side}_style::computed_value::T { + self.border_${side}_style.clone() + } + fn border_${side}_has_nonzero_width(&self) -> bool { + self.border_${side}_width != ::app_units::Au(0) + } + % endfor + % elif style_struct.trait_name == "Box": + fn clone_display(&self) -> longhands::display::computed_value::T { + self.display.clone() + } + fn clone_position(&self) -> longhands::position::computed_value::T { + self.position.clone() + } + fn clone_float(&self) -> longhands::float::computed_value::T { + self.float.clone() + } + fn clone_overflow_x(&self) -> longhands::overflow_x::computed_value::T { + self.overflow_x.clone() + } + fn clone_overflow_y(&self) -> longhands::overflow_y::computed_value::T { + self.overflow_y.clone() + } + fn transition_count(&self) -> usize { + self.transition_property.0.len() + } + % elif style_struct.trait_name == "Color": + fn clone_color(&self) -> longhands::color::computed_value::T { + self.color.clone() + } + % elif style_struct.trait_name == "Font": + fn clone_font_size(&self) -> longhands::font_size::computed_value::T { + self.font_size.clone() + } + fn clone_font_weight(&self) -> longhands::font_weight::computed_value::T { + self.font_weight.clone() + } + fn compute_font_hash(&mut self) { + // Corresponds to the fields in `gfx::font_template::FontTemplateDescriptor`. + let mut hasher: FnvHasher = Default::default(); + hasher.write_u16(self.font_weight as u16); + self.font_stretch.hash(&mut hasher); + self.font_family.hash(&mut hasher); + self.hash = hasher.finish() + } + % elif style_struct.trait_name == "InheritedBox": + fn clone_direction(&self) -> longhands::direction::computed_value::T { + self.direction.clone() + } + fn clone_writing_mode(&self) -> longhands::writing_mode::computed_value::T { + self.writing_mode.clone() + } + fn clone_text_orientation(&self) -> longhands::text_orientation::computed_value::T { + self.text_orientation.clone() + } + % elif style_struct.trait_name == "InheritedText" and product == "servo": + fn clone__servo_text_decorations_in_effect(&self) -> + longhands::_servo_text_decorations_in_effect::computed_value::T { + self._servo_text_decorations_in_effect.clone() + } + % elif style_struct.trait_name == "Outline": + fn clone_outline_style(&self) -> longhands::outline_style::computed_value::T { + self.outline_style.clone() + } + fn outline_has_nonzero_width(&self) -> bool { + self.outline_width != ::app_units::Au(0) + } + % elif style_struct.trait_name == "Text": + fn has_underline(&self) -> bool { + self.text_decoration.underline + } + fn has_overline(&self) -> bool { + self.text_decoration.overline + } + fn has_line_through(&self) -> bool { + self.text_decoration.line_through + } + % endif + } + + % endfor +} + +pub trait ComputedValues : Clone + Send + Sync + 'static { + % for style_struct in data.active_style_structs(): + type Concrete${style_struct.trait_name}: style_struct_traits::${style_struct.trait_name}; + % endfor + + // Temporary bailout case for stuff we haven't made work with the trait + // yet - panics for non-Servo implementations. + // + // Used only for animations. Don't use it in other places. + fn as_servo<'a>(&'a self) -> &'a ServoComputedValues; + fn as_servo_mut<'a>(&'a mut self) -> &'a mut ServoComputedValues; + + fn new(custom_properties: Option<Arc<::custom_properties::ComputedValuesMap>>, + shareable: bool, + writing_mode: WritingMode, + root_font_size: Au, + % for style_struct in data.active_style_structs(): + ${style_struct.ident}: Arc<Self::Concrete${style_struct.trait_name}>, + % endfor + ) -> Self; + + fn initial_values() -> &'static Self; + + fn do_cascade_property<F: FnOnce(&Vec<Option<CascadePropertyFn<Self>>>)>(f: F); + + % for style_struct in data.active_style_structs(): + fn clone_${style_struct.trait_name_lower}(&self) -> + Arc<Self::Concrete${style_struct.trait_name}>; + fn get_${style_struct.trait_name_lower}<'a>(&'a self) -> + &'a Self::Concrete${style_struct.trait_name}; + fn mutate_${style_struct.trait_name_lower}<'a>(&'a mut self) -> + &'a mut Self::Concrete${style_struct.trait_name}; + % endfor + + fn custom_properties(&self) -> Option<Arc<::custom_properties::ComputedValuesMap>>; + fn root_font_size(&self) -> Au; + fn set_root_font_size(&mut self, size: Au); + fn set_writing_mode(&mut self, mode: WritingMode); + fn is_multicol(&self) -> bool; +} + +#[derive(Clone, HeapSizeOf)] +pub struct ServoComputedValues { + % for style_struct in data.active_style_structs(): + ${style_struct.ident}: Arc<style_structs::${style_struct.servo_struct_name}>, + % endfor + custom_properties: Option<Arc<::custom_properties::ComputedValuesMap>>, + shareable: bool, + pub writing_mode: WritingMode, + pub root_font_size: Au, +} + +impl ComputedValues for ServoComputedValues { + % for style_struct in data.active_style_structs(): + type Concrete${style_struct.trait_name} = style_structs::${style_struct.servo_struct_name}; + % endfor + + fn as_servo<'a>(&'a self) -> &'a ServoComputedValues { self } + fn as_servo_mut<'a>(&'a mut self) -> &'a mut ServoComputedValues { self } + + fn new(custom_properties: Option<Arc<::custom_properties::ComputedValuesMap>>, + shareable: bool, + writing_mode: WritingMode, + root_font_size: Au, + % for style_struct in data.active_style_structs(): + ${style_struct.ident}: Arc<style_structs::${style_struct.servo_struct_name}>, + % endfor + ) -> Self { + ServoComputedValues { + custom_properties: custom_properties, + shareable: shareable, + writing_mode: writing_mode, + root_font_size: root_font_size, + % for style_struct in data.active_style_structs(): + ${style_struct.ident}: ${style_struct.ident}, + % endfor + } + } + + fn initial_values() -> &'static Self { &*INITIAL_SERVO_VALUES } + + fn do_cascade_property<F: FnOnce(&Vec<Option<CascadePropertyFn<Self>>>)>(f: F) { + CASCADE_PROPERTY.with(|x| f(x)); + } + + % for style_struct in data.active_style_structs(): + #[inline] + fn clone_${style_struct.trait_name_lower}(&self) -> + Arc<Self::Concrete${style_struct.trait_name}> { + self.${style_struct.ident}.clone() + } + #[inline] + fn get_${style_struct.trait_name_lower}<'a>(&'a self) -> + &'a Self::Concrete${style_struct.trait_name} { + &self.${style_struct.ident} + } + #[inline] + fn mutate_${style_struct.trait_name_lower}<'a>(&'a mut self) -> + &'a mut Self::Concrete${style_struct.trait_name} { + Arc::make_mut(&mut self.${style_struct.ident}) + } + % endfor + + // Cloning the Arc here is fine because it only happens in the case where we have custom + // properties, and those are both rare and expensive. + fn custom_properties(&self) -> Option<Arc<::custom_properties::ComputedValuesMap>> { + self.custom_properties.as_ref().map(|x| x.clone()) + } + + fn root_font_size(&self) -> Au { self.root_font_size } + fn set_root_font_size(&mut self, size: Au) { self.root_font_size = size } + fn set_writing_mode(&mut self, mode: WritingMode) { self.writing_mode = mode; } + + #[inline] + fn is_multicol(&self) -> bool { + let style = self.get_column(); + style.column_count.0.is_some() || style.column_width.0.is_some() + } +} + +impl ServoComputedValues { + /// Resolves the currentColor keyword. + /// Any color value form computed values (except for the 'color' property itself) + /// should go through this method. + /// + /// Usage example: + /// let top_color = style.resolve_color(style.Border.border_top_color); + #[inline] + pub fn resolve_color(&self, color: CSSParserColor) -> RGBA { + match color { + CSSParserColor::RGBA(rgba) => rgba, + CSSParserColor::CurrentColor => self.get_color().color, + } + } + + #[inline] + pub fn content_inline_size(&self) -> computed::LengthOrPercentageOrAuto { + let box_style = self.get_box(); + if self.writing_mode.is_vertical() { + box_style.height + } else { + box_style.width + } + } + + #[inline] + pub fn content_block_size(&self) -> computed::LengthOrPercentageOrAuto { + let box_style = self.get_box(); + if self.writing_mode.is_vertical() { box_style.width } else { box_style.height } + } + + #[inline] + pub fn min_inline_size(&self) -> computed::LengthOrPercentage { + let position_style = self.get_position(); + if self.writing_mode.is_vertical() { position_style.min_height } else { position_style.min_width } + } + + #[inline] + pub fn min_block_size(&self) -> computed::LengthOrPercentage { + let position_style = self.get_position(); + if self.writing_mode.is_vertical() { position_style.min_width } else { position_style.min_height } + } + + #[inline] + pub fn max_inline_size(&self) -> computed::LengthOrPercentageOrNone { + let position_style = self.get_position(); + if self.writing_mode.is_vertical() { position_style.max_height } else { position_style.max_width } + } + + #[inline] + pub fn max_block_size(&self) -> computed::LengthOrPercentageOrNone { + let position_style = self.get_position(); + if self.writing_mode.is_vertical() { position_style.max_width } else { position_style.max_height } + } + + #[inline] + pub fn logical_padding(&self) -> LogicalMargin<computed::LengthOrPercentage> { + let padding_style = self.get_padding(); + LogicalMargin::from_physical(self.writing_mode, SideOffsets2D::new( + padding_style.padding_top, + padding_style.padding_right, + padding_style.padding_bottom, + padding_style.padding_left, + )) + } + + #[inline] + pub fn logical_border_width(&self) -> LogicalMargin<Au> { + let border_style = self.get_border(); + LogicalMargin::from_physical(self.writing_mode, SideOffsets2D::new( + border_style.border_top_width, + border_style.border_right_width, + border_style.border_bottom_width, + border_style.border_left_width, + )) + } + + #[inline] + pub fn logical_margin(&self) -> LogicalMargin<computed::LengthOrPercentageOrAuto> { + let margin_style = self.get_margin(); + LogicalMargin::from_physical(self.writing_mode, SideOffsets2D::new( + margin_style.margin_top, + margin_style.margin_right, + margin_style.margin_bottom, + margin_style.margin_left, + )) + } + + #[inline] + pub fn logical_position(&self) -> LogicalMargin<computed::LengthOrPercentageOrAuto> { + // FIXME(SimonSapin): should be the writing mode of the containing block, maybe? + let position_style = self.get_position(); + LogicalMargin::from_physical(self.writing_mode, SideOffsets2D::new( + position_style.top, + position_style.right, + position_style.bottom, + position_style.left, + )) + } + + #[inline] + pub fn get_font_arc(&self) -> Arc<style_structs::ServoFont> { + self.font.clone() + } + + // http://dev.w3.org/csswg/css-transforms/#grouping-property-values + pub fn get_used_transform_style(&self) -> computed_values::transform_style::T { + use computed_values::mix_blend_mode; + use computed_values::transform_style; + + let effects = self.get_effects(); + + // TODO(gw): Add clip-path, isolation, mask-image, mask-border-source when supported. + if effects.opacity < 1.0 || + !effects.filter.is_empty() || + effects.clip.0.is_some() { + effects.mix_blend_mode != mix_blend_mode::T::normal || + return transform_style::T::flat; + } + + if effects.transform_style == transform_style::T::auto { + if effects.transform.0.is_some() { + return transform_style::T::flat; + } + if effects.perspective != computed::LengthOrNone::None { + return transform_style::T::flat; + } + } + + // Return the computed value if not overridden by the above exceptions + effects.transform_style + } + + pub fn transform_requires_layer(&self) -> bool { + // Check if the transform matrix is 2D or 3D + if let Some(ref transform_list) = self.get_effects().transform.0 { + for transform in transform_list { + match *transform { + computed_values::transform::ComputedOperation::Perspective(..) => { + return true; + } + computed_values::transform::ComputedOperation::Matrix(m) => { + // See http://dev.w3.org/csswg/css-transforms/#2d-matrix + if m.m31 != 0.0 || m.m32 != 0.0 || + m.m13 != 0.0 || m.m23 != 0.0 || + m.m43 != 0.0 || m.m14 != 0.0 || + m.m24 != 0.0 || m.m34 != 0.0 || + m.m33 != 1.0 || m.m44 != 1.0 { + return true; + } + } + computed_values::transform::ComputedOperation::Translate(_, _, z) => { + if z != Au(0) { + return true; + } + } + _ => {} + } + } + } + + // Neither perspective nor transform present + false + } + + pub fn computed_value_to_string(&self, name: &str) -> Result<String, ()> { + match name { + % for style_struct in data.active_style_structs(): + % for longhand in style_struct.longhands: + "${longhand.name}" => Ok(self.${style_struct.ident}.${longhand.ident}.to_css_string()), + % endfor + % endfor + _ => { + let name = try!(::custom_properties::parse_name(name)); + let map = try!(self.custom_properties.as_ref().ok_or(())); + let value = try!(map.get(&Atom::from(name)).ok_or(())); + Ok(value.to_css_string()) + } + } + } +} + + +/// Return a WritingMode bitflags from the relevant CSS properties. +pub fn get_writing_mode<S: style_struct_traits::InheritedBox>(inheritedbox_style: &S) -> WritingMode { + use logical_geometry; + let mut flags = WritingMode::empty(); + match inheritedbox_style.clone_direction() { + computed_values::direction::T::ltr => {}, + computed_values::direction::T::rtl => { + flags.insert(logical_geometry::FLAG_RTL); + }, + } + match inheritedbox_style.clone_writing_mode() { + computed_values::writing_mode::T::horizontal_tb => {}, + computed_values::writing_mode::T::vertical_rl => { + flags.insert(logical_geometry::FLAG_VERTICAL); + }, + computed_values::writing_mode::T::vertical_lr => { + flags.insert(logical_geometry::FLAG_VERTICAL); + flags.insert(logical_geometry::FLAG_VERTICAL_LR); + }, + } + match inheritedbox_style.clone_text_orientation() { + % if product == "servo": + computed_values::text_orientation::T::sideways_right => {}, + computed_values::text_orientation::T::sideways_left => { + flags.insert(logical_geometry::FLAG_VERTICAL_LR); + }, + % elif product == "gecko": + // FIXME(bholley): Need to make sure these are correct when we add + // full writing-mode support. + computed_values::text_orientation::T::mixed => {}, + computed_values::text_orientation::T::upright => {}, + % endif + computed_values::text_orientation::T::sideways => { + if flags.intersects(logical_geometry::FLAG_VERTICAL_LR) { + flags.insert(logical_geometry::FLAG_SIDEWAYS_LEFT); + } + }, + } + flags +} + + +/// The initial values for all style structs as defined by the specification. +lazy_static! { + pub static ref INITIAL_SERVO_VALUES: ServoComputedValues = ServoComputedValues { + % for style_struct in data.active_style_structs(): + ${style_struct.ident}: Arc::new(style_structs::${style_struct.servo_struct_name} { + % for longhand in style_struct.longhands: + ${longhand.ident}: longhands::${longhand.ident}::get_initial_value(), + % endfor + % if style_struct.trait_name == "Font": + hash: 0, + % endif + }), + % endfor + custom_properties: None, + shareable: true, + writing_mode: WritingMode::empty(), + root_font_size: longhands::font_size::get_initial_value(), + }; +} + + +/// Fast path for the function below. Only computes new inherited styles. +#[allow(unused_mut, unused_imports)] +fn cascade_with_cached_declarations<C: ComputedValues>( + viewport_size: Size2D<Au>, + applicable_declarations: &[DeclarationBlock<Vec<PropertyDeclaration>>], + shareable: bool, + parent_style: &C, + cached_style: &C, + custom_properties: Option<Arc<::custom_properties::ComputedValuesMap>>, + mut error_reporter: StdBox<ParseErrorReporter + Send>) + -> C { + let mut context = computed::Context { + is_root_element: false, + viewport_size: viewport_size, + inherited_style: parent_style, + style: C::new( + custom_properties, + shareable, + WritingMode::empty(), + parent_style.root_font_size(), + % for style_struct in data.active_style_structs(): + % if style_struct.inherited: + parent_style + % else: + cached_style + % endif + .clone_${style_struct.trait_name_lower}(), + % endfor + ), + }; + let mut seen = PropertyBitField::new(); + // Declaration blocks are stored in increasing precedence order, + // we want them in decreasing order here. + for sub_list in applicable_declarations.iter().rev() { + // Declarations are already stored in reverse order. + for declaration in sub_list.declarations.iter() { + match *declaration { + % for style_struct in data.active_style_structs(): + % for property in style_struct.longhands: + % if not property.derived_from: + PropertyDeclaration::${property.camel_case}(ref + ${'_' if not style_struct.inherited else ''}declared_value) + => { + use properties::style_struct_traits::${style_struct.trait_name}; + % if style_struct.inherited: + if seen.get_${property.ident}() { + continue + } + seen.set_${property.ident}(); + let custom_props = context.style().custom_properties(); + substitute_variables_${property.ident}( + declared_value, &custom_props, + |value| match *value { + DeclaredValue::Value(ref specified_value) + => { + let computed = specified_value.to_computed_value(&context); + context.mutate_style().mutate_${style_struct.trait_name_lower}() + .set_${property.ident}(computed); + }, + DeclaredValue::Initial + => { + // FIXME(bholley): We may want set_X_to_initial_value() here. + let initial = longhands::${property.ident}::get_initial_value(); + context.mutate_style().mutate_${style_struct.trait_name_lower}() + .set_${property.ident}(initial); + }, + DeclaredValue::Inherit => { + // This is a bit slow, but this is rare so it shouldn't + // matter. + // + // FIXME: is it still? + let inherited_struct = parent_style.get_${style_struct.ident}(); + context.mutate_style().mutate_${style_struct.trait_name_lower}() + .copy_${property.ident}_from(inherited_struct); + } + DeclaredValue::WithVariables { .. } => unreachable!() + }, &mut error_reporter + ); + % endif + + % if property.name in data.derived_longhands: + % for derived in data.derived_longhands[property.name]: + longhands::${derived.ident} + ::derive_from_${property.ident}(&mut context); + % endfor + % endif + } + % else: + PropertyDeclaration::${property.camel_case}(_) => { + // Do not allow stylesheets to set derived properties. + } + % endif + % endfor + % endfor + PropertyDeclaration::Custom(..) => {} + } + } + } + + if seen.get_font_style() || seen.get_font_weight() || seen.get_font_stretch() || + seen.get_font_family() { + use properties::style_struct_traits::Font; + context.mutate_style().mutate_font().compute_font_hash(); + } + + context.style +} + +pub type CascadePropertyFn<C /*: ComputedValues */> = + extern "Rust" fn(declaration: &PropertyDeclaration, + inherited_style: &C, + context: &mut computed::Context<C>, + seen: &mut PropertyBitField, + cacheable: &mut bool, + error_reporter: &mut StdBox<ParseErrorReporter + Send>); + +pub fn make_cascade_vec<C: ComputedValues>() -> Vec<Option<CascadePropertyFn<C>>> { + let mut result: Vec<Option<CascadePropertyFn<C>>> = Vec::new(); + % for style_struct in data.active_style_structs(): + % for property in style_struct.longhands: + let discriminant; + unsafe { + let variant = PropertyDeclaration::${property.camel_case}(intrinsics::uninit()); + discriminant = intrinsics::discriminant_value(&variant) as usize; + mem::forget(variant); + } + while result.len() < discriminant + 1 { + result.push(None) + } + result[discriminant] = Some(longhands::${property.ident}::cascade_property); + % endfor + % endfor + result +} + +// This is a thread-local rather than a lazy static to avoid atomic operations when cascading +// properties. +thread_local!(static CASCADE_PROPERTY: Vec<Option<CascadePropertyFn<ServoComputedValues>>> = { + make_cascade_vec::<ServoComputedValues>() +}); + +/// Performs the CSS cascade, computing new styles for an element from its parent style and +/// optionally a cached related style. The arguments are: +/// +/// * `viewport_size`: The size of the initial viewport. +/// +/// * `applicable_declarations`: The list of CSS rules that matched. +/// +/// * `shareable`: Whether the `ComputedValues` structure to be constructed should be considered +/// shareable. +/// +/// * `parent_style`: The parent style, if applicable; if `None`, this is the root node. +/// +/// * `cached_style`: If present, cascading is short-circuited for everything but inherited +/// values and these values are used instead. Obviously, you must be careful when supplying +/// this that it is safe to only provide inherited declarations. If `parent_style` is `None`, +/// this is ignored. +/// +/// Returns the computed values and a boolean indicating whether the result is cacheable. +pub fn cascade<C: ComputedValues>( + viewport_size: Size2D<Au>, + applicable_declarations: &[DeclarationBlock<Vec<PropertyDeclaration>>], + shareable: bool, + parent_style: Option<<&C>, + cached_style: Option<<&C>, + mut error_reporter: StdBox<ParseErrorReporter + Send>) + -> (C, bool) { + use properties::style_struct_traits::{Border, Box, Color, Font, Outline}; + let initial_values = C::initial_values(); + let (is_root_element, inherited_style) = match parent_style { + Some(parent_style) => (false, parent_style), + None => (true, initial_values), + }; + + let inherited_custom_properties = inherited_style.custom_properties(); + let mut custom_properties = None; + let mut seen_custom = HashSet::new(); + for sub_list in applicable_declarations.iter().rev() { + // Declarations are already stored in reverse order. + for declaration in sub_list.declarations.iter() { + match *declaration { + PropertyDeclaration::Custom(ref name, ref value) => { + ::custom_properties::cascade( + &mut custom_properties, &inherited_custom_properties, + &mut seen_custom, name, value) + } + _ => {} + } + } + } + let custom_properties = ::custom_properties::finish_cascade( + custom_properties, &inherited_custom_properties); + + if let (Some(cached_style), Some(parent_style)) = (cached_style, parent_style) { + let style = cascade_with_cached_declarations(viewport_size, + applicable_declarations, + shareable, + parent_style, + cached_style, + custom_properties, + error_reporter); + return (style, false) + } + + let mut context = computed::Context { + is_root_element: is_root_element, + viewport_size: viewport_size, + inherited_style: inherited_style, + style: C::new( + custom_properties, + shareable, + WritingMode::empty(), + inherited_style.root_font_size(), + % for style_struct in data.active_style_structs(): + % if style_struct.inherited: + inherited_style + % else: + initial_values + % endif + .clone_${style_struct.trait_name_lower}(), + % endfor + ), + }; + + // Set computed values, overwriting earlier declarations for the same property. + let mut cacheable = true; + let mut seen = PropertyBitField::new(); + // Declaration blocks are stored in increasing precedence order, we want them in decreasing + // order here. + // + // We could (and used to) use a pattern match here, but that bloats this function to over 100K + // of compiled code! To improve i-cache behavior, we outline the individual functions and use + // virtual dispatch instead. + C::do_cascade_property(|cascade_property| { + % for category_to_cascade_now in ["early", "other"]: + for sub_list in applicable_declarations.iter().rev() { + // Declarations are already stored in reverse order. + for declaration in sub_list.declarations.iter() { + if let PropertyDeclaration::Custom(..) = *declaration { + continue + } + // The computed value of some properties depends on the (sometimes computed) + // value of *other* properties. + // So we classify properties into "early" and "other", + // such that the only dependencies can be from "other" to "early". + // We iterate applicable_declarations twice, first cascading "early" properties + // then "other". + // Unfortunately, it’s not easy to check that this classification is correct. + let is_early_property = matches!(*declaration, + PropertyDeclaration::FontSize(_) | + PropertyDeclaration::Color(_) | + PropertyDeclaration::Position(_) | + PropertyDeclaration::Float(_) | + PropertyDeclaration::TextDecoration(_) + ); + if + % if category_to_cascade_now == "early": + ! + % endif + is_early_property + { + continue + } + let discriminant = unsafe { + intrinsics::discriminant_value(declaration) as usize + }; + (cascade_property[discriminant].unwrap())(declaration, + inherited_style, + &mut context, + &mut seen, + &mut cacheable, + &mut error_reporter); + } + } + % endfor + }); + + let mut style = context.style; + + let positioned = matches!(style.get_box().clone_position(), + longhands::position::SpecifiedValue::absolute | + longhands::position::SpecifiedValue::fixed); + let floated = style.get_box().clone_float() != longhands::float::SpecifiedValue::none; + if positioned || floated || is_root_element { + use computed_values::display::T; + + let specified_display = style.get_box().clone_display(); + let computed_display = match specified_display { + T::inline_table => { + Some(T::table) + } + T::inline | T::inline_block | + T::table_row_group | T::table_column | + T::table_column_group | T::table_header_group | + T::table_footer_group | T::table_row | T::table_cell | + T::table_caption => { + Some(T::block) + } + _ => None + }; + if let Some(computed_display) = computed_display { + let box_ = style.mutate_box(); + box_.set_display(computed_display); + % if product == "servo": + box_.set__servo_display_for_hypothetical_box(if is_root_element { + computed_display + } else { + specified_display + }); + % endif + } + } + + { + use computed_values::overflow_x::T as overflow; + use computed_values::overflow_y; + match (style.get_box().clone_overflow_x() == longhands::overflow_x::computed_value::T::visible, + style.get_box().clone_overflow_y().0 == longhands::overflow_x::computed_value::T::visible) { + (true, true) => {} + (true, _) => { + style.mutate_box().set_overflow_x(overflow::auto); + } + (_, true) => { + style.mutate_box().set_overflow_y(overflow_y::T(overflow::auto)); + } + _ => {} + } + } + + // The initial value of border-*-width may be changed at computed value time. + % for side in ["top", "right", "bottom", "left"]: + // Like calling to_computed_value, which wouldn't type check. + if style.get_border().clone_border_${side}_style().none_or_hidden() && + style.get_border().border_${side}_has_nonzero_width() { + style.mutate_border().set_border_${side}_width(Au(0)); + } + % endfor + + // The initial value of outline width may be changed at computed value time. + if style.get_outline().clone_outline_style().none_or_hidden() && + style.get_outline().outline_has_nonzero_width() { + style.mutate_outline().set_outline_width(Au(0)); + } + + if is_root_element { + let s = style.get_font().clone_font_size(); + style.set_root_font_size(s); + } + + if seen.get_font_style() || seen.get_font_weight() || seen.get_font_stretch() || + seen.get_font_family() { + use properties::style_struct_traits::Font; + style.mutate_font().compute_font_hash(); + } + + let mode = get_writing_mode(style.get_inheritedbox()); + style.set_writing_mode(mode); + (style, cacheable) +} + +/// Alters the given style to accommodate replaced content. This is called in flow construction. It +/// handles cases like `<div style="position: absolute">foo bar baz</div>` (in which `foo`, `bar`, +/// and `baz` must not be absolutely-positioned) and cases like `<sup>Foo</sup>` (in which the +/// `vertical-align: top` style of `sup` must not propagate down into `Foo`). +/// +/// FIXME(#5625, pcwalton): It would probably be cleaner and faster to do this in the cascade. +#[inline] +pub fn modify_style_for_replaced_content(style: &mut Arc<ServoComputedValues>) { + // Reset `position` to handle cases like `<div style="position: absolute">foo bar baz</div>`. + if style.box_.display != longhands::display::computed_value::T::inline { + let mut style = Arc::make_mut(style); + Arc::make_mut(&mut style.box_).display = longhands::display::computed_value::T::inline; + Arc::make_mut(&mut style.box_).position = + longhands::position::computed_value::T::static_; + } + + // Reset `vertical-align` to handle cases like `<sup>foo</sup>`. + if style.box_.vertical_align != longhands::vertical_align::computed_value::T::baseline { + let mut style = Arc::make_mut(style); + Arc::make_mut(&mut style.box_).vertical_align = + longhands::vertical_align::computed_value::T::baseline + } + + // Reset margins. + if style.margin.margin_top != computed::LengthOrPercentageOrAuto::Length(Au(0)) || + style.margin.margin_left != computed::LengthOrPercentageOrAuto::Length(Au(0)) || + style.margin.margin_bottom != computed::LengthOrPercentageOrAuto::Length(Au(0)) || + style.margin.margin_right != computed::LengthOrPercentageOrAuto::Length(Au(0)) { + let mut style = Arc::make_mut(style); + let margin = Arc::make_mut(&mut style.margin); + margin.margin_top = computed::LengthOrPercentageOrAuto::Length(Au(0)); + margin.margin_left = computed::LengthOrPercentageOrAuto::Length(Au(0)); + margin.margin_bottom = computed::LengthOrPercentageOrAuto::Length(Au(0)); + margin.margin_right = computed::LengthOrPercentageOrAuto::Length(Au(0)); + } +} + +/// Adjusts borders as appropriate to account for a fragment's status as the first or last fragment +/// within the range of an element. +/// +/// Specifically, this function sets border widths to zero on the sides for which the fragment is +/// not outermost. +#[inline] +pub fn modify_border_style_for_inline_sides(style: &mut Arc<ServoComputedValues>, + is_first_fragment_of_element: bool, + is_last_fragment_of_element: bool) { + fn modify_side(style: &mut Arc<ServoComputedValues>, side: PhysicalSide) { + { + let border = &style.border; + let current_style = match side { + PhysicalSide::Left => (border.border_left_width, border.border_left_style), + PhysicalSide::Right => (border.border_right_width, border.border_right_style), + PhysicalSide::Top => (border.border_top_width, border.border_top_style), + PhysicalSide::Bottom => (border.border_bottom_width, border.border_bottom_style), + }; + if current_style == (Au(0), BorderStyle::none) { + return; + } + } + let mut style = Arc::make_mut(style); + let border = Arc::make_mut(&mut style.border); + match side { + PhysicalSide::Left => { + border.border_left_width = Au(0); + border.border_left_style = BorderStyle::none; + } + PhysicalSide::Right => { + border.border_right_width = Au(0); + border.border_right_style = BorderStyle::none; + } + PhysicalSide::Bottom => { + border.border_bottom_width = Au(0); + border.border_bottom_style = BorderStyle::none; + } + PhysicalSide::Top => { + border.border_top_width = Au(0); + border.border_top_style = BorderStyle::none; + } + } + } + + if !is_first_fragment_of_element { + let side = style.writing_mode.inline_start_physical_side(); + modify_side(style, side) + } + + if !is_last_fragment_of_element { + let side = style.writing_mode.inline_end_physical_side(); + modify_side(style, side) + } +} + +/// Adjusts the display and position properties as appropriate for an anonymous table object. +#[inline] +pub fn modify_style_for_anonymous_table_object( + style: &mut Arc<ServoComputedValues>, + new_display_value: longhands::display::computed_value::T) { + let mut style = Arc::make_mut(style); + let box_style = Arc::make_mut(&mut style.box_); + box_style.display = new_display_value; + box_style.position = longhands::position::computed_value::T::static_; +} + +/// Adjusts the `position` property as necessary for the outer fragment wrapper of an inline-block. +#[inline] +pub fn modify_style_for_outer_inline_block_fragment(style: &mut Arc<ServoComputedValues>) { + let mut style = Arc::make_mut(style); + let box_style = Arc::make_mut(&mut style.box_); + box_style.position = longhands::position::computed_value::T::static_ +} + +/// Adjusts the `position` and `padding` properties as necessary to account for text. +/// +/// Text is never directly relatively positioned; it's always contained within an element that is +/// itself relatively positioned. +#[inline] +pub fn modify_style_for_text(style: &mut Arc<ServoComputedValues>) { + if style.box_.position == longhands::position::computed_value::T::relative { + // We leave the `position` property set to `relative` so that we'll still establish a + // containing block if needed. But we reset all position offsets to `auto`. + let mut style = Arc::make_mut(style); + let mut position = Arc::make_mut(&mut style.position); + position.top = computed::LengthOrPercentageOrAuto::Auto; + position.right = computed::LengthOrPercentageOrAuto::Auto; + position.bottom = computed::LengthOrPercentageOrAuto::Auto; + position.left = computed::LengthOrPercentageOrAuto::Auto; + } + + if style.padding.padding_top != computed::LengthOrPercentage::Length(Au(0)) || + style.padding.padding_right != computed::LengthOrPercentage::Length(Au(0)) || + style.padding.padding_bottom != computed::LengthOrPercentage::Length(Au(0)) || + style.padding.padding_left != computed::LengthOrPercentage::Length(Au(0)) { + let mut style = Arc::make_mut(style); + let mut padding = Arc::make_mut(&mut style.padding); + padding.padding_top = computed::LengthOrPercentage::Length(Au(0)); + padding.padding_right = computed::LengthOrPercentage::Length(Au(0)); + padding.padding_bottom = computed::LengthOrPercentage::Length(Au(0)); + padding.padding_left = computed::LengthOrPercentage::Length(Au(0)); + } + + if style.effects.opacity != 1.0 { + let mut style = Arc::make_mut(style); + let mut effects = Arc::make_mut(&mut style.effects); + effects.opacity = 1.0; + } +} + +/// Adjusts the `margin` property as necessary to account for the text of an `input` element. +/// +/// Margins apply to the `input` element itself, so including them in the text will cause them to +/// be double-counted. +pub fn modify_style_for_input_text(style: &mut Arc<ServoComputedValues>) { + let mut style = Arc::make_mut(style); + let margin_style = Arc::make_mut(&mut style.margin); + margin_style.margin_top = computed::LengthOrPercentageOrAuto::Length(Au(0)); + margin_style.margin_right = computed::LengthOrPercentageOrAuto::Length(Au(0)); + margin_style.margin_bottom = computed::LengthOrPercentageOrAuto::Length(Au(0)); + margin_style.margin_left = computed::LengthOrPercentageOrAuto::Length(Au(0)); + + // whitespace inside text input should not be collapsed + let inherited_text = Arc::make_mut(&mut style.inheritedtext); + inherited_text.white_space = longhands::white_space::computed_value::T::pre; +} + +/// Adjusts the `clip` property so that an inline absolute hypothetical fragment doesn't clip its +/// children. +pub fn modify_style_for_inline_absolute_hypothetical_fragment(style: &mut Arc<ServoComputedValues>) { + if style.get_effects().clip.0.is_some() { + let mut style = Arc::make_mut(style); + let effects_style = Arc::make_mut(&mut style.effects); + effects_style.clip.0 = None + } +} + +pub fn is_supported_property(property: &str) -> bool { + match_ignore_ascii_case! { property, + % for property in data.shorthands + data.longhands: + "${property.name}" => true, + % endfor + _ => property.starts_with("--") + } +} + +#[macro_export] +macro_rules! css_properties_accessors { + ($macro_name: ident) => { + $macro_name! { + % for property in data.shorthands + data.longhands: + % if not property.derived_from and not property.internal: + % if '-' in property.name: + [${property.ident.capitalize()}, Set${property.ident.capitalize()}, "${property.name}"], + % endif + % if property != data.longhands[-1]: + [${property.camel_case}, Set${property.camel_case}, "${property.name}"], + % else: + [${property.camel_case}, Set${property.camel_case}, "${property.name}"] + % endif + % endif + % endfor + } + } +} + + +macro_rules! longhand_properties_idents { + ($macro_name: ident) => { + $macro_name! { + % for property in data.longhands: + ${property.ident} + % endfor + } + } +} diff --git a/components/style/selector_matching.rs b/components/style/selector_matching.rs index 73a48fa7375..167d3277c42 100644 --- a/components/style/selector_matching.rs +++ b/components/style/selector_matching.rs @@ -42,7 +42,7 @@ lazy_static! { Ok(res) => { let ua_stylesheet = Stylesheet::from_bytes( &res, - Url::parse(&format!("chrome:///{:?}", filename)).unwrap(), + Url::parse(&format!("chrome://resources/{:?}", filename)).unwrap(), None, None, Origin::UserAgent, @@ -69,7 +69,7 @@ lazy_static! { Ok(res) => { Stylesheet::from_bytes( &res, - Url::parse("chrome:///quirks-mode.css").unwrap(), + Url::parse("chrome://resources/quirks-mode.css").unwrap(), None, None, Origin::UserAgent, diff --git a/components/style/values.rs b/components/style/values.rs index 79239788704..23c933bc394 100644 --- a/components/style/values.rs +++ b/components/style/values.rs @@ -1051,6 +1051,50 @@ pub mod specified { } #[derive(Clone, PartialEq, Copy, Debug, HeapSizeOf)] + pub enum LengthOrPercentageOrAutoOrContent { + Length(Length), + Percentage(Percentage), + Calc(CalcLengthOrPercentage), + Auto, + Content + } + + impl ToCss for LengthOrPercentageOrAutoOrContent { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match *self { + LengthOrPercentageOrAutoOrContent::Length(len) => len.to_css(dest), + LengthOrPercentageOrAutoOrContent::Percentage(perc) => perc.to_css(dest), + LengthOrPercentageOrAutoOrContent::Auto => dest.write_str("auto"), + LengthOrPercentageOrAutoOrContent::Content => dest.write_str("content"), + LengthOrPercentageOrAutoOrContent::Calc(calc) => calc.to_css(dest), + } + } + } + + impl LengthOrPercentageOrAutoOrContent { + pub fn parse(input: &mut Parser) -> Result<LengthOrPercentageOrAutoOrContent, ()> { + let context = AllowedNumericType::NonNegative; + match try!(input.next()) { + Token::Dimension(ref value, ref unit) if context.is_ok(value.value) => + Length::parse_dimension(value.value, unit).map(LengthOrPercentageOrAutoOrContent::Length), + Token::Percentage(ref value) if context.is_ok(value.unit_value) => + Ok(LengthOrPercentageOrAutoOrContent::Percentage(Percentage(value.unit_value))), + Token::Number(ref value) if value.value == 0. => + Ok(LengthOrPercentageOrAutoOrContent::Length(Length::Absolute(Au(0)))), + Token::Ident(ref value) if value.eq_ignore_ascii_case("auto") => + Ok(LengthOrPercentageOrAutoOrContent::Auto), + Token::Ident(ref value) if value.eq_ignore_ascii_case("content") => + Ok(LengthOrPercentageOrAutoOrContent::Content), + Token::Function(ref name) if name.eq_ignore_ascii_case("calc") => { + let calc = try!(input.parse_nested_block(CalcLengthOrPercentage::parse_length_or_percentage)); + Ok(LengthOrPercentageOrAutoOrContent::Calc(calc)) + }, + _ => Err(()) + } + } + } + + #[derive(Clone, PartialEq, Copy, Debug, HeapSizeOf)] pub struct BorderRadiusSize(pub Size2D<LengthOrPercentage>); impl BorderRadiusSize { @@ -1772,6 +1816,64 @@ pub mod computed { } #[derive(PartialEq, Clone, Copy, HeapSizeOf)] + pub enum LengthOrPercentageOrAutoOrContent { + Length(Au), + Percentage(CSSFloat), + Calc(CalcLengthOrPercentage), + Auto, + Content + } + impl fmt::Debug for LengthOrPercentageOrAutoOrContent { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match *self { + LengthOrPercentageOrAutoOrContent::Length(length) => write!(f, "{:?}", length), + LengthOrPercentageOrAutoOrContent::Percentage(percentage) => write!(f, "{}%", percentage * 100.), + LengthOrPercentageOrAutoOrContent::Calc(calc) => write!(f, "{:?}", calc), + LengthOrPercentageOrAutoOrContent::Auto => write!(f, "auto"), + LengthOrPercentageOrAutoOrContent::Content => write!(f, "content") + } + } + } + + impl ToComputedValue for specified::LengthOrPercentageOrAutoOrContent { + type ComputedValue = LengthOrPercentageOrAutoOrContent; + + #[inline] + fn to_computed_value<Cx: TContext>(&self, context: &Cx) -> LengthOrPercentageOrAutoOrContent { + match *self { + specified::LengthOrPercentageOrAutoOrContent::Length(value) => { + LengthOrPercentageOrAutoOrContent::Length(value.to_computed_value(context)) + }, + specified::LengthOrPercentageOrAutoOrContent::Percentage(value) => { + LengthOrPercentageOrAutoOrContent::Percentage(value.0) + }, + specified::LengthOrPercentageOrAutoOrContent::Calc(calc) => { + LengthOrPercentageOrAutoOrContent::Calc(calc.to_computed_value(context)) + }, + specified::LengthOrPercentageOrAutoOrContent::Auto => { + LengthOrPercentageOrAutoOrContent::Auto + }, + specified::LengthOrPercentageOrAutoOrContent::Content => { + LengthOrPercentageOrAutoOrContent::Content + } + } + } + } + + impl ::cssparser::ToCss for LengthOrPercentageOrAutoOrContent { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + match *self { + LengthOrPercentageOrAutoOrContent::Length(length) => length.to_css(dest), + LengthOrPercentageOrAutoOrContent::Percentage(percentage) + => write!(dest, "{}%", percentage * 100.), + LengthOrPercentageOrAutoOrContent::Calc(calc) => calc.to_css(dest), + LengthOrPercentageOrAutoOrContent::Auto => dest.write_str("auto"), + LengthOrPercentageOrAutoOrContent::Content => dest.write_str("content") + } + } + } + + #[derive(PartialEq, Clone, Copy, HeapSizeOf)] pub enum LengthOrPercentageOrNone { Length(Au), Percentage(CSSFloat), diff --git a/components/style/viewport.rs b/components/style/viewport.rs index 2b5d9ea3175..2f8377102c9 100644 --- a/components/style/viewport.rs +++ b/components/style/viewport.rs @@ -512,7 +512,7 @@ impl MaybeNew for ViewportConstraints { rule: &ViewportRule) -> Option<ViewportConstraints> { - use num::{Float, ToPrimitive}; + use num_traits::{Float, ToPrimitive}; use std::cmp; if rule.declarations.is_empty() { diff --git a/components/style_traits/Cargo.toml b/components/style_traits/Cargo.toml index 366799438f4..a9db8f5c6a3 100644 --- a/components/style_traits/Cargo.toml +++ b/components/style_traits/Cargo.toml @@ -21,9 +21,8 @@ heapsize = "0.3.0" heapsize_plugin = "0.1.2" lazy_static = "0.1.10" log = "0.3.5" -num = "0.1.24" rustc-serialize = "0.3" selectors = {version = "0.5", features = ["heap_size"]} serde = "0.7" serde_macros = "0.7" -url = {version = "0.5.7", features = ["heap_size"]} +url = {version = "1.0.0", features = ["heap_size"]} diff --git a/components/util/Cargo.toml b/components/util/Cargo.toml index 7a4bdf9379c..ac7bc43b1dd 100644 --- a/components/util/Cargo.toml +++ b/components/util/Cargo.toml @@ -45,7 +45,7 @@ serde = "0.7" serde_macros = "0.7" smallvec = "0.1" string_cache = {version = "0.2.12", features = ["heap_size"]} -url = {version = "0.5.7", features = ["heap_size", "serde_serialization"]} +url = {version = "1.0.0", features = ["heap_size", "serde"]} [target.x86_64-pc-windows-gnu.dependencies] kernel32-sys = "0.2" diff --git a/components/util/lib.rs b/components/util/lib.rs index 5eb530f1b19..b4998b0580c 100644 --- a/components/util/lib.rs +++ b/components/util/lib.rs @@ -18,6 +18,7 @@ #![deny(unsafe_code)] extern crate app_units; +#[allow(unused_extern_crates)] #[macro_use] extern crate bitflags; extern crate deque; @@ -27,6 +28,7 @@ extern crate heapsize; extern crate ipc_channel; #[cfg(feature = "non-geckolib")] extern crate js; +#[allow(unused_extern_crates)] #[macro_use] extern crate lazy_static; extern crate libc; diff --git a/components/util/panicking.rs b/components/util/panicking.rs index eecfd74b97f..95abf897e19 100644 --- a/components/util/panicking.rs +++ b/components/util/panicking.rs @@ -17,11 +17,16 @@ static HOOK_SET: Once = ONCE_INIT; /// TLS data pertaining to how failures should be reported pub struct PanicHandlerLocal { /// failure handler passed through spawn_named_with_send_on_failure - pub fail: Box<(FnBox(&(Any + Send))) + Send + 'static> + pub fail: Box<FnBox(&Any)> } thread_local!(pub static LOCAL_INFO: RefCell<Option<PanicHandlerLocal>> = RefCell::new(None)); +/// Set the thread-local panic hook +pub fn set_thread_local_hook(local: Box<FnBox(&Any)>) { + LOCAL_INFO.with(|i| *i.borrow_mut() = Some(PanicHandlerLocal { fail: local })); +} + /// Initiates the custom panic hook /// Should be called in main() after arguments have been parsed pub fn initiate_panic_hook() { diff --git a/components/util/resource_files.rs b/components/util/resource_files.rs index 06e8a428361..58d6a17441c 100644 --- a/components/util/resource_files.rs +++ b/components/util/resource_files.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/. */ +#[cfg(not(target_os = "android"))] use std::env; use std::fs::File; use std::io::{self, Read}; diff --git a/components/util/str.rs b/components/util/str.rs index e7aa933cecf..b0a3d6c2c9e 100644 --- a/components/util/str.rs +++ b/components/util/str.rs @@ -124,19 +124,6 @@ impl Extend<char> for DOMString { pub type StaticCharVec = &'static [char]; pub type StaticStringVec = &'static [&'static str]; -/// Whitespace as defined by HTML5 § 2.4.1. -// TODO(SimonSapin) Maybe a custom Pattern can be more efficient? -pub const WHITESPACE: &'static [char] = &[' ', '\t', '\x0a', '\x0c', '\x0d']; - -pub fn is_whitespace(s: &str) -> bool { - s.chars().all(char_is_whitespace) -} - -#[inline] -pub fn char_is_whitespace(c: char) -> bool { - WHITESPACE.contains(&c) -} - /// A "space character" according to: /// /// https://html.spec.whatwg.org/multipage/#space-character @@ -148,6 +135,15 @@ pub static HTML_SPACE_CHARACTERS: StaticCharVec = &[ '\u{000d}', ]; +#[inline] +pub fn char_is_whitespace(c: char) -> bool { + HTML_SPACE_CHARACTERS.contains(&c) +} + +pub fn is_whitespace(s: &str) -> bool { + s.chars().all(char_is_whitespace) +} + pub fn split_html_space_chars<'a>(s: &'a str) -> Filter<Split<'a, StaticCharVec>, fn(&&str) -> bool> { fn not_empty(&split: &&str) -> bool { !split.is_empty() } diff --git a/components/util/thread.rs b/components/util/thread.rs index 85a7c52adf8..f6bb72e20a3 100644 --- a/components/util/thread.rs +++ b/components/util/thread.rs @@ -6,97 +6,33 @@ use ipc_channel::ipc::IpcSender; use panicking; use serde::Serialize; use std::any::Any; -use std::borrow::ToOwned; -use std::sync::mpsc::Sender; use std::thread; use thread_state; -pub type PanicReason = Option<String>; - pub fn spawn_named<F>(name: String, f: F) where F: FnOnce() + Send + 'static { - spawn_named_with_send_on_failure_maybe(name, None, f, |_| {}); -} - -pub trait AddFailureDetails { - fn add_panic_message(&mut self, message: String); - fn add_panic_object(&mut self, object: &Any) { - if let Some(message) = object.downcast_ref::<String>() { - self.add_panic_message(message.to_owned()); - } else if let Some(&message) = object.downcast_ref::<&'static str>() { - self.add_panic_message(message.to_owned()); - } - } -} - -/// An abstraction over `Sender<T>` and `IpcSender<T>`, for use in -/// `spawn_named_with_send_on_failure`. -pub trait SendOnFailure { - type Value; - fn send_on_failure(&mut self, value: Self::Value); -} - -impl<T> SendOnFailure for Sender<T> where T: Send + 'static { - type Value = T; - fn send_on_failure(&mut self, value: T) { - // Discard any errors to avoid double-panic - let _ = self.send(value); - } -} - -impl<T> SendOnFailure for IpcSender<T> where T: Send + Serialize + 'static { - type Value = T; - fn send_on_failure(&mut self, value: T) { - // Discard any errors to avoid double-panic - let _ = self.send(value); - } + thread::Builder::new().name(name).spawn(f).expect("Thread spawn failed"); } /// Arrange to send a particular message to a channel if the thread fails. -pub fn spawn_named_with_send_on_failure<F, T, S>(name: String, - state: thread_state::ThreadState, - f: F, - mut msg: T, - mut dest: S) +pub fn spawn_named_with_send_on_panic<F, Id>(name: String, + state: thread_state::ThreadState, + f: F, + id: Id, + panic_chan: IpcSender<(Id, String)>) where F: FnOnce() + Send + 'static, - T: Send + AddFailureDetails + 'static, - S: Send + SendOnFailure + 'static, - S::Value: From<T>, + Id: Copy + Send + Serialize + 'static, { - spawn_named_with_send_on_failure_maybe(name, Some(state), f, - move |err| { - msg.add_panic_object(err); - dest.send_on_failure(S::Value::from(msg)); - }); -} - -fn spawn_named_with_send_on_failure_maybe<F, G>(name: String, - state: Option<thread_state::ThreadState>, - f: F, - fail: G) - where F: FnOnce() + Send + 'static, - G: FnOnce(&(Any + Send)) + Send + 'static { - - - let builder = thread::Builder::new().name(name.clone()); - - let local = panicking::PanicHandlerLocal { - fail: Box::new(fail), - }; - - let f_with_state = move || { - if let Some(state) = state { - thread_state::initialize(state); - } - - // set the handler - panicking::LOCAL_INFO.with(|i| { - *i.borrow_mut() = Some(local); - }); - f(); - }; - - - builder.spawn(f_with_state).unwrap(); + thread::Builder::new().name(name).spawn(move || { + thread_state::initialize(state); + panicking::set_thread_local_hook(Box::new(move |payload: &Any| { + debug!("Thread failed, notifying constellation"); + let reason = payload.downcast_ref::<String>().map(|s| String::from(&**s)) + .or(payload.downcast_ref::<&'static str>().map(|s| String::from(*s))) + .unwrap_or_else(|| String::from("<unknown reason>")); + let _ = panic_chan.send((id, reason)); + })); + f() + }).expect("Thread spawn failed"); } diff --git a/components/webdriver_server/Cargo.toml b/components/webdriver_server/Cargo.toml index 02b90a58fe3..c878a73da9a 100644 --- a/components/webdriver_server/Cargo.toml +++ b/components/webdriver_server/Cargo.toml @@ -26,9 +26,9 @@ git = "https://github.com/servo/ipc-channel" [dependencies] image = "0.9" log = "0.3.5" -hyper = "0.8" +hyper = "0.9" rustc-serialize = "0.3.4" regex = "0.1.55" -url = {version = "0.5.7", features = ["heap_size"]} +url = {version = "1.0.0", features = ["heap_size"]} uuid = { version = "0.2", features = ["v4"] } -webdriver = "0.8" +webdriver = "0.9" diff --git a/components/webdriver_server/lib.rs b/components/webdriver_server/lib.rs index 03ea0291caf..659922f452a 100644 --- a/components/webdriver_server/lib.rs +++ b/components/webdriver_server/lib.rs @@ -14,8 +14,6 @@ extern crate compositing; extern crate hyper; extern crate image; extern crate ipc_channel; -#[macro_use] -extern crate log; extern crate msg; extern crate regex; extern crate rustc_serialize; @@ -324,7 +322,7 @@ impl Handler { let (sender, receiver) = ipc::channel().unwrap(); - let load_data = LoadData::new(url); + let load_data = LoadData::new(url, None, None); let cmd_msg = WebDriverCommandMsg::LoadUrl(pipeline_id, load_data, sender.clone()); self.constellation_chan.send(ConstellationMsg::WebDriverCommand(cmd_msg)).unwrap(); @@ -355,7 +353,7 @@ impl Handler { let url = receiver.recv().unwrap(); - Ok(WebDriverResponse::Generic(ValueResponse::new(url.serialize().to_json()))) + Ok(WebDriverResponse::Generic(ValueResponse::new(url.as_str().to_json()))) } fn handle_window_size(&self) -> WebDriverResult<WebDriverResponse> { diff --git a/etc/ci/check_dynamic_symbols.py b/etc/ci/check_dynamic_symbols.py index 4f83a8b98aa..50b5052a542 100644 --- a/etc/ci/check_dynamic_symbols.py +++ b/etc/ci/check_dynamic_symbols.py @@ -7,6 +7,8 @@ # option. This file may not be copied, modified, or distributed # except according to those terms. +from __future__ import absolute_import, print_function + import sys import re import subprocess @@ -29,6 +31,6 @@ for line in objdump_output: difference = actual_symbols - allowed_symbols if len(difference) > 0: - human_readable_difference = ", ".join(str(s) for s in difference) - print("Unexpected dynamic symbols in binary: {0}".format(human_readable_difference)) + human_readable_difference = "\n".join(str(s) for s in difference) + print("Unexpected dynamic symbols in binary:\n{0}".format(human_readable_difference)) sys.exit(-1) diff --git a/etc/ci/upload_docs.sh b/etc/ci/upload_docs.sh index 2aea0fcea00..aac1374ceda 100755 --- a/etc/ci/upload_docs.sh +++ b/etc/ci/upload_docs.sh @@ -12,7 +12,7 @@ cd "$(dirname $0)/../.." # etc/doc.servo.org/index.html overwrites $(mach rust-root)/doc/index.html cp etc/doc.servo.org/* target/doc/ -python components/style/list_properties.py +python components/style/properties/build.py servo html ghp-import -n target/doc git push -qf https://${TOKEN}@github.com/servo/doc.servo.org.git gh-pages diff --git a/ports/cef/Cargo.lock b/ports/cef/Cargo.lock index 8b389d75a05..d310b1f1a7b 100644 --- a/ports/cef/Cargo.lock +++ b/ports/cef/Cargo.lock @@ -10,7 +10,7 @@ dependencies = [ "core-graphics 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "core-text 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "devtools 0.0.1", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gfx 0.0.1", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "glutin_app 0.0.1", @@ -27,7 +27,7 @@ dependencies = [ "servo 0.0.1", "style 0.0.1", "style_traits 0.0.1", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", "x11 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -58,10 +58,10 @@ name = "app_units" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -88,7 +88,7 @@ dependencies = [ "core-foundation 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "core-graphics 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "core-text 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "freetype 0.1.0 (git+https://github.com/servo/rust-freetype)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -107,8 +107,8 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -148,13 +148,12 @@ version = "0.0.1" dependencies = [ "azure 0.4.3 (git+https://github.com/servo/rust-azure)", "canvas_traits 0.0.1", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gfx_traits 0.0.1", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", - "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "offscreen_gl_context 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", "util 0.0.1", @@ -167,16 +166,14 @@ version = "0.0.1" dependencies = [ "azure 0.4.3 (git+https://github.com/servo/rust-azure)", "cssparser 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gfx_traits 0.0.1", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", - "offscreen_gl_context 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "util 0.0.1", "webrender_traits 0.1.0 (git+https://github.com/servo/webrender_traits)", ] @@ -258,10 +255,8 @@ dependencies = [ "canvas 0.0.1", "canvas_traits 0.0.1", "clipboard 0.1.2 (git+https://github.com/aweinstock314/rust-clipboard)", - "core-graphics 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "core-text 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "devtools_traits 0.0.1", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gaol 0.0.1 (git+https://github.com/servo/gaol)", "gfx 0.0.1", "gfx_traits 0.0.1", @@ -273,7 +268,7 @@ dependencies = [ "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "net_traits 0.0.1", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "offscreen_gl_context 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", "profile_traits 0.0.1", @@ -283,7 +278,7 @@ dependencies = [ "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "style_traits 0.0.1", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", "webrender 0.1.0 (git+https://github.com/servo/webrender)", "webrender_traits 0.1.0 (git+https://github.com/servo/webrender_traits)", @@ -291,13 +286,13 @@ dependencies = [ [[package]] name = "cookie" -version = "0.2.2" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "openssl 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -376,9 +371,8 @@ name = "devtools" version = "0.0.1" dependencies = [ "devtools_traits 0.0.1", - "hyper 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "plugins 0.0.1", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -395,15 +389,14 @@ dependencies = [ "bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "msg 0.0.1", "plugins 0.0.1", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", - "util 0.0.1", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -493,7 +486,7 @@ name = "enum_primitive" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -507,14 +500,14 @@ dependencies = [ [[package]] name = "euclid" -version = "0.6.5" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -607,7 +600,7 @@ dependencies = [ "core-foundation 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "core-graphics 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "core-text 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "freetype 0.1.0 (git+https://github.com/servo/rust-freetype)", "gfx_traits 0.0.1", @@ -626,7 +619,7 @@ dependencies = [ "profile_traits 0.0.1", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "range 0.0.1", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "servo-fontconfig 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -638,7 +631,7 @@ dependencies = [ "style_traits 0.0.1", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-script 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", "webrender_traits 0.1.0 (git+https://github.com/servo/webrender_traits)", ] @@ -648,7 +641,7 @@ name = "gfx_traits" version = "0.0.1" dependencies = [ "azure 0.4.3 (git+https://github.com/servo/rust-azure)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "layers 0.2.4 (git+https://github.com/servo/rust-layers)", @@ -656,7 +649,6 @@ dependencies = [ "plugins 0.0.1", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "util 0.0.1", ] [[package]] @@ -696,9 +688,8 @@ name = "glutin_app" version = "0.0.1" dependencies = [ "bitflags 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "cgl 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "compositing 0.0.1", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "msg 0.0.1", @@ -707,7 +698,7 @@ dependencies = [ "servo-egl 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "servo-glutin 0.4.15 (registry+https://github.com/rust-lang/crates.io-index)", "style_traits 0.0.1", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", "x11 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -799,7 +790,7 @@ dependencies = [ "mac 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "phf 0.7.13 (registry+https://github.com/rust-lang/crates.io-index)", "phf_codegen 0.7.13 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", "tendril 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", @@ -812,24 +803,34 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "hyper" -version = "0.8.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cookie 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "cookie 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "httparse 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "language-tags 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "mime 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "openssl 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "solicit 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", "traitobject 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "unicase 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "idna" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-bidi 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-normalization 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -842,7 +843,7 @@ dependencies = [ "gif 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "glob 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "jpeg-decoder 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "png 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -853,7 +854,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "arrayvec 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -868,7 +869,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cgl 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "core-foundation 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "leaky-cow 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -895,22 +896,22 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "rayon 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "js" version = "0.1.2" -source = "git+https://github.com/servo/rust-mozjs#6f1eb4ea7a84714bfab2806440c9fc8a9a261409" +source = "git+https://github.com/servo/rust-mozjs#efe805affa75d776316e9ea6113f85cdad1e82ed" dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "mozjs_sys 0.0.0 (git+https://github.com/servo/mozjs)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -940,7 +941,7 @@ dependencies = [ "azure 0.4.3 (git+https://github.com/servo/rust-azure)", "cgl 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "core-foundation 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "glx 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -948,7 +949,7 @@ dependencies = [ "io-surface 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "servo-egl 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "servo-skia 0.20130412.6 (registry+https://github.com/rust-lang/crates.io-index)", "x11 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -963,7 +964,7 @@ dependencies = [ "bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "canvas_traits 0.0.1", "cssparser 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "gfx 0.0.1", "gfx_traits 0.0.1", @@ -978,11 +979,10 @@ dependencies = [ "plugins 0.0.1", "profile_traits 0.0.1", "range 0.0.1", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "script 0.0.1", "script_traits 0.0.1", "selectors 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -992,7 +992,7 @@ dependencies = [ "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-bidi 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-script 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", "webrender_traits 0.1.0 (git+https://github.com/servo/webrender_traits)", ] @@ -1009,7 +1009,7 @@ dependencies = [ "script_traits 0.0.1", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", "webrender_traits 0.1.0 (git+https://github.com/servo/webrender_traits)", ] @@ -1163,17 +1163,17 @@ version = "0.0.1" dependencies = [ "bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "cssparser 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "plugins 0.0.1", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", "webrender_traits 0.1.0 (git+https://github.com/servo/webrender_traits)", ] @@ -1183,29 +1183,30 @@ name = "net" version = "0.0.1" dependencies = [ "brotli 0.3.20 (git+https://github.com/ende76/brotli-rs)", - "cookie 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "cookie 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "devtools_traits 0.0.1", "flate2 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "immeta 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "mime 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "mime_guess 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "net_traits 0.0.1", "openssl 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "threadpool 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", "tinyfiledialogs 0.1.0 (git+https://github.com/jdm/tinyfiledialogs)", "unicase 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", "uuid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "webrender_traits 0.1.0 (git+https://github.com/servo/webrender_traits)", - "websocket 0.16.2 (registry+https://github.com/rust-lang/crates.io-index)", + "websocket 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1226,7 +1227,7 @@ version = "0.0.1" dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "image 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1235,9 +1236,9 @@ dependencies = [ "plugins 0.0.1", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", - "websocket 0.16.2 (registry+https://github.com/rust-lang/crates.io-index)", + "websocket 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1250,14 +1251,71 @@ dependencies = [ [[package]] name = "num" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ + "num-bigint 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-complex 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-iter 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-rational 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-bigint" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-integer 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-complex" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-integer" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-iter" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-integer 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-rational" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-bigint 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] +name = "num-traits" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] name = "num_cpus" version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1305,7 +1363,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cgl 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "core-foundation 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gl_generator 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "khronos_api 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1428,7 +1486,7 @@ dependencies = [ "flate2 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "inflate 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1484,7 +1542,7 @@ name = "quickersort" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "unreachable 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1502,8 +1560,8 @@ version = "0.0.1" dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1546,7 +1604,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "rustc-serialize" -version = "0.3.16" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1578,13 +1636,13 @@ dependencies = [ "cssparser 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "devtools_traits 0.0.1", "encoding 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "gfx_traits 0.0.1", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "html5ever 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "image 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "js 0.1.2 (git+https://github.com/servo/rust-mozjs)", @@ -1592,7 +1650,7 @@ dependencies = [ "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "net_traits 0.0.1", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "offscreen_gl_context 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "phf 0.7.13 (registry+https://github.com/rust-lang/crates.io-index)", "phf_macros 0.7.13 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1603,7 +1661,7 @@ dependencies = [ "ref_filter_map 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "ref_slice 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "regex 0.1.55 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "script_traits 0.0.1", "selectors 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1612,11 +1670,11 @@ dependencies = [ "style 0.0.1", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", "unicase 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", "uuid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "webrender_traits 0.1.0 (git+https://github.com/servo/webrender_traits)", - "websocket 0.16.2 (registry+https://github.com/rust-lang/crates.io-index)", + "websocket 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", "xml5ever 0.1.1 (git+https://github.com/Ygg01/xml5ever)", ] @@ -1627,7 +1685,7 @@ dependencies = [ "app_units 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "canvas_traits 0.0.1", "devtools_traits 0.0.1", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gfx_traits 0.0.1", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1642,7 +1700,7 @@ dependencies = [ "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "style_traits 0.0.1", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", ] @@ -1687,7 +1745,7 @@ name = "serde_json" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1711,7 +1769,7 @@ dependencies = [ "devtools 0.0.1", "devtools_traits 0.0.1", "env_logger 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gaol 0.0.1 (git+https://github.com/servo/gaol)", "gfx 0.0.1", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1724,13 +1782,12 @@ dependencies = [ "msg 0.0.1", "net 0.0.1", "net_traits 0.0.1", - "offscreen_gl_context 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "profile 0.0.1", "profile_traits 0.0.1", "script 0.0.1", "script_traits 0.0.1", "style 0.0.1", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", "webdriver_server 0.0.1", "webrender 0.1.0 (git+https://github.com/servo/webrender)", @@ -1806,7 +1863,7 @@ version = "0.20130412.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cgl 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "expat-sys 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "glx 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1878,16 +1935,16 @@ dependencies = [ "bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "cssparser 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "encoding 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "selectors 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1895,7 +1952,7 @@ dependencies = [ "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", "style_traits 0.0.1", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", ] @@ -1904,18 +1961,17 @@ name = "style_traits" version = "0.0.1" dependencies = [ "cssparser 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "selectors 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", ] @@ -1974,6 +2030,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2034,18 +2091,16 @@ dependencies = [ [[package]] name = "url" -version = "0.5.9" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "encoding 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "idna 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-bidi 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-normalization 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "uuid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2077,7 +2132,7 @@ dependencies = [ "app_units 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "deque 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "getopts 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2090,12 +2145,12 @@ dependencies = [ "num_cpus 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2164,13 +2219,13 @@ dependencies = [ [[package]] name = "webdriver" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "hyper 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "regex 0.1.55 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2178,37 +2233,37 @@ name = "webdriver_server" version = "0.0.1" dependencies = [ "compositing 0.0.1", - "hyper 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "image 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "plugins 0.0.1", "regex 0.1.55 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", "uuid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "webdriver 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "webdriver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "webrender" version = "0.1.0" -source = "git+https://github.com/servo/webrender#46dd3f0ffe2e3a650171fd651b522ed072ccf799" +source = "git+https://github.com/servo/webrender#8d778dac5398cadd093136bc9cf0afbbb61a2b52" dependencies = [ "app_units 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "core-graphics 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "core-text 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "freetype 0.1.0 (git+https://github.com/servo/rust-freetype)", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "offscreen_gl_context 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "scoped_threadpool 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2218,12 +2273,12 @@ dependencies = [ [[package]] name = "webrender_traits" version = "0.1.0" -source = "git+https://github.com/servo/webrender_traits#69125172bcea93fd79be48d846eae63d50ddc8ea" +source = "git+https://github.com/servo/webrender_traits#d1a3bb53f87891bbba8576d05260caee147dc5d8" dependencies = [ "app_units 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "core-graphics 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "offscreen_gl_context 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2233,18 +2288,18 @@ dependencies = [ [[package]] name = "websocket" -version = "0.16.2" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "net2 0.2.19 (registry+https://github.com/rust-lang/crates.io-index)", "openssl 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "unicase 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2303,13 +2358,13 @@ dependencies = [ [[package]] name = "xml5ever" version = "0.1.1" -source = "git+https://github.com/Ygg01/xml5ever#4900bbadef28c940a0cd73dc735d53709a2845c7" +source = "git+https://github.com/Ygg01/xml5ever#a51a6df18f384ecfb0a99b288c267178cf68f7f7" dependencies = [ "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "mac 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "phf 0.7.13 (registry+https://github.com/rust-lang/crates.io-index)", "phf_codegen 0.7.13 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", "tendril 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/ports/cef/Cargo.toml b/ports/cef/Cargo.toml index 130937a6507..8bce01014f6 100644 --- a/ports/cef/Cargo.toml +++ b/ports/cef/Cargo.toml @@ -19,7 +19,7 @@ codegen-units = 4 euclid = {version = "0.6.4", features = ["plugins"]} gleam = "0.2.8" libc = "0.2" -url = {version = "0.5.7", features = ["heap_size"]} +url = {version = "1.0.0", features = ["heap_size"]} [dependencies.servo] path = "../../components/servo" diff --git a/ports/geckolib/Cargo.lock b/ports/geckolib/Cargo.lock index 679dd09f4c5..2d0d34535e5 100644 --- a/ports/geckolib/Cargo.lock +++ b/ports/geckolib/Cargo.lock @@ -5,7 +5,7 @@ dependencies = [ "app_units 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "bitflags 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "cssparser 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", @@ -17,7 +17,7 @@ dependencies = [ "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", "style 0.0.1", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", ] @@ -26,10 +26,10 @@ name = "app_units" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -45,8 +45,8 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -153,14 +153,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "euclid" -version = "0.6.5" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -189,6 +189,16 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] +name = "idna" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-bidi 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-normalization 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] name = "ipc-channel" version = "0.2.2" source = "git+https://github.com/servo/ipc-channel#e43fb22c431740a9bc54ce96caebd0e67d1a0586" @@ -237,14 +247,71 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "num" -version = "0.1.31" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-bigint 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-complex 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-iter 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-rational 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-bigint" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ + "num-integer 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-complex" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-integer" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-iter" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-integer 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-rational" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-bigint 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] +name = "num-traits" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] name = "num_cpus" version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -301,7 +368,7 @@ name = "quickersort" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "unreachable 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -315,7 +382,7 @@ dependencies = [ [[package]] name = "rustc-serialize" -version = "0.3.16" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -384,16 +451,16 @@ dependencies = [ "bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "cssparser 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "encoding 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "selectors 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -401,7 +468,7 @@ dependencies = [ "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", "style_traits 0.0.1", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", ] @@ -410,18 +477,17 @@ name = "style_traits" version = "0.0.1" dependencies = [ "cssparser 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "selectors 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", ] @@ -463,18 +529,15 @@ dependencies = [ [[package]] name = "url" -version = "0.5.9" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "encoding 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "idna 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-bidi 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-normalization 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "uuid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -484,7 +547,7 @@ dependencies = [ "app_units 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "deque 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "getopts 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -496,12 +559,12 @@ dependencies = [ "num_cpus 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] diff --git a/ports/geckolib/Cargo.toml b/ports/geckolib/Cargo.toml index c9cb2f467ac..a545718c557 100644 --- a/ports/geckolib/Cargo.toml +++ b/ports/geckolib/Cargo.toml @@ -23,7 +23,7 @@ num_cpus = "0.2.2" selectors = {version = "0.5", features = ["heap_size", "unstable"]} smallvec = "0.1" string_cache = {version = "0.2.12", features = ["heap_size", "unstable"]} -url = {version = "0.5.7", features = ["heap_size", "query_encoding", "serde_serialization"]} +url = {version = "1.0.0", features = ["heap_size", "query_encoding", "serde"]} [dependencies.log] version = "0.3.5" diff --git a/ports/geckolib/build.rs b/ports/geckolib/build.rs index 0e19e988884..17da2b459e4 100644 --- a/ports/geckolib/build.rs +++ b/ports/geckolib/build.rs @@ -3,10 +3,8 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use std::env; -use std::fs::File; -use std::io::Write; use std::path::Path; -use std::process::{Command, Stdio, exit}; +use std::process::{Command, exit}; #[cfg(windows)] fn find_python() -> String { @@ -31,32 +29,25 @@ fn find_python() -> String { } fn main() { - let python = match env::var("PYTHON") { - Ok(python_path) => python_path, - Err(_) => find_python(), - }; + let python = env::var("PYTHON").ok().unwrap_or_else(find_python); // Mako refuses to load templates outside the scope of the current working directory, // so we need to run it from the top source directory. let geckolib_dir = Path::new(file!()).parent().unwrap(); let top_dir = geckolib_dir.join("..").join(".."); - let style_template = Path::new("components/style/properties.mako.rs"); - let geckolib_template = Path::new("ports/geckolib/properties.mako.rs"); - let mako = Path::new("components/style/Mako-0.9.1.zip"); - - let result = Command::new(python) - .current_dir(top_dir) - .env("PYTHONPATH", &mako) - .env("STYLE_TEMPLATE", &style_template) - .env("GECKOLIB_TEMPLATE", &geckolib_template) - .arg("ports/geckolib/generate_properties_rs.py") - .stderr(Stdio::inherit()) - .output() + let properties_dir = Path::new("components").join("style").join("properties"); + println!("cargo:rerun-if-changed={}", top_dir.join(&properties_dir).to_str().unwrap()); + println!("cargo:rerun-if-changed={}", geckolib_dir.join("properties.mako.rs").to_str().unwrap()); + + let status = Command::new(python) + .current_dir(&top_dir) + .arg(&properties_dir.join("build.py")) + .arg("gecko") + .arg("geckolib") + .status() .unwrap(); - if !result.status.success() { + if !status.success() { exit(1) } - let out = env::var("OUT_DIR").unwrap(); - File::create(&Path::new(&out).join("properties.rs")).unwrap().write_all(&result.stdout).unwrap(); } diff --git a/ports/geckolib/gecko_style_structs.rs b/ports/geckolib/gecko_style_structs.rs index cda95f7be86..039f1b1320a 100644 --- a/ports/geckolib/gecko_style_structs.rs +++ b/ports/geckolib/gecko_style_structs.rs @@ -1,6 +1,6 @@ /* automatically generated by rust-bindgen */ -#[derive(Copy, Clone, Debug)] +#[derive(Copy, Debug)] pub struct __BindgenUnionField<T>(::std::marker::PhantomData<T>); impl <T> __BindgenUnionField<T> { #[inline] @@ -14,6 +14,10 @@ impl <T> ::std::default::Default for __BindgenUnionField<T> { #[inline] fn default() -> Self { Self::new() } } +impl <T> ::std::clone::Clone for __BindgenUnionField<T> { + #[inline] + fn clone(&self) -> Self { Self::new() } +} pub const NS_ERROR_MODULE_XPCOM: ::std::os::raw::c_uint = 1; pub const NS_ERROR_MODULE_BASE: ::std::os::raw::c_uint = 2; pub const NS_ERROR_MODULE_GFX: ::std::os::raw::c_uint = 3; @@ -196,6 +200,7 @@ pub const NS_STYLE_IMAGELAYER_ATTACHMENT_LOCAL: ::std::os::raw::c_uint = 2; pub const NS_STYLE_IMAGELAYER_CLIP_BORDER: ::std::os::raw::c_uint = 0; pub const NS_STYLE_IMAGELAYER_CLIP_PADDING: ::std::os::raw::c_uint = 1; pub const NS_STYLE_IMAGELAYER_CLIP_CONTENT: ::std::os::raw::c_uint = 2; +pub const NS_STYLE_IMAGELAYER_CLIP_TEXT: ::std::os::raw::c_uint = 3; pub const NS_STYLE_IMAGELAYER_CLIP_MOZ_ALMOST_PADDING: ::std::os::raw::c_uint = 127; @@ -1343,7 +1348,7 @@ pub type nsASingleFragmentCString = nsCSubstring; * @see nsTAString */ #[repr(C)] -#[derive(Copy, Clone, Debug)] +#[derive(Debug, Copy, Clone)] pub struct nsReadingIterator<CharT> { pub mStart: *const CharT, pub mEnd: *const CharT, @@ -1353,7 +1358,7 @@ pub struct nsReadingIterator<CharT> { * @see nsTAString */ #[repr(C)] -#[derive(Copy, Clone, Debug)] +#[derive(Debug, Copy, Clone)] pub struct nsWritingIterator<CharT> { pub mStart: *mut CharT, pub mEnd: *mut CharT, @@ -1374,6 +1379,7 @@ impl ::std::clone::Clone for nsDefaultStringComparator { fn clone(&self) -> Self { *self } } #[repr(C)] +#[derive(Debug)] pub struct nsAString_internal { pub mData: *mut ::std::os::raw::c_ushort, pub mLength: ::std::os::raw::c_uint, @@ -1411,6 +1417,7 @@ impl ::std::clone::Clone for nsDefaultCStringComparator { fn clone(&self) -> Self { *self } } #[repr(C)] +#[derive(Debug)] pub struct nsACString_internal { pub mData: *mut ::std::os::raw::c_char, pub mLength: ::std::os::raw::c_uint, @@ -1482,6 +1489,7 @@ fn bindgen_test_layout_nsCSubstringTuple() { assert_eq!(::std::mem::align_of::<nsCSubstringTuple>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsString { pub _base: nsAString_internal, } @@ -1505,6 +1513,7 @@ fn bindgen_test_layout_nsString() { assert_eq!(::std::mem::align_of::<nsString>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsFixedString { pub _base: nsString, pub mFixedCapacity: ::std::os::raw::c_uint, @@ -1531,11 +1540,11 @@ fn bindgen_test_layout_nsAutoString() { pub enum Dont_Instantiate_nsTArray_of { } pub enum Instead_Use_nsTArray_of { } #[repr(C)] -#[derive(Copy, Clone, Debug)] pub struct nsTArrayElementTraits<> { pub _phantom0: ::std::marker::PhantomData<nsAutoString>, } #[repr(C)] +#[derive(Debug)] pub struct nsXPIDLString { pub _base: nsString, } @@ -1545,6 +1554,7 @@ fn bindgen_test_layout_nsXPIDLString() { assert_eq!(::std::mem::align_of::<nsXPIDLString>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsGetterCopies { pub mString: *mut nsAString_internal, pub mData: *mut ::std::os::raw::c_ushort, @@ -1555,6 +1565,7 @@ fn bindgen_test_layout_nsGetterCopies() { assert_eq!(::std::mem::align_of::<nsGetterCopies>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsAdoptingString { pub _base: nsXPIDLString, } @@ -1564,6 +1575,7 @@ fn bindgen_test_layout_nsAdoptingString() { assert_eq!(::std::mem::align_of::<nsAdoptingString>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsCString { pub _base: nsACString_internal, } @@ -1587,6 +1599,7 @@ fn bindgen_test_layout_nsCString() { assert_eq!(::std::mem::align_of::<nsCString>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsFixedCString { pub _base: nsCString, pub mFixedCapacity: ::std::os::raw::c_uint, @@ -1611,6 +1624,7 @@ fn bindgen_test_layout_nsAutoCString() { assert_eq!(::std::mem::align_of::<nsAutoCString>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsXPIDLCString { pub _base: nsCString, } @@ -1620,6 +1634,7 @@ fn bindgen_test_layout_nsXPIDLCString() { assert_eq!(::std::mem::align_of::<nsXPIDLCString>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsCGetterCopies { pub mString: *mut nsACString_internal, pub mData: *mut ::std::os::raw::c_char, @@ -1630,6 +1645,7 @@ fn bindgen_test_layout_nsCGetterCopies() { assert_eq!(::std::mem::align_of::<nsCGetterCopies>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsAdoptingCString { pub _base: nsXPIDLCString, } @@ -1782,6 +1798,7 @@ pub enum nsCSSScannerExclude { eCSSScannerExclude_WhitespaceAndComments = 2, } #[repr(C)] +#[derive(Debug)] pub struct nsCSSScanner { pub mBuffer: *const ::std::os::raw::c_ushort, pub mOffset: u32, @@ -1848,16 +1865,13 @@ fn bindgen_test_layout_nsCSSGridTemplateAreaScanner() { * A "unique identifier". This is modeled after OSF DCE UUIDs. */ #[repr(C)] -#[derive(Debug, Copy)] +#[derive(Debug)] pub struct nsID { pub m0: u32, pub m1: u16, pub m2: u16, pub m3: [u8; 8usize], } -impl ::std::clone::Clone for nsID { - fn clone(&self) -> Self { *self } -} #[test] fn bindgen_test_layout_nsID() { assert_eq!(::std::mem::size_of::<nsID>() , 16usize); @@ -1953,6 +1967,7 @@ fn bindgen_test_layout_nsAutoRefCnt() { assert_eq!(::std::mem::align_of::<nsAutoRefCnt>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct ThreadSafeAutoRefCnt { pub mValue: u64, } @@ -1990,29 +2005,30 @@ fn bindgen_test_layout_QITableEntry() { assert_eq!(::std::mem::align_of::<QITableEntry>() , 8usize); } #[repr(C)] -#[derive(Copy, Clone, Debug)] +#[derive(Debug, Copy, Clone)] pub struct RefPtrTraits<U> { pub _phantom0: ::std::marker::PhantomData<U>, } #[repr(C)] +#[derive(Debug)] pub struct RefPtr<T> { pub mRawPtr: *mut T, } #[repr(C)] -#[derive(Copy, Clone, Debug)] +#[derive(Debug)] pub struct RefPtr_Proxy<T, R, Args> { pub mRawPtr: *mut T, pub _phantom0: ::std::marker::PhantomData<R>, pub _phantom1: ::std::marker::PhantomData<Args>, } #[repr(C)] -#[derive(Copy, Clone, Debug)] +#[derive(Debug, Copy, Clone)] pub struct RefPtr_ConstRemovingRefPtrTraits<T, U> { pub _phantom0: ::std::marker::PhantomData<T>, pub _phantom1: ::std::marker::PhantomData<U>, } #[repr(C)] -#[derive(Copy, Clone, Debug)] +#[derive(Debug, Copy, Clone)] pub struct RefPtrGetterAddRefs<T> { pub mTargetSmartPtr: *mut RefPtr<T>, pub _phantom0: ::std::marker::PhantomData<T>, @@ -2117,6 +2133,7 @@ fn bindgen_test_layout_nsGetServiceByContractIDWithError() { * template<class T> class Foo<T*> : private Foo<void*> { ... }; */ #[repr(C)] +#[derive(Debug)] pub struct nsCOMPtr_base { pub mRawPtr: *mut nsISupports, } @@ -2126,6 +2143,7 @@ fn bindgen_test_layout_nsCOMPtr_base() { assert_eq!(::std::mem::align_of::<nsCOMPtr_base>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsCOMPtr<T> { pub mRawPtr: *mut T, } @@ -2145,28 +2163,30 @@ pub struct nsCOMPtr<T> { * This type should be a nested class inside |nsCOMPtr<T>|. */ #[repr(C)] +#[derive(Debug)] pub struct nsGetterAddRefs<T> { pub mTargetSmartPtr: *mut nsCOMPtr<T>, pub _phantom0: ::std::marker::PhantomData<T>, } #[repr(C)] +#[derive(Debug)] pub struct nsAutoPtr<T> { pub mRawPtr: *mut T, } #[repr(C)] -#[derive(Copy, Clone, Debug)] +#[derive(Debug, Copy, Clone)] pub struct nsAutoPtr_Ptr<T> { pub mPtr: *mut T, } #[repr(C)] -#[derive(Copy, Clone, Debug)] +#[derive(Debug)] pub struct nsAutoPtr_Proxy<T, R, Args> { pub mRawPtr: *mut T, pub _phantom0: ::std::marker::PhantomData<R>, pub _phantom1: ::std::marker::PhantomData<Args>, } #[repr(C)] -#[derive(Copy, Clone, Debug)] +#[derive(Debug, Copy, Clone)] pub struct nsAutoPtrGetterTransfers<T> { pub mTargetSmartPtr: *mut nsAutoPtr<T>, pub _phantom0: ::std::marker::PhantomData<T>, @@ -2186,6 +2206,7 @@ fn bindgen_test_layout_PLDHashEntryHdr() { assert_eq!(::std::mem::align_of::<PLDHashEntryHdr>() , 4usize); } #[repr(C)] +#[derive(Debug)] pub struct Checker { pub mState: u32, pub mIsWritable: u32, @@ -2202,13 +2223,12 @@ pub struct PLDHashTable { pub mEntrySize: u32, pub mEntryCount: u32, pub mRemovedCount: u32, - pub mEntryStore: PLDHashTable_EntryStore, + pub mEntryStore: [u64; 2usize], pub mChecker: Checker, } #[repr(C)] pub struct PLDHashTable_EntryStore { - pub mEntryStore: *mut ::std::os::raw::c_char, - pub mGeneration: u32, + pub _bindgen_opaque_blob: [u64; 2usize], } #[test] fn bindgen_test_layout_PLDHashTable_EntryStore() { @@ -2216,6 +2236,7 @@ fn bindgen_test_layout_PLDHashTable_EntryStore() { assert_eq!(::std::mem::align_of::<PLDHashTable_EntryStore>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct PLDHashTable_Iterator { pub mTable: *mut PLDHashTable, pub mStart: *mut ::std::os::raw::c_char, @@ -2346,17 +2367,13 @@ pub struct nsTHashtable<EntryType> { pub _phantom0: ::std::marker::PhantomData<EntryType>, } #[repr(C)] +#[derive(Debug)] pub struct nsTHashtable_Iterator<EntryType> { pub _base: PLDHashTable_Iterator, pub _phantom0: ::std::marker::PhantomData<EntryType>, } #[repr(C)] pub struct nsDataHashtable; -#[test] -fn bindgen_test_layout_nsDataHashtable() { - assert_eq!(::std::mem::size_of::<nsDataHashtable>() , 0usize); - assert_eq!(::std::mem::align_of::<nsDataHashtable>() , 0usize); -} pub enum CSSVariableResolver { } #[repr(C)] pub struct CSSVariableValues { @@ -2364,6 +2381,7 @@ pub struct CSSVariableValues { pub mVariables: u64, } #[repr(C)] +#[derive(Debug)] pub struct CSSVariableValues_Variable { pub mVariableName: nsString, pub mValue: nsString, @@ -2396,6 +2414,337 @@ pub enum SheetType { Count = 10, Unknown = -1, } +pub enum _cairo_surface { } +pub type cairo_surface_t = _cairo_surface; +pub enum _cairo_user_data_key { } +pub type cairo_user_data_key_t = _cairo_user_data_key; +pub type thebes_destroy_func_t = + ::std::option::Option<unsafe extern "C" fn(data: + *mut ::std::os::raw::c_void)>; +/** + * Currently needs to be 'double' for Cairo compatibility. Could + * become 'float', perhaps, in some configurations. + */ +pub type gfxFloat = f64; +/** + * Priority of a line break opportunity. + * + * eNoBreak The line has no break opportunities + * eWordWrapBreak The line has a break opportunity only within a word. With + * word-wrap: break-word we will break at this point only if + * there are no other break opportunities in the line. + * eNormalBreak The line has a break opportunity determined by the standard + * line-breaking algorithm. + * + * Future expansion: split eNormalBreak into multiple priorities, e.g. + * punctuation break and whitespace break (bug 389710). + * As and when we implement it, text-wrap: unrestricted will + * mean that priorities are ignored and all line-break + * opportunities are equal. + * + * @see gfxTextRun::BreakAndMeasureText + * @see nsLineLayout::NotifyOptionalBreakPosition + */ +#[repr(i32)] +#[derive(Debug, Copy, Clone)] +pub enum gfxBreakPriority { + eNoBreak = 0, + eWordWrapBreak = 1, + eNormalBreak = 2, +} +#[repr(i32)] +#[derive(Debug, Copy, Clone)] +pub enum gfxSurfaceType { + Image = 0, + PDF = 1, + PS = 2, + Xlib = 3, + Xcb = 4, + Glitz = 5, + Quartz = 6, + Win32 = 7, + BeOS = 8, + DirectFB = 9, + SVG = 10, + OS2 = 11, + Win32Printing = 12, + QuartzImage = 13, + Script = 14, + QPainter = 15, + Recording = 16, + VG = 17, + GL = 18, + DRM = 19, + Tee = 20, + XML = 21, + Skia = 22, + Subsurface = 23, + Max = 24, +} +#[repr(i32)] +#[derive(Debug, Copy, Clone)] +pub enum gfxContentType { + COLOR = 4096, + ALPHA = 8192, + COLOR_ALPHA = 12288, + SENTINEL = 65535, +} +pub type Float = f32; +#[repr(i8)] +#[derive(Debug, Copy, Clone)] +pub enum SurfaceType { + DATA = 0, + D2D1_BITMAP = 1, + D2D1_DRAWTARGET = 2, + CAIRO = 3, + CAIRO_IMAGE = 4, + COREGRAPHICS_IMAGE = 5, + COREGRAPHICS_CGCONTEXT = 6, + SKIA = 7, + DUAL_DT = 8, + D2D1_1_IMAGE = 9, + RECORDING = 10, + TILED = 11, +} +pub const A8R8G8B8_UINT32: SurfaceFormat = SurfaceFormat::B8G8R8A8; +pub const X8R8G8B8_UINT32: SurfaceFormat = SurfaceFormat::B8G8R8X8; +#[repr(i8)] +#[derive(Debug, Copy, Clone)] +pub enum SurfaceFormat { + B8G8R8A8 = 0, + B8G8R8X8 = 1, + R8G8B8A8 = 2, + R8G8B8X8 = 3, + A8R8G8B8 = 4, + X8R8G8B8 = 5, + R5G6B5_UINT16 = 6, + A8 = 7, + YUV = 8, + NV12 = 9, + YUV422 = 10, + UNKNOWN = 11, +} +#[repr(i8)] +#[derive(Debug, Copy, Clone)] +pub enum FilterType { + BLEND = 0, + TRANSFORM = 1, + MORPHOLOGY = 2, + COLOR_MATRIX = 3, + FLOOD = 4, + TILE = 5, + TABLE_TRANSFER = 6, + DISCRETE_TRANSFER = 7, + LINEAR_TRANSFER = 8, + GAMMA_TRANSFER = 9, + CONVOLVE_MATRIX = 10, + DISPLACEMENT_MAP = 11, + TURBULENCE = 12, + ARITHMETIC_COMBINE = 13, + COMPOSITE = 14, + DIRECTIONAL_BLUR = 15, + GAUSSIAN_BLUR = 16, + POINT_DIFFUSE = 17, + POINT_SPECULAR = 18, + SPOT_DIFFUSE = 19, + SPOT_SPECULAR = 20, + DISTANT_DIFFUSE = 21, + DISTANT_SPECULAR = 22, + CROP = 23, + PREMULTIPLY = 24, + UNPREMULTIPLY = 25, +} +#[repr(i8)] +#[derive(Debug, Copy, Clone)] +pub enum DrawTargetType { + SOFTWARE_RASTER = 0, + HARDWARE_RASTER = 1, + VECTOR = 2, +} +#[repr(i8)] +#[derive(Debug, Copy, Clone)] +pub enum BackendType { + NONE = 0, + DIRECT2D = 1, + COREGRAPHICS = 2, + COREGRAPHICS_ACCELERATED = 3, + CAIRO = 4, + SKIA = 5, + RECORDING = 6, + DIRECT2D1_1 = 7, +} +#[repr(i8)] +#[derive(Debug, Copy, Clone)] +pub enum FontType { + DWRITE = 0, + GDI = 1, + MAC = 2, + SKIA = 3, + CAIRO = 4, + COREGRAPHICS = 5, +} +#[repr(i8)] +#[derive(Debug, Copy, Clone)] +pub enum NativeSurfaceType { + D3D10_TEXTURE = 0, + CAIRO_CONTEXT = 1, + CGCONTEXT = 2, + CGCONTEXT_ACCELERATED = 3, + OPENGL_TEXTURE = 4, +} +#[repr(i8)] +#[derive(Debug, Copy, Clone)] +pub enum NativeFontType { + DWRITE_FONT_FACE = 0, + GDI_FONT_FACE = 1, + MAC_FONT_FACE = 2, + SKIA_FONT_FACE = 3, + CAIRO_FONT_FACE = 4, +} +#[repr(i8)] +#[derive(Debug, Copy, Clone)] +pub enum FontStyle { NORMAL = 0, ITALIC = 1, BOLD = 2, BOLD_ITALIC = 3, } +#[repr(i8)] +#[derive(Debug, Copy, Clone)] +pub enum FontHinting { NONE = 0, LIGHT = 1, NORMAL = 2, FULL = 3, } +#[repr(i8)] +#[derive(Debug, Copy, Clone)] +pub enum CompositionOp { + OP_OVER = 0, + OP_ADD = 1, + OP_ATOP = 2, + OP_OUT = 3, + OP_IN = 4, + OP_SOURCE = 5, + OP_DEST_IN = 6, + OP_DEST_OUT = 7, + OP_DEST_OVER = 8, + OP_DEST_ATOP = 9, + OP_XOR = 10, + OP_MULTIPLY = 11, + OP_SCREEN = 12, + OP_OVERLAY = 13, + OP_DARKEN = 14, + OP_LIGHTEN = 15, + OP_COLOR_DODGE = 16, + OP_COLOR_BURN = 17, + OP_HARD_LIGHT = 18, + OP_SOFT_LIGHT = 19, + OP_DIFFERENCE = 20, + OP_EXCLUSION = 21, + OP_HUE = 22, + OP_SATURATION = 23, + OP_COLOR = 24, + OP_LUMINOSITY = 25, + OP_COUNT = 26, +} +#[repr(i8)] +#[derive(Debug, Copy, Clone)] +pub enum Axis { X_AXIS = 0, Y_AXIS = 1, BOTH = 2, } +#[repr(i8)] +#[derive(Debug, Copy, Clone)] +pub enum ExtendMode { + CLAMP = 0, + REPEAT = 1, + REPEAT_X = 2, + REPEAT_Y = 3, + REFLECT = 4, +} +#[repr(i8)] +#[derive(Debug, Copy, Clone)] +pub enum FillRule { FILL_WINDING = 0, FILL_EVEN_ODD = 1, } +#[repr(i8)] +#[derive(Debug, Copy, Clone)] +pub enum AntialiasMode { NONE = 0, GRAY = 1, SUBPIXEL = 2, DEFAULT = 3, } +#[repr(i8)] +#[derive(Debug, Copy, Clone)] +pub enum Filter { GOOD = 0, LINEAR = 1, POINT = 2, SENTINEL = 3, } +#[repr(i8)] +#[derive(Debug, Copy, Clone)] +pub enum PatternType { + COLOR = 0, + SURFACE = 1, + LINEAR_GRADIENT = 2, + RADIAL_GRADIENT = 3, +} +#[repr(i8)] +#[derive(Debug, Copy, Clone)] +pub enum JoinStyle { BEVEL = 0, ROUND = 1, MITER = 2, MITER_OR_BEVEL = 3, } +#[repr(i8)] +#[derive(Debug, Copy, Clone)] +pub enum CapStyle { BUTT = 0, ROUND = 1, SQUARE = 2, } +#[repr(i8)] +#[derive(Debug, Copy, Clone)] +pub enum SamplingBounds { UNBOUNDED = 0, BOUNDED = 1, } +#[repr(C)] +#[derive(Debug, Copy)] +pub struct Color { + pub r: Float, + pub g: Float, + pub b: Float, + pub a: Float, +} +impl ::std::clone::Clone for Color { + fn clone(&self) -> Self { *self } +} +#[test] +fn bindgen_test_layout_Color() { + assert_eq!(::std::mem::size_of::<Color>() , 16usize); + assert_eq!(::std::mem::align_of::<Color>() , 4usize); +} +#[repr(C)] +#[derive(Debug, Copy)] +pub struct GradientStop { + pub offset: Float, + pub color: Color, +} +impl ::std::clone::Clone for GradientStop { + fn clone(&self) -> Self { *self } +} +#[test] +fn bindgen_test_layout_GradientStop() { + assert_eq!(::std::mem::size_of::<GradientStop>() , 20usize); + assert_eq!(::std::mem::align_of::<GradientStop>() , 4usize); +} +#[repr(i32)] +#[derive(Debug, Copy, Clone)] +pub enum JobStatus { Complete = 0, Wait = 1, Yield = 2, Error = 3, } +pub type gfxImageFormat = SurfaceFormat; +#[repr(C)] +#[derive(Debug, Copy)] +pub struct RectCorner; +#[repr(u32)] +#[derive(Debug, Copy, Clone)] +pub enum RectCorner_Types_h_unnamed_5 { + TopLeft = 0, + TopRight = 1, + BottomRight = 2, + BottomLeft = 3, + Count = 4, +} +impl ::std::clone::Clone for RectCorner { + fn clone(&self) -> Self { *self } +} +#[repr(u32)] +#[derive(Debug, Copy, Clone)] +pub enum Side { + eSideTop = 0, + eSideRight = 1, + eSideBottom = 2, + eSideLeft = 3, +} +#[repr(u32)] +#[derive(Debug, Copy, Clone)] +pub enum SideBits { + eSideBitsNone = 0, + eSideBitsTop = 1, + eSideBitsRight = 2, + eSideBitsBottom = 4, + eSideBitsLeft = 8, + eSideBitsTopBottom = 5, + eSideBitsLeftRight = 10, + eSideBitsAll = 15, +} pub type nscoord = i32; #[repr(C)] pub struct nsIntPoint { @@ -2518,6 +2867,7 @@ pub enum QuotedName { eQuotedName = 0, eUnquotedName = 1, } * a font type indicated named family or which generic family */ #[repr(C)] +#[derive(Debug)] pub struct FontFamilyName { pub mType: FontFamilyType, pub mName: nsString, @@ -2557,6 +2907,7 @@ fn bindgen_test_layout_gfxFontFeature() { assert_eq!(::std::mem::align_of::<gfxFontFeature>() , 4usize); } #[repr(C)] +#[derive(Debug)] pub struct gfxAlternateValue { pub alternate: u32, pub value: nsString, @@ -2655,11 +3006,11 @@ impl ::std::clone::Clone for nsIURI { fn clone(&self) -> Self { *self } } pub const eCSSProperty_COUNT_DUMMY: nsCSSProperty = - nsCSSProperty::eCSSProperty__x_text_zoom; -pub const eCSSProperty__moz_outline_radius: nsCSSProperty = + nsCSSProperty::eCSSProperty_z_index; +pub const eCSSProperty_all: nsCSSProperty = nsCSSProperty::eCSSProperty_COUNT_no_shorthands; pub const eCSSProperty_COUNT_DUMMY2: nsCSSProperty = - nsCSSProperty::eCSSProperty__moz_transform; + nsCSSProperty::eCSSProperty_transition; pub const eCSSPropertyAlias_MozTransformOrigin: nsCSSProperty = nsCSSProperty::eCSSProperty_COUNT; pub const eCSSProperty_COUNT_DUMMY3: nsCSSProperty = @@ -2670,48 +3021,48 @@ pub const eCSSPropertyExtra_no_properties: nsCSSProperty = #[derive(Debug, Copy, Clone)] pub enum nsCSSProperty { eCSSProperty_UNKNOWN = -1, - eCSSProperty_appearance = 0, - eCSSProperty__moz_outline_radius_topLeft = 1, - eCSSProperty__moz_outline_radius_topRight = 2, - eCSSProperty__moz_outline_radius_bottomRight = 3, - eCSSProperty__moz_outline_radius_bottomLeft = 4, - eCSSProperty__moz_tab_size = 5, - eCSSProperty__x_system_font = 6, - eCSSProperty_animation_delay = 7, - eCSSProperty_animation_direction = 8, - eCSSProperty_animation_duration = 9, - eCSSProperty_animation_fill_mode = 10, - eCSSProperty_animation_iteration_count = 11, - eCSSProperty_animation_name = 12, - eCSSProperty_animation_play_state = 13, - eCSSProperty_animation_timing_function = 14, - eCSSProperty_background_attachment = 15, - eCSSProperty_background_clip = 16, - eCSSProperty_background_color = 17, - eCSSProperty_background_image = 18, - eCSSProperty_background_blend_mode = 19, - eCSSProperty_background_origin = 20, - eCSSProperty_background_position = 21, - eCSSProperty_background_repeat = 22, - eCSSProperty_background_size = 23, - eCSSProperty_binding = 24, - eCSSProperty_block_size = 25, - eCSSProperty_border_block_end_color = 26, - eCSSProperty_border_block_end_style = 27, - eCSSProperty_border_block_end_width = 28, - eCSSProperty_border_block_start_color = 29, - eCSSProperty_border_block_start_style = 30, - eCSSProperty_border_block_start_width = 31, - eCSSProperty_border_bottom_color = 32, - eCSSProperty_border_bottom_colors = 33, + eCSSProperty_align_content = 0, + eCSSProperty_align_items = 1, + eCSSProperty_align_self = 2, + eCSSProperty_animation_delay = 3, + eCSSProperty_animation_direction = 4, + eCSSProperty_animation_duration = 5, + eCSSProperty_animation_fill_mode = 6, + eCSSProperty_animation_iteration_count = 7, + eCSSProperty_animation_name = 8, + eCSSProperty_animation_play_state = 9, + eCSSProperty_animation_timing_function = 10, + eCSSProperty_appearance = 11, + eCSSProperty_backface_visibility = 12, + eCSSProperty_background_attachment = 13, + eCSSProperty_background_blend_mode = 14, + eCSSProperty_background_clip = 15, + eCSSProperty_background_color = 16, + eCSSProperty_background_image = 17, + eCSSProperty_background_origin = 18, + eCSSProperty_background_position = 19, + eCSSProperty_background_repeat = 20, + eCSSProperty_background_size = 21, + eCSSProperty_binding = 22, + eCSSProperty_block_size = 23, + eCSSProperty_border_block_end_color = 24, + eCSSProperty_border_block_end_style = 25, + eCSSProperty_border_block_end_width = 26, + eCSSProperty_border_block_start_color = 27, + eCSSProperty_border_block_start_style = 28, + eCSSProperty_border_block_start_width = 29, + eCSSProperty_border_bottom_color = 30, + eCSSProperty_border_bottom_colors = 31, + eCSSProperty_border_bottom_left_radius = 32, + eCSSProperty_border_bottom_right_radius = 33, eCSSProperty_border_bottom_style = 34, eCSSProperty_border_bottom_width = 35, eCSSProperty_border_collapse = 36, - eCSSProperty_border_image_source = 37, - eCSSProperty_border_image_slice = 38, - eCSSProperty_border_image_width = 39, - eCSSProperty_border_image_outset = 40, - eCSSProperty_border_image_repeat = 41, + eCSSProperty_border_image_outset = 37, + eCSSProperty_border_image_repeat = 38, + eCSSProperty_border_image_slice = 39, + eCSSProperty_border_image_source = 40, + eCSSProperty_border_image_width = 41, eCSSProperty_border_inline_end_color = 42, eCSSProperty_border_inline_end_style = 43, eCSSProperty_border_inline_end_width = 44, @@ -2729,290 +3080,290 @@ pub enum nsCSSProperty { eCSSProperty_border_spacing = 56, eCSSProperty_border_top_color = 57, eCSSProperty_border_top_colors = 58, - eCSSProperty_border_top_style = 59, - eCSSProperty_border_top_width = 60, - eCSSProperty_border_top_left_radius = 61, - eCSSProperty_border_top_right_radius = 62, - eCSSProperty_border_bottom_right_radius = 63, - eCSSProperty_border_bottom_left_radius = 64, - eCSSProperty_bottom = 65, - eCSSProperty_box_decoration_break = 66, - eCSSProperty_box_shadow = 67, - eCSSProperty_box_sizing = 68, - eCSSProperty_caption_side = 69, - eCSSProperty_clear = 70, - eCSSProperty_clip = 71, - eCSSProperty_color = 72, - eCSSProperty_color_adjust = 73, - eCSSProperty__moz_column_count = 74, - eCSSProperty__moz_column_fill = 75, - eCSSProperty__moz_column_width = 76, - eCSSProperty__moz_column_gap = 77, - eCSSProperty__moz_column_rule_color = 78, - eCSSProperty__moz_column_rule_style = 79, - eCSSProperty__moz_column_rule_width = 80, - eCSSProperty_contain = 81, - eCSSProperty_content = 82, - eCSSProperty__moz_control_character_visibility = 83, - eCSSProperty_counter_increment = 84, - eCSSProperty_counter_reset = 85, - eCSSProperty_cursor = 86, - eCSSProperty_direction = 87, - eCSSProperty_display = 88, - eCSSProperty_empty_cells = 89, - eCSSProperty_align_content = 90, - eCSSProperty_align_items = 91, - eCSSProperty_align_self = 92, - eCSSProperty_flex_basis = 93, - eCSSProperty_flex_direction = 94, - eCSSProperty_webkit_box_orient = 95, - eCSSProperty_flex_grow = 96, - eCSSProperty_flex_shrink = 97, - eCSSProperty_flex_wrap = 98, - eCSSProperty_order = 99, - eCSSProperty_justify_content = 100, - eCSSProperty_justify_items = 101, - eCSSProperty_justify_self = 102, - eCSSProperty_float = 103, - eCSSProperty_float_edge = 104, - eCSSProperty_font_family = 105, - eCSSProperty_font_feature_settings = 106, - eCSSProperty_font_kerning = 107, - eCSSProperty_font_language_override = 108, - eCSSProperty_font_size = 109, - eCSSProperty_font_size_adjust = 110, - eCSSProperty_osx_font_smoothing = 111, - eCSSProperty_font_stretch = 112, - eCSSProperty_font_style = 113, - eCSSProperty_font_synthesis = 114, - eCSSProperty_font_variant_alternates = 115, - eCSSProperty_font_variant_caps = 116, - eCSSProperty_font_variant_east_asian = 117, - eCSSProperty_font_variant_ligatures = 118, - eCSSProperty_font_variant_numeric = 119, - eCSSProperty_font_variant_position = 120, - eCSSProperty_font_weight = 121, - eCSSProperty_force_broken_image_icon = 122, - eCSSProperty_grid_auto_flow = 123, - eCSSProperty_grid_auto_columns = 124, - eCSSProperty_grid_auto_rows = 125, - eCSSProperty_grid_template_areas = 126, - eCSSProperty_grid_template_columns = 127, - eCSSProperty_grid_template_rows = 128, - eCSSProperty_grid_column_start = 129, - eCSSProperty_grid_column_end = 130, - eCSSProperty_grid_row_start = 131, - eCSSProperty_grid_row_end = 132, - eCSSProperty_grid_column_gap = 133, - eCSSProperty_grid_row_gap = 134, - eCSSProperty_height = 135, - eCSSProperty_image_orientation = 136, - eCSSProperty_image_region = 137, - eCSSProperty_ime_mode = 138, - eCSSProperty_inline_size = 139, - eCSSProperty_left = 140, - eCSSProperty_letter_spacing = 141, - eCSSProperty_line_height = 142, - eCSSProperty_list_style_image = 143, - eCSSProperty_list_style_position = 144, - eCSSProperty_list_style_type = 145, - eCSSProperty_margin_block_end = 146, - eCSSProperty_margin_block_start = 147, - eCSSProperty_margin_bottom = 148, - eCSSProperty_margin_inline_end = 149, - eCSSProperty_margin_inline_start = 150, - eCSSProperty_margin_left = 151, - eCSSProperty_margin_right = 152, - eCSSProperty_margin_top = 153, - eCSSProperty_marker_offset = 154, - eCSSProperty_max_block_size = 155, - eCSSProperty_max_height = 156, - eCSSProperty_max_inline_size = 157, - eCSSProperty_max_width = 158, - eCSSProperty__moz_min_font_size_ratio = 159, - eCSSProperty_min_height = 160, - eCSSProperty_min_block_size = 161, - eCSSProperty_min_inline_size = 162, - eCSSProperty_min_width = 163, - eCSSProperty_mix_blend_mode = 164, - eCSSProperty_isolation = 165, - eCSSProperty_object_fit = 166, - eCSSProperty_object_position = 167, - eCSSProperty_offset_block_end = 168, - eCSSProperty_offset_block_start = 169, - eCSSProperty_offset_inline_end = 170, - eCSSProperty_offset_inline_start = 171, - eCSSProperty_opacity = 172, - eCSSProperty_orient = 173, - eCSSProperty_outline_color = 174, - eCSSProperty_outline_style = 175, - eCSSProperty_outline_width = 176, - eCSSProperty_outline_offset = 177, - eCSSProperty_overflow_clip_box = 178, - eCSSProperty_overflow_x = 179, - eCSSProperty_overflow_y = 180, - eCSSProperty_padding_block_end = 181, - eCSSProperty_padding_block_start = 182, - eCSSProperty_padding_bottom = 183, - eCSSProperty_padding_inline_end = 184, - eCSSProperty_padding_inline_start = 185, - eCSSProperty_padding_left = 186, - eCSSProperty_padding_right = 187, - eCSSProperty_padding_top = 188, - eCSSProperty_page_break_after = 189, - eCSSProperty_page_break_before = 190, - eCSSProperty_page_break_inside = 191, - eCSSProperty_paint_order = 192, - eCSSProperty_pointer_events = 193, - eCSSProperty_position = 194, - eCSSProperty_quotes = 195, - eCSSProperty_resize = 196, - eCSSProperty_right = 197, - eCSSProperty_ruby_align = 198, - eCSSProperty_ruby_position = 199, - eCSSProperty_scroll_behavior = 200, - eCSSProperty_scroll_snap_coordinate = 201, - eCSSProperty_scroll_snap_destination = 202, - eCSSProperty_scroll_snap_points_x = 203, - eCSSProperty_scroll_snap_points_y = 204, - eCSSProperty_scroll_snap_type_x = 205, - eCSSProperty_scroll_snap_type_y = 206, - eCSSProperty_table_layout = 207, - eCSSProperty_text_align = 208, - eCSSProperty_text_align_last = 209, - eCSSProperty_text_combine_upright = 210, - eCSSProperty_text_decoration_color = 211, - eCSSProperty_text_decoration_line = 212, - eCSSProperty_text_decoration_style = 213, - eCSSProperty_text_emphasis_color = 214, - eCSSProperty_text_emphasis_position = 215, - eCSSProperty_text_emphasis_style = 216, - eCSSProperty__webkit_text_fill_color = 217, - eCSSProperty_text_indent = 218, - eCSSProperty_text_orientation = 219, - eCSSProperty_text_overflow = 220, - eCSSProperty_text_shadow = 221, - eCSSProperty_text_size_adjust = 222, - eCSSProperty_text_transform = 223, - eCSSProperty_transform = 224, - eCSSProperty_transform_box = 225, - eCSSProperty_transform_origin = 226, - eCSSProperty_perspective_origin = 227, - eCSSProperty_perspective = 228, - eCSSProperty_transform_style = 229, - eCSSProperty_backface_visibility = 230, - eCSSProperty_top = 231, - eCSSProperty__moz_top_layer = 232, - eCSSProperty_touch_action = 233, - eCSSProperty_transition_delay = 234, - eCSSProperty_transition_duration = 235, - eCSSProperty_transition_property = 236, - eCSSProperty_transition_timing_function = 237, - eCSSProperty_unicode_bidi = 238, - eCSSProperty_user_focus = 239, - eCSSProperty_user_input = 240, - eCSSProperty_user_modify = 241, - eCSSProperty_user_select = 242, - eCSSProperty_vertical_align = 243, - eCSSProperty_visibility = 244, - eCSSProperty_white_space = 245, - eCSSProperty_width = 246, - eCSSProperty__moz_window_dragging = 247, - eCSSProperty__moz_window_shadow = 248, - eCSSProperty_word_break = 249, - eCSSProperty_word_spacing = 250, - eCSSProperty_word_wrap = 251, - eCSSProperty_hyphens = 252, - eCSSProperty_writing_mode = 253, - eCSSProperty_z_index = 254, - eCSSProperty_box_align = 255, - eCSSProperty_box_direction = 256, - eCSSProperty_box_flex = 257, - eCSSProperty_box_orient = 258, - eCSSProperty_box_pack = 259, - eCSSProperty_box_ordinal_group = 260, - eCSSProperty_stack_sizing = 261, - eCSSProperty_script_level = 262, - eCSSProperty_script_size_multiplier = 263, - eCSSProperty_script_min_size = 264, - eCSSProperty_math_variant = 265, - eCSSProperty_math_display = 266, - eCSSProperty_clip_path = 267, - eCSSProperty_clip_rule = 268, - eCSSProperty_color_interpolation = 269, - eCSSProperty_color_interpolation_filters = 270, - eCSSProperty_dominant_baseline = 271, - eCSSProperty_fill = 272, - eCSSProperty_fill_opacity = 273, - eCSSProperty_fill_rule = 274, - eCSSProperty_filter = 275, - eCSSProperty_flood_color = 276, - eCSSProperty_flood_opacity = 277, - eCSSProperty_image_rendering = 278, - eCSSProperty_lighting_color = 279, - eCSSProperty_marker_end = 280, - eCSSProperty_marker_mid = 281, - eCSSProperty_marker_start = 282, - eCSSProperty_mask = 283, - eCSSProperty_mask_type = 284, - eCSSProperty_shape_rendering = 285, - eCSSProperty_stop_color = 286, - eCSSProperty_stop_opacity = 287, - eCSSProperty_stroke = 288, - eCSSProperty_stroke_dasharray = 289, - eCSSProperty_stroke_dashoffset = 290, - eCSSProperty_stroke_linecap = 291, - eCSSProperty_stroke_linejoin = 292, - eCSSProperty_stroke_miterlimit = 293, - eCSSProperty_stroke_opacity = 294, - eCSSProperty_stroke_width = 295, - eCSSProperty_text_anchor = 296, - eCSSProperty_text_rendering = 297, - eCSSProperty_vector_effect = 298, - eCSSProperty_will_change = 299, - eCSSProperty__x_lang = 300, - eCSSProperty__x_span = 301, - eCSSProperty__x_text_zoom = 302, + eCSSProperty_border_top_left_radius = 59, + eCSSProperty_border_top_right_radius = 60, + eCSSProperty_border_top_style = 61, + eCSSProperty_border_top_width = 62, + eCSSProperty_bottom = 63, + eCSSProperty_box_align = 64, + eCSSProperty_box_decoration_break = 65, + eCSSProperty_box_direction = 66, + eCSSProperty_box_flex = 67, + eCSSProperty_box_ordinal_group = 68, + eCSSProperty_box_orient = 69, + eCSSProperty_webkit_box_orient = 70, + eCSSProperty_box_pack = 71, + eCSSProperty_box_shadow = 72, + eCSSProperty_box_sizing = 73, + eCSSProperty_caption_side = 74, + eCSSProperty_clear = 75, + eCSSProperty_clip = 76, + eCSSProperty_clip_path = 77, + eCSSProperty_clip_rule = 78, + eCSSProperty_color = 79, + eCSSProperty_color_adjust = 80, + eCSSProperty_color_interpolation = 81, + eCSSProperty_color_interpolation_filters = 82, + eCSSProperty__moz_column_count = 83, + eCSSProperty__moz_column_fill = 84, + eCSSProperty__moz_column_gap = 85, + eCSSProperty__moz_column_rule_color = 86, + eCSSProperty__moz_column_rule_style = 87, + eCSSProperty__moz_column_rule_width = 88, + eCSSProperty__moz_column_width = 89, + eCSSProperty_contain = 90, + eCSSProperty_content = 91, + eCSSProperty__moz_control_character_visibility = 92, + eCSSProperty_counter_increment = 93, + eCSSProperty_counter_reset = 94, + eCSSProperty_cursor = 95, + eCSSProperty_direction = 96, + eCSSProperty_display = 97, + eCSSProperty_dominant_baseline = 98, + eCSSProperty_empty_cells = 99, + eCSSProperty_fill = 100, + eCSSProperty_fill_opacity = 101, + eCSSProperty_fill_rule = 102, + eCSSProperty_filter = 103, + eCSSProperty_flex_basis = 104, + eCSSProperty_flex_direction = 105, + eCSSProperty_flex_grow = 106, + eCSSProperty_flex_shrink = 107, + eCSSProperty_flex_wrap = 108, + eCSSProperty_float = 109, + eCSSProperty_float_edge = 110, + eCSSProperty_flood_color = 111, + eCSSProperty_flood_opacity = 112, + eCSSProperty_font_family = 113, + eCSSProperty_font_feature_settings = 114, + eCSSProperty_font_kerning = 115, + eCSSProperty_font_language_override = 116, + eCSSProperty_font_size = 117, + eCSSProperty_font_size_adjust = 118, + eCSSProperty_font_stretch = 119, + eCSSProperty_font_style = 120, + eCSSProperty_font_synthesis = 121, + eCSSProperty_font_variant_alternates = 122, + eCSSProperty_font_variant_caps = 123, + eCSSProperty_font_variant_east_asian = 124, + eCSSProperty_font_variant_ligatures = 125, + eCSSProperty_font_variant_numeric = 126, + eCSSProperty_font_variant_position = 127, + eCSSProperty_font_weight = 128, + eCSSProperty_force_broken_image_icon = 129, + eCSSProperty_grid_auto_columns = 130, + eCSSProperty_grid_auto_flow = 131, + eCSSProperty_grid_auto_rows = 132, + eCSSProperty_grid_column_end = 133, + eCSSProperty_grid_column_gap = 134, + eCSSProperty_grid_column_start = 135, + eCSSProperty_grid_row_end = 136, + eCSSProperty_grid_row_gap = 137, + eCSSProperty_grid_row_start = 138, + eCSSProperty_grid_template_areas = 139, + eCSSProperty_grid_template_columns = 140, + eCSSProperty_grid_template_rows = 141, + eCSSProperty_height = 142, + eCSSProperty_hyphens = 143, + eCSSProperty_image_orientation = 144, + eCSSProperty_image_region = 145, + eCSSProperty_image_rendering = 146, + eCSSProperty_ime_mode = 147, + eCSSProperty_inline_size = 148, + eCSSProperty_isolation = 149, + eCSSProperty_justify_content = 150, + eCSSProperty_justify_items = 151, + eCSSProperty_justify_self = 152, + eCSSProperty__x_lang = 153, + eCSSProperty_left = 154, + eCSSProperty_letter_spacing = 155, + eCSSProperty_lighting_color = 156, + eCSSProperty_line_height = 157, + eCSSProperty_list_style_image = 158, + eCSSProperty_list_style_position = 159, + eCSSProperty_list_style_type = 160, + eCSSProperty_margin_block_end = 161, + eCSSProperty_margin_block_start = 162, + eCSSProperty_margin_bottom = 163, + eCSSProperty_margin_inline_end = 164, + eCSSProperty_margin_inline_start = 165, + eCSSProperty_margin_left = 166, + eCSSProperty_margin_right = 167, + eCSSProperty_margin_top = 168, + eCSSProperty_marker_end = 169, + eCSSProperty_marker_mid = 170, + eCSSProperty_marker_offset = 171, + eCSSProperty_marker_start = 172, + eCSSProperty_mask = 173, + eCSSProperty_mask_type = 174, + eCSSProperty_math_display = 175, + eCSSProperty_math_variant = 176, + eCSSProperty_max_block_size = 177, + eCSSProperty_max_height = 178, + eCSSProperty_max_inline_size = 179, + eCSSProperty_max_width = 180, + eCSSProperty_min_block_size = 181, + eCSSProperty__moz_min_font_size_ratio = 182, + eCSSProperty_min_height = 183, + eCSSProperty_min_inline_size = 184, + eCSSProperty_min_width = 185, + eCSSProperty_mix_blend_mode = 186, + eCSSProperty_object_fit = 187, + eCSSProperty_object_position = 188, + eCSSProperty_offset_block_end = 189, + eCSSProperty_offset_block_start = 190, + eCSSProperty_offset_inline_end = 191, + eCSSProperty_offset_inline_start = 192, + eCSSProperty_opacity = 193, + eCSSProperty_order = 194, + eCSSProperty_orient = 195, + eCSSProperty_osx_font_smoothing = 196, + eCSSProperty_outline_color = 197, + eCSSProperty_outline_offset = 198, + eCSSProperty__moz_outline_radius_bottomLeft = 199, + eCSSProperty__moz_outline_radius_bottomRight = 200, + eCSSProperty__moz_outline_radius_topLeft = 201, + eCSSProperty__moz_outline_radius_topRight = 202, + eCSSProperty_outline_style = 203, + eCSSProperty_outline_width = 204, + eCSSProperty_overflow_clip_box = 205, + eCSSProperty_overflow_x = 206, + eCSSProperty_overflow_y = 207, + eCSSProperty_padding_block_end = 208, + eCSSProperty_padding_block_start = 209, + eCSSProperty_padding_bottom = 210, + eCSSProperty_padding_inline_end = 211, + eCSSProperty_padding_inline_start = 212, + eCSSProperty_padding_left = 213, + eCSSProperty_padding_right = 214, + eCSSProperty_padding_top = 215, + eCSSProperty_page_break_after = 216, + eCSSProperty_page_break_before = 217, + eCSSProperty_page_break_inside = 218, + eCSSProperty_paint_order = 219, + eCSSProperty_perspective = 220, + eCSSProperty_perspective_origin = 221, + eCSSProperty_pointer_events = 222, + eCSSProperty_position = 223, + eCSSProperty_quotes = 224, + eCSSProperty_resize = 225, + eCSSProperty_right = 226, + eCSSProperty_ruby_align = 227, + eCSSProperty_ruby_position = 228, + eCSSProperty_script_level = 229, + eCSSProperty_script_min_size = 230, + eCSSProperty_script_size_multiplier = 231, + eCSSProperty_scroll_behavior = 232, + eCSSProperty_scroll_snap_coordinate = 233, + eCSSProperty_scroll_snap_destination = 234, + eCSSProperty_scroll_snap_points_x = 235, + eCSSProperty_scroll_snap_points_y = 236, + eCSSProperty_scroll_snap_type_x = 237, + eCSSProperty_scroll_snap_type_y = 238, + eCSSProperty_shape_rendering = 239, + eCSSProperty__x_span = 240, + eCSSProperty_stack_sizing = 241, + eCSSProperty_stop_color = 242, + eCSSProperty_stop_opacity = 243, + eCSSProperty_stroke = 244, + eCSSProperty_stroke_dasharray = 245, + eCSSProperty_stroke_dashoffset = 246, + eCSSProperty_stroke_linecap = 247, + eCSSProperty_stroke_linejoin = 248, + eCSSProperty_stroke_miterlimit = 249, + eCSSProperty_stroke_opacity = 250, + eCSSProperty_stroke_width = 251, + eCSSProperty__x_system_font = 252, + eCSSProperty__moz_tab_size = 253, + eCSSProperty_table_layout = 254, + eCSSProperty_text_align = 255, + eCSSProperty_text_align_last = 256, + eCSSProperty_text_anchor = 257, + eCSSProperty_text_combine_upright = 258, + eCSSProperty_text_decoration_color = 259, + eCSSProperty_text_decoration_line = 260, + eCSSProperty_text_decoration_style = 261, + eCSSProperty_text_emphasis_color = 262, + eCSSProperty_text_emphasis_position = 263, + eCSSProperty_text_emphasis_style = 264, + eCSSProperty__webkit_text_fill_color = 265, + eCSSProperty_text_indent = 266, + eCSSProperty_text_orientation = 267, + eCSSProperty_text_overflow = 268, + eCSSProperty_text_rendering = 269, + eCSSProperty_text_shadow = 270, + eCSSProperty_text_size_adjust = 271, + eCSSProperty_text_transform = 272, + eCSSProperty__x_text_zoom = 273, + eCSSProperty_top = 274, + eCSSProperty__moz_top_layer = 275, + eCSSProperty_touch_action = 276, + eCSSProperty_transform = 277, + eCSSProperty_transform_box = 278, + eCSSProperty_transform_origin = 279, + eCSSProperty_transform_style = 280, + eCSSProperty_transition_delay = 281, + eCSSProperty_transition_duration = 282, + eCSSProperty_transition_property = 283, + eCSSProperty_transition_timing_function = 284, + eCSSProperty_unicode_bidi = 285, + eCSSProperty_user_focus = 286, + eCSSProperty_user_input = 287, + eCSSProperty_user_modify = 288, + eCSSProperty_user_select = 289, + eCSSProperty_vector_effect = 290, + eCSSProperty_vertical_align = 291, + eCSSProperty_visibility = 292, + eCSSProperty_white_space = 293, + eCSSProperty_width = 294, + eCSSProperty_will_change = 295, + eCSSProperty__moz_window_dragging = 296, + eCSSProperty__moz_window_shadow = 297, + eCSSProperty_word_break = 298, + eCSSProperty_word_spacing = 299, + eCSSProperty_word_wrap = 300, + eCSSProperty_writing_mode = 301, + eCSSProperty_z_index = 302, eCSSProperty_COUNT_no_shorthands = 303, - eCSSProperty_all = 304, - eCSSProperty_animation = 305, - eCSSProperty_background = 306, - eCSSProperty_border = 307, - eCSSProperty_border_block_end = 308, - eCSSProperty_border_block_start = 309, - eCSSProperty_border_bottom = 310, - eCSSProperty_border_color = 311, - eCSSProperty_border_image = 312, - eCSSProperty_border_inline_end = 313, - eCSSProperty_border_inline_start = 314, - eCSSProperty_border_left = 315, + eCSSProperty_animation = 304, + eCSSProperty_background = 305, + eCSSProperty_border = 306, + eCSSProperty_border_block_end = 307, + eCSSProperty_border_block_start = 308, + eCSSProperty_border_bottom = 309, + eCSSProperty_border_color = 310, + eCSSProperty_border_image = 311, + eCSSProperty_border_inline_end = 312, + eCSSProperty_border_inline_start = 313, + eCSSProperty_border_left = 314, + eCSSProperty_border_radius = 315, eCSSProperty_border_right = 316, eCSSProperty_border_style = 317, eCSSProperty_border_top = 318, eCSSProperty_border_width = 319, - eCSSProperty_border_radius = 320, + eCSSProperty__moz_column_rule = 320, eCSSProperty__moz_columns = 321, - eCSSProperty__moz_column_rule = 322, - eCSSProperty_flex = 323, - eCSSProperty_flex_flow = 324, - eCSSProperty_font = 325, - eCSSProperty_font_variant = 326, - eCSSProperty_grid = 327, + eCSSProperty_flex = 322, + eCSSProperty_flex_flow = 323, + eCSSProperty_font = 324, + eCSSProperty_font_variant = 325, + eCSSProperty_grid = 326, + eCSSProperty_grid_area = 327, eCSSProperty_grid_column = 328, - eCSSProperty_grid_row = 329, - eCSSProperty_grid_area = 330, - eCSSProperty_grid_gap = 331, - eCSSProperty_list_style = 332, - eCSSProperty_margin = 333, + eCSSProperty_grid_gap = 329, + eCSSProperty_grid_row = 330, + eCSSProperty_list_style = 331, + eCSSProperty_margin = 332, + eCSSProperty_marker = 333, eCSSProperty_outline = 334, - eCSSProperty_overflow = 335, - eCSSProperty_padding = 336, - eCSSProperty_scroll_snap_type = 337, - eCSSProperty_text_decoration = 338, - eCSSProperty_text_emphasis = 339, - eCSSProperty_transition = 340, - eCSSProperty_marker = 341, - eCSSProperty__moz_transform = 342, + eCSSProperty__moz_outline_radius = 335, + eCSSProperty_overflow = 336, + eCSSProperty_padding = 337, + eCSSProperty_scroll_snap_type = 338, + eCSSProperty_text_decoration = 339, + eCSSProperty_text_emphasis = 340, + eCSSProperty__moz_transform = 341, + eCSSProperty_transition = 342, eCSSProperty_COUNT = 343, eCSSPropertyAlias_MozPerspectiveOrigin = 344, eCSSPropertyAlias_MozPerspective = 345, @@ -3151,6 +3502,7 @@ pub type nscolor = u32; * count is 1. */ #[repr(C)] +#[derive(Debug)] pub struct nsStringBuffer { pub mRefCount: u32, pub mStorageSize: u32, @@ -3180,6 +3532,7 @@ fn bindgen_test_layout_ImageValue() { assert_eq!(::std::mem::align_of::<ImageValue>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct GridNamedArea { pub mName: nsString, pub mColumnStart: u32, @@ -3302,16 +3655,17 @@ pub enum nsCSSUnit { eCSSUnit_FlexFraction = 4000, } #[repr(C)] +#[derive(Debug)] pub struct nsCSSValue { pub mUnit: nsCSSUnit, - pub mValue: nsCSSValue_nsCSSValue_h_unnamed_7, + pub mValue: nsCSSValue_nsCSSValue_h_unnamed_8, } #[repr(u32)] #[derive(Debug, Copy, Clone)] pub enum nsCSSValue_Serialization { eNormalized = 0, eAuthorSpecified = 1, } #[repr(C)] -#[derive(Copy, Debug)] -pub struct nsCSSValue_nsCSSValue_h_unnamed_7 { +#[derive(Debug, Copy)] +pub struct nsCSSValue_nsCSSValue_h_unnamed_8 { pub mInt: __BindgenUnionField<i32>, pub mFloat: __BindgenUnionField<f32>, pub mString: __BindgenUnionField<*mut nsStringBuffer>, @@ -3334,15 +3688,15 @@ pub struct nsCSSValue_nsCSSValue_h_unnamed_7 { pub mFontFamilyList: __BindgenUnionField<*mut FontFamilyListRefCnt>, pub _bindgen_data_: u64, } -impl nsCSSValue_nsCSSValue_h_unnamed_7 { } -impl ::std::clone::Clone for nsCSSValue_nsCSSValue_h_unnamed_7 { +impl nsCSSValue_nsCSSValue_h_unnamed_8 { } +impl ::std::clone::Clone for nsCSSValue_nsCSSValue_h_unnamed_8 { fn clone(&self) -> Self { *self } } #[test] -fn bindgen_test_layout_nsCSSValue_nsCSSValue_h_unnamed_7() { - assert_eq!(::std::mem::size_of::<nsCSSValue_nsCSSValue_h_unnamed_7>() , +fn bindgen_test_layout_nsCSSValue_nsCSSValue_h_unnamed_8() { + assert_eq!(::std::mem::size_of::<nsCSSValue_nsCSSValue_h_unnamed_8>() , 8usize); - assert_eq!(::std::mem::align_of::<nsCSSValue_nsCSSValue_h_unnamed_7>() , + assert_eq!(::std::mem::align_of::<nsCSSValue_nsCSSValue_h_unnamed_8>() , 8usize); } #[test] @@ -3351,6 +3705,7 @@ fn bindgen_test_layout_nsCSSValue() { assert_eq!(::std::mem::align_of::<nsCSSValue>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct Array { pub mRefCnt: usize, pub mCount: usize, @@ -3362,6 +3717,7 @@ fn bindgen_test_layout_Array() { assert_eq!(::std::mem::align_of::<Array>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsCSSValueList { pub mValue: nsCSSValue, pub mNext: *mut nsCSSValueList, @@ -3372,6 +3728,7 @@ fn bindgen_test_layout_nsCSSValueList() { assert_eq!(::std::mem::align_of::<nsCSSValueList>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsCSSValueList_heap { pub _base: nsCSSValueList, pub mRefCnt: nsAutoRefCnt, @@ -3383,6 +3740,7 @@ fn bindgen_test_layout_nsCSSValueList_heap() { assert_eq!(::std::mem::align_of::<nsCSSValueList_heap>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsCSSValueSharedList { pub mRefCnt: nsAutoRefCnt, pub _mOwningThread: nsAutoOwningThread, @@ -3394,6 +3752,7 @@ fn bindgen_test_layout_nsCSSValueSharedList() { assert_eq!(::std::mem::align_of::<nsCSSValueSharedList>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsCSSRect { pub mTop: nsCSSValue, pub mRight: nsCSSValue, @@ -3406,6 +3765,7 @@ fn bindgen_test_layout_nsCSSRect() { assert_eq!(::std::mem::align_of::<nsCSSRect>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsCSSRect_heap { pub _base: nsCSSRect, pub mRefCnt: nsAutoRefCnt, @@ -3417,6 +3777,7 @@ fn bindgen_test_layout_nsCSSRect_heap() { assert_eq!(::std::mem::align_of::<nsCSSRect_heap>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsCSSValuePair { pub mXValue: nsCSSValue, pub mYValue: nsCSSValue, @@ -3427,6 +3788,7 @@ fn bindgen_test_layout_nsCSSValuePair() { assert_eq!(::std::mem::align_of::<nsCSSValuePair>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsCSSValuePair_heap { pub _base: nsCSSValuePair, pub mRefCnt: nsAutoRefCnt, @@ -3438,6 +3800,7 @@ fn bindgen_test_layout_nsCSSValuePair_heap() { assert_eq!(::std::mem::align_of::<nsCSSValuePair_heap>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsCSSValueTriplet { pub mXValue: nsCSSValue, pub mYValue: nsCSSValue, @@ -3449,6 +3812,7 @@ fn bindgen_test_layout_nsCSSValueTriplet() { assert_eq!(::std::mem::align_of::<nsCSSValueTriplet>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsCSSValueTriplet_heap { pub _base: nsCSSValueTriplet, pub mRefCnt: nsAutoRefCnt, @@ -3460,6 +3824,7 @@ fn bindgen_test_layout_nsCSSValueTriplet_heap() { assert_eq!(::std::mem::align_of::<nsCSSValueTriplet_heap>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsCSSValuePairList { pub mXValue: nsCSSValue, pub mYValue: nsCSSValue, @@ -3471,6 +3836,7 @@ fn bindgen_test_layout_nsCSSValuePairList() { assert_eq!(::std::mem::align_of::<nsCSSValuePairList>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsCSSValuePairList_heap { pub _base: nsCSSValuePairList, pub mRefCnt: nsAutoRefCnt, @@ -3482,6 +3848,7 @@ fn bindgen_test_layout_nsCSSValuePairList_heap() { assert_eq!(::std::mem::align_of::<nsCSSValuePairList_heap>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsCSSValueGradientStop { pub mLocation: nsCSSValue, pub mColor: nsCSSValue, @@ -3530,6 +3897,7 @@ fn bindgen_test_layout_nsCSSValueTokenStream() { assert_eq!(::std::mem::align_of::<nsCSSValueTokenStream>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsCSSValueFloatColor { pub mRefCnt: nsAutoRefCnt, pub _mOwningThread: nsAutoOwningThread, @@ -3544,6 +3912,7 @@ fn bindgen_test_layout_nsCSSValueFloatColor() { assert_eq!(::std::mem::align_of::<nsCSSValueFloatColor>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsCSSCornerSizes { pub mTopLeft: nsCSSValue, pub mTopRight: nsCSSValue, @@ -3616,7 +3985,7 @@ pub struct _vftable_nsIRequest { } #[repr(u32)] #[derive(Debug, Copy, Clone)] -pub enum nsIRequest_nsIRequest_h_unnamed_8 { +pub enum nsIRequest_nsIRequest_h_unnamed_9 { LOAD_REQUESTMASK = 65535, LOAD_NORMAL = 0, LOAD_BACKGROUND = 1, @@ -3660,6 +4029,7 @@ fn bindgen_test_layout_nsIAtom() { assert_eq!(::std::mem::align_of::<nsIAtom>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsAtomString { pub _base: nsString, } @@ -3669,6 +4039,7 @@ fn bindgen_test_layout_nsAtomString() { assert_eq!(::std::mem::align_of::<nsAtomString>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsAtomCString { pub _base: nsCString, } @@ -3678,13 +4049,9 @@ fn bindgen_test_layout_nsAtomCString() { assert_eq!(::std::mem::align_of::<nsAtomCString>() , 8usize); } #[repr(C)] -#[derive(Debug, Copy)] pub struct nsDependentAtomString { pub _base: [u64; 2usize], } -impl ::std::clone::Clone for nsDependentAtomString { - fn clone(&self) -> Self { *self } -} /** * A class for holding strong references to handle-managed objects. * @@ -3693,6 +4060,7 @@ impl ::std::clone::Clone for nsDependentAtomString { * and ->Release() called on it. */ #[repr(C)] +#[derive(Debug)] pub struct HandleRefPtr<T> { pub mHandle: T, } @@ -3723,6 +4091,7 @@ pub struct HandleRefPtr<T> { * (or a proxy for it) in which the object was allocated. */ #[repr(C)] +#[derive(Debug)] pub struct ArenaRefPtr<T> { pub mPtr: RefPtr<T>, pub _phantom0: ::std::marker::PhantomData<T>, @@ -3762,23 +4131,23 @@ pub enum nsStyleUnit { eStyleUnit_Calc = 40, } #[repr(C)] -#[derive(Copy, Debug)] -pub struct nsStyleCoord_h_unnamed_9 { +#[derive(Debug, Copy)] +pub struct nsStyleCoord_h_unnamed_10 { pub mInt: __BindgenUnionField<i32>, pub mFloat: __BindgenUnionField<f32>, pub mPointer: __BindgenUnionField<*mut ::std::os::raw::c_void>, pub _bindgen_data_: u64, } -impl nsStyleCoord_h_unnamed_9 { } -impl ::std::clone::Clone for nsStyleCoord_h_unnamed_9 { +impl nsStyleCoord_h_unnamed_10 { } +impl ::std::clone::Clone for nsStyleCoord_h_unnamed_10 { fn clone(&self) -> Self { *self } } #[test] -fn bindgen_test_layout_nsStyleCoord_h_unnamed_9() { - assert_eq!(::std::mem::size_of::<nsStyleCoord_h_unnamed_9>() , 8usize); - assert_eq!(::std::mem::align_of::<nsStyleCoord_h_unnamed_9>() , 8usize); +fn bindgen_test_layout_nsStyleCoord_h_unnamed_10() { + assert_eq!(::std::mem::size_of::<nsStyleCoord_h_unnamed_10>() , 8usize); + assert_eq!(::std::mem::align_of::<nsStyleCoord_h_unnamed_10>() , 8usize); } -pub type nsStyleUnion = nsStyleCoord_h_unnamed_9; +pub type nsStyleUnion = nsStyleCoord_h_unnamed_10; /** * Class that hold a single size specification used by the style * system. The size specification consists of two parts -- a number @@ -3788,6 +4157,7 @@ pub type nsStyleUnion = nsStyleCoord_h_unnamed_9; * form. */ #[repr(C)] +#[derive(Debug)] pub struct nsStyleCoord { pub mUnit: nsStyleUnit, pub mValue: nsStyleUnion, @@ -3808,6 +4178,7 @@ fn bindgen_test_layout_nsStyleCoord_CalcValue() { assert_eq!(::std::mem::align_of::<nsStyleCoord_CalcValue>() , 4usize); } #[repr(C)] +#[derive(Debug)] pub struct nsStyleCoord_Calc { pub _base: nsStyleCoord_CalcValue, pub mRefCnt: nsAutoRefCnt, @@ -3832,6 +4203,7 @@ fn bindgen_test_layout_nsStyleCoord() { * or paddings of a box. */ #[repr(C)] +#[derive(Debug)] pub struct nsStyleSides { pub mUnits: [nsStyleUnit; 4usize], pub mValues: [nsStyleUnion; 4usize], @@ -3847,6 +4219,7 @@ fn bindgen_test_layout_nsStyleSides() { * corners of a box (for, e.g., border-radius and outline-radius). */ #[repr(C)] +#[derive(Debug)] pub struct nsStyleCorners { pub mUnits: [nsStyleUnit; 8usize], pub mValues: [nsStyleUnion; 8usize], @@ -3914,6 +4287,7 @@ fn bindgen_test_layout_nsStyleFont() { assert_eq!(::std::mem::align_of::<nsStyleFont>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsStyleGradientStop { pub mLocation: nsStyleCoord, pub mColor: nscolor, @@ -3966,27 +4340,27 @@ pub enum nsStyleImageType { pub struct nsStyleImage { pub mSubImages: u64, pub mType: nsStyleImageType, - pub nsStyleImage_nsStyleStruct_h_unnamed_12: nsStyleImage_nsStyleStruct_h_unnamed_12, + pub nsStyleImage_nsStyleStruct_h_unnamed_13: nsStyleImage_nsStyleStruct_h_unnamed_13, pub mCropRect: nsAutoPtr<nsStyleSides>, pub mImageTracked: bool, } #[repr(C)] -#[derive(Copy, Debug)] -pub struct nsStyleImage_nsStyleStruct_h_unnamed_12 { +#[derive(Debug, Copy)] +pub struct nsStyleImage_nsStyleStruct_h_unnamed_13 { pub mImage: __BindgenUnionField<*mut imgRequestProxy>, pub mGradient: __BindgenUnionField<*mut nsStyleGradient>, pub mElementId: __BindgenUnionField<*mut ::std::os::raw::c_ushort>, pub _bindgen_data_: u64, } -impl nsStyleImage_nsStyleStruct_h_unnamed_12 { } -impl ::std::clone::Clone for nsStyleImage_nsStyleStruct_h_unnamed_12 { +impl nsStyleImage_nsStyleStruct_h_unnamed_13 { } +impl ::std::clone::Clone for nsStyleImage_nsStyleStruct_h_unnamed_13 { fn clone(&self) -> Self { *self } } #[test] -fn bindgen_test_layout_nsStyleImage_nsStyleStruct_h_unnamed_12() { - assert_eq!(::std::mem::size_of::<nsStyleImage_nsStyleStruct_h_unnamed_12>() +fn bindgen_test_layout_nsStyleImage_nsStyleStruct_h_unnamed_13() { + assert_eq!(::std::mem::size_of::<nsStyleImage_nsStyleStruct_h_unnamed_13>() , 8usize); - assert_eq!(::std::mem::align_of::<nsStyleImage_nsStyleStruct_h_unnamed_12>() + assert_eq!(::std::mem::align_of::<nsStyleImage_nsStyleStruct_h_unnamed_13>() , 8usize); } #[test] @@ -3995,6 +4369,7 @@ fn bindgen_test_layout_nsStyleImage() { assert_eq!(::std::mem::align_of::<nsStyleImage>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsStyleColor { pub mColor: nscolor, } @@ -4004,6 +4379,8 @@ fn bindgen_test_layout_nsStyleColor() { assert_eq!(::std::mem::align_of::<nsStyleColor>() , 4usize); } #[repr(C)] +pub struct nsStyleAutoArray; +#[repr(C)] pub struct nsStyleImageLayers { pub mAttachmentCount: u32, pub mClipCount: u32, @@ -4015,11 +4392,11 @@ pub struct nsStyleImageLayers { pub mMaskModeCount: u32, pub mBlendModeCount: u32, pub mCompositeCount: u32, - pub mLayers: [u64; 16usize], + pub mLayers: [u64; 15usize], } #[repr(u32)] #[derive(Debug, Copy, Clone)] -pub enum nsStyleImageLayers_nsStyleStruct_h_unnamed_13 { +pub enum nsStyleImageLayers_nsStyleStruct_h_unnamed_14 { shorthand = 0, color = 1, image = 2, @@ -4123,7 +4500,7 @@ fn bindgen_test_layout_nsStyleImageLayers_Layer() { } #[test] fn bindgen_test_layout_nsStyleImageLayers() { - assert_eq!(::std::mem::size_of::<nsStyleImageLayers>() , 168usize); + assert_eq!(::std::mem::size_of::<nsStyleImageLayers>() , 160usize); assert_eq!(::std::mem::align_of::<nsStyleImageLayers>() , 8usize); } #[repr(C)] @@ -4133,10 +4510,11 @@ pub struct nsStyleBackground { } #[test] fn bindgen_test_layout_nsStyleBackground() { - assert_eq!(::std::mem::size_of::<nsStyleBackground>() , 176usize); + assert_eq!(::std::mem::size_of::<nsStyleBackground>() , 168usize); assert_eq!(::std::mem::align_of::<nsStyleBackground>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsStyleMargin { pub mMargin: nsStyleSides, pub mHasCachedMargin: bool, @@ -4148,6 +4526,7 @@ fn bindgen_test_layout_nsStyleMargin() { assert_eq!(::std::mem::align_of::<nsStyleMargin>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsStylePadding { pub mPadding: nsStyleSides, pub mHasCachedPadding: bool, @@ -4159,6 +4538,7 @@ fn bindgen_test_layout_nsStylePadding() { assert_eq!(::std::mem::align_of::<nsStylePadding>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsBorderColors { pub mNext: *mut nsBorderColors, pub mColor: nscolor, @@ -4169,6 +4549,7 @@ fn bindgen_test_layout_nsBorderColors() { assert_eq!(::std::mem::align_of::<nsBorderColors>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsCSSShadowItem { pub mXOffset: nscoord, pub mYOffset: nscoord, @@ -4184,6 +4565,7 @@ fn bindgen_test_layout_nsCSSShadowItem() { assert_eq!(::std::mem::align_of::<nsCSSShadowItem>() , 4usize); } #[repr(C)] +#[derive(Debug)] pub struct nsCSSShadowArray { pub mRefCnt: nsAutoRefCnt, pub _mOwningThread: nsAutoOwningThread, @@ -4220,13 +4602,13 @@ fn bindgen_test_layout_nsStyleBorder() { assert_eq!(::std::mem::align_of::<nsStyleBorder>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsStyleOutline { pub mOutlineRadius: nsStyleCorners, pub mOutlineWidth: nsStyleCoord, pub mOutlineOffset: nscoord, pub mCachedOutlineWidth: nscoord, pub mOutlineColor: nscolor, - pub mHasCachedOutline: bool, pub mOutlineStyle: u8, pub mTwipsPerPixel: nscoord, } @@ -4266,6 +4648,7 @@ fn bindgen_test_layout_nsStyleList() { assert_eq!(::std::mem::align_of::<nsStyleList>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsStyleGridLine { pub mHasSpan: bool, pub mInteger: i32, @@ -4337,6 +4720,7 @@ fn bindgen_test_layout_nsStylePosition() { assert_eq!(::std::mem::align_of::<nsStylePosition>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsStyleTextOverflowSide { pub mString: nsString, pub mType: u8, @@ -4347,6 +4731,7 @@ fn bindgen_test_layout_nsStyleTextOverflowSide() { assert_eq!(::std::mem::align_of::<nsStyleTextOverflowSide>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsStyleTextOverflow { pub mLeft: nsStyleTextOverflowSide, pub mRight: nsStyleTextOverflowSide, @@ -4358,6 +4743,7 @@ fn bindgen_test_layout_nsStyleTextOverflow() { assert_eq!(::std::mem::align_of::<nsStyleTextOverflow>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsStyleTextReset { pub mTextOverflow: nsStyleTextOverflow, pub mTextDecorationLine: u8, @@ -4371,6 +4757,7 @@ fn bindgen_test_layout_nsStyleTextReset() { assert_eq!(::std::mem::align_of::<nsStyleTextReset>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsStyleText { pub mTextAlign: u8, pub mTextAlignLast: u8, @@ -4432,6 +4819,7 @@ fn bindgen_test_layout_nsStyleImageOrientation() { assert_eq!(::std::mem::align_of::<nsStyleImageOrientation>() , 1usize); } #[repr(C)] +#[derive(Debug)] pub struct nsStyleVisibility { pub mImageOrientation: nsStyleImageOrientation, pub mDirection: u8, @@ -4450,7 +4838,7 @@ fn bindgen_test_layout_nsStyleVisibility() { #[derive(Debug, Copy)] pub struct nsTimingFunction { pub mType: nsTimingFunction_Type, - pub nsTimingFunction_nsStyleStruct_h_unnamed_14: nsTimingFunction_nsStyleStruct_h_unnamed_14, + pub nsTimingFunction_nsStyleStruct_h_unnamed_15: nsTimingFunction_nsStyleStruct_h_unnamed_15, } #[repr(i32)] #[derive(Debug, Copy, Clone)] @@ -4476,57 +4864,57 @@ pub enum nsTimingFunction_StepSyntax { #[derive(Debug, Copy, Clone)] pub enum nsTimingFunction_Keyword { Implicit = 0, Explicit = 1, } #[repr(C)] -#[derive(Copy, Debug)] -pub struct nsTimingFunction_nsStyleStruct_h_unnamed_14 { - pub mFunc: __BindgenUnionField<nsTimingFunction_nsStyleStruct_h_unnamed_14_nsStyleStruct_h_unnamed_15>, - pub nsTimingFunction_nsStyleStruct_h_unnamed_14_nsStyleStruct_h_unnamed_16: __BindgenUnionField<nsTimingFunction_nsStyleStruct_h_unnamed_14_nsStyleStruct_h_unnamed_16>, +#[derive(Debug, Copy)] +pub struct nsTimingFunction_nsStyleStruct_h_unnamed_15 { + pub mFunc: __BindgenUnionField<nsTimingFunction_nsStyleStruct_h_unnamed_15_nsStyleStruct_h_unnamed_16>, + pub nsTimingFunction_nsStyleStruct_h_unnamed_15_nsStyleStruct_h_unnamed_17: __BindgenUnionField<nsTimingFunction_nsStyleStruct_h_unnamed_15_nsStyleStruct_h_unnamed_17>, pub _bindgen_data_: [u32; 4usize], } -impl nsTimingFunction_nsStyleStruct_h_unnamed_14 { } -impl ::std::clone::Clone for nsTimingFunction_nsStyleStruct_h_unnamed_14 { +impl nsTimingFunction_nsStyleStruct_h_unnamed_15 { } +impl ::std::clone::Clone for nsTimingFunction_nsStyleStruct_h_unnamed_15 { fn clone(&self) -> Self { *self } } #[test] -fn bindgen_test_layout_nsTimingFunction_nsStyleStruct_h_unnamed_14() { - assert_eq!(::std::mem::size_of::<nsTimingFunction_nsStyleStruct_h_unnamed_14>() +fn bindgen_test_layout_nsTimingFunction_nsStyleStruct_h_unnamed_15() { + assert_eq!(::std::mem::size_of::<nsTimingFunction_nsStyleStruct_h_unnamed_15>() , 16usize); - assert_eq!(::std::mem::align_of::<nsTimingFunction_nsStyleStruct_h_unnamed_14>() + assert_eq!(::std::mem::align_of::<nsTimingFunction_nsStyleStruct_h_unnamed_15>() , 4usize); } #[repr(C)] #[derive(Debug, Copy)] -pub struct nsTimingFunction_nsStyleStruct_h_unnamed_14_nsStyleStruct_h_unnamed_15 { +pub struct nsTimingFunction_nsStyleStruct_h_unnamed_15_nsStyleStruct_h_unnamed_16 { pub mX1: f32, pub mY1: f32, pub mX2: f32, pub mY2: f32, } impl ::std::clone::Clone for - nsTimingFunction_nsStyleStruct_h_unnamed_14_nsStyleStruct_h_unnamed_15 { + nsTimingFunction_nsStyleStruct_h_unnamed_15_nsStyleStruct_h_unnamed_16 { fn clone(&self) -> Self { *self } } #[test] -fn bindgen_test_layout_nsTimingFunction_nsStyleStruct_h_unnamed_14_nsStyleStruct_h_unnamed_15() { - assert_eq!(::std::mem::size_of::<nsTimingFunction_nsStyleStruct_h_unnamed_14_nsStyleStruct_h_unnamed_15>() +fn bindgen_test_layout_nsTimingFunction_nsStyleStruct_h_unnamed_15_nsStyleStruct_h_unnamed_16() { + assert_eq!(::std::mem::size_of::<nsTimingFunction_nsStyleStruct_h_unnamed_15_nsStyleStruct_h_unnamed_16>() , 16usize); - assert_eq!(::std::mem::align_of::<nsTimingFunction_nsStyleStruct_h_unnamed_14_nsStyleStruct_h_unnamed_15>() + assert_eq!(::std::mem::align_of::<nsTimingFunction_nsStyleStruct_h_unnamed_15_nsStyleStruct_h_unnamed_16>() , 4usize); } #[repr(C)] #[derive(Debug, Copy)] -pub struct nsTimingFunction_nsStyleStruct_h_unnamed_14_nsStyleStruct_h_unnamed_16 { +pub struct nsTimingFunction_nsStyleStruct_h_unnamed_15_nsStyleStruct_h_unnamed_17 { pub mStepSyntax: nsTimingFunction_StepSyntax, pub mSteps: u32, } impl ::std::clone::Clone for - nsTimingFunction_nsStyleStruct_h_unnamed_14_nsStyleStruct_h_unnamed_16 { + nsTimingFunction_nsStyleStruct_h_unnamed_15_nsStyleStruct_h_unnamed_17 { fn clone(&self) -> Self { *self } } #[test] -fn bindgen_test_layout_nsTimingFunction_nsStyleStruct_h_unnamed_14_nsStyleStruct_h_unnamed_16() { - assert_eq!(::std::mem::size_of::<nsTimingFunction_nsStyleStruct_h_unnamed_14_nsStyleStruct_h_unnamed_16>() +fn bindgen_test_layout_nsTimingFunction_nsStyleStruct_h_unnamed_15_nsStyleStruct_h_unnamed_17() { + assert_eq!(::std::mem::size_of::<nsTimingFunction_nsStyleStruct_h_unnamed_15_nsStyleStruct_h_unnamed_17>() , 8usize); - assert_eq!(::std::mem::align_of::<nsTimingFunction_nsStyleStruct_h_unnamed_14_nsStyleStruct_h_unnamed_16>() + assert_eq!(::std::mem::align_of::<nsTimingFunction_nsStyleStruct_h_unnamed_15_nsStyleStruct_h_unnamed_17>() , 4usize); } impl ::std::clone::Clone for nsTimingFunction { @@ -4538,6 +4926,7 @@ fn bindgen_test_layout_nsTimingFunction() { assert_eq!(::std::mem::align_of::<nsTimingFunction>() , 4usize); } #[repr(C)] +#[derive(Debug)] pub struct StyleTransition { pub mTimingFunction: nsTimingFunction, pub mDuration: f32, @@ -4551,6 +4940,7 @@ fn bindgen_test_layout_StyleTransition() { assert_eq!(::std::mem::align_of::<StyleTransition>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct StyleAnimation { pub mTimingFunction: nsTimingFunction, pub mDuration: f32, @@ -4588,7 +4978,7 @@ pub struct nsStyleDisplay { pub mIsolation: u8, pub mTopLayer: u8, pub mWillChangeBitField: u8, - pub mWillChange: [u64; 4usize], + pub mWillChange: u64, pub mTouchAction: u8, pub mScrollBehavior: u8, pub mScrollSnapTypeX: u8, @@ -4605,12 +4995,12 @@ pub struct nsStyleDisplay { pub mChildPerspective: nsStyleCoord, pub mPerspectiveOrigin: [nsStyleCoord; 2usize], pub mVerticalAlign: nsStyleCoord, - pub mTransitions: [u64; 7usize], + pub mTransitions: [u64; 6usize], pub mTransitionTimingFunctionCount: u32, pub mTransitionDurationCount: u32, pub mTransitionDelayCount: u32, pub mTransitionPropertyCount: u32, - pub mAnimations: [u64; 10usize], + pub mAnimations: [u64; 9usize], pub mAnimationTimingFunctionCount: u32, pub mAnimationDurationCount: u32, pub mAnimationDelayCount: u32, @@ -4622,10 +5012,11 @@ pub struct nsStyleDisplay { } #[test] fn bindgen_test_layout_nsStyleDisplay() { - assert_eq!(::std::mem::size_of::<nsStyleDisplay>() , 448usize); + assert_eq!(::std::mem::size_of::<nsStyleDisplay>() , 408usize); assert_eq!(::std::mem::align_of::<nsStyleDisplay>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsStyleTable { pub mLayoutStrategy: u8, pub mSpan: i32, @@ -4636,6 +5027,7 @@ fn bindgen_test_layout_nsStyleTable() { assert_eq!(::std::mem::align_of::<nsStyleTable>() , 4usize); } #[repr(C)] +#[derive(Debug)] pub struct nsStyleTableBorder { pub mBorderSpacingCol: nscoord, pub mBorderSpacingRow: nscoord, @@ -4664,28 +5056,29 @@ pub enum nsStyleContentType { eStyleContentType_Uninitialized = 51, } #[repr(C)] +#[derive(Debug)] pub struct nsStyleContentData { pub mType: nsStyleContentType, - pub mContent: nsStyleContentData_nsStyleStruct_h_unnamed_17, + pub mContent: nsStyleContentData_nsStyleStruct_h_unnamed_18, pub mImageTracked: bool, } #[repr(C)] -#[derive(Copy, Debug)] -pub struct nsStyleContentData_nsStyleStruct_h_unnamed_17 { +#[derive(Debug, Copy)] +pub struct nsStyleContentData_nsStyleStruct_h_unnamed_18 { pub mString: __BindgenUnionField<*mut ::std::os::raw::c_ushort>, pub mImage: __BindgenUnionField<*mut imgRequestProxy>, pub mCounters: __BindgenUnionField<*mut Array>, pub _bindgen_data_: u64, } -impl nsStyleContentData_nsStyleStruct_h_unnamed_17 { } -impl ::std::clone::Clone for nsStyleContentData_nsStyleStruct_h_unnamed_17 { +impl nsStyleContentData_nsStyleStruct_h_unnamed_18 { } +impl ::std::clone::Clone for nsStyleContentData_nsStyleStruct_h_unnamed_18 { fn clone(&self) -> Self { *self } } #[test] -fn bindgen_test_layout_nsStyleContentData_nsStyleStruct_h_unnamed_17() { - assert_eq!(::std::mem::size_of::<nsStyleContentData_nsStyleStruct_h_unnamed_17>() +fn bindgen_test_layout_nsStyleContentData_nsStyleStruct_h_unnamed_18() { + assert_eq!(::std::mem::size_of::<nsStyleContentData_nsStyleStruct_h_unnamed_18>() , 8usize); - assert_eq!(::std::mem::align_of::<nsStyleContentData_nsStyleStruct_h_unnamed_17>() + assert_eq!(::std::mem::align_of::<nsStyleContentData_nsStyleStruct_h_unnamed_18>() , 8usize); } #[test] @@ -4694,6 +5087,7 @@ fn bindgen_test_layout_nsStyleContentData() { assert_eq!(::std::mem::align_of::<nsStyleContentData>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsStyleCounterData { pub mCounter: nsString, pub mValue: i32, @@ -4704,6 +5098,7 @@ fn bindgen_test_layout_nsStyleCounterData() { assert_eq!(::std::mem::align_of::<nsStyleCounterData>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsStyleContent { pub mMarkerOffset: nsStyleCoord, pub mContents: *mut nsStyleContentData, @@ -4719,6 +5114,7 @@ fn bindgen_test_layout_nsStyleContent() { assert_eq!(::std::mem::align_of::<nsStyleContent>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsStyleUIReset { pub mUserSelect: u8, pub mForceBrokenImageIcon: u8, @@ -4744,6 +5140,7 @@ fn bindgen_test_layout_nsCursorImage() { assert_eq!(::std::mem::align_of::<nsCursorImage>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsStyleUserInterface { pub mUserInput: u8, pub mUserModify: u8, @@ -4759,6 +5156,7 @@ fn bindgen_test_layout_nsStyleUserInterface() { assert_eq!(::std::mem::align_of::<nsStyleUserInterface>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsStyleXUL { pub mBoxFlex: f32, pub mBoxOrdinal: u32, @@ -4774,6 +5172,7 @@ fn bindgen_test_layout_nsStyleXUL() { assert_eq!(::std::mem::align_of::<nsStyleXUL>() , 4usize); } #[repr(C)] +#[derive(Debug)] pub struct nsStyleColumn { pub mColumnCount: u32, pub mColumnWidth: nsStyleCoord, @@ -4807,27 +5206,28 @@ pub enum nsStyleSVGOpacitySource { eStyleSVGOpacitySource_ContextStrokeOpacity = 2, } #[repr(C)] +#[derive(Debug)] pub struct nsStyleSVGPaint { - pub mPaint: nsStyleSVGPaint_nsStyleStruct_h_unnamed_18, + pub mPaint: nsStyleSVGPaint_nsStyleStruct_h_unnamed_19, pub mType: nsStyleSVGPaintType, pub mFallbackColor: nscolor, } #[repr(C)] -#[derive(Copy, Debug)] -pub struct nsStyleSVGPaint_nsStyleStruct_h_unnamed_18 { +#[derive(Debug, Copy)] +pub struct nsStyleSVGPaint_nsStyleStruct_h_unnamed_19 { pub mColor: __BindgenUnionField<nscolor>, pub mPaintServer: __BindgenUnionField<*mut nsIURI>, pub _bindgen_data_: u64, } -impl nsStyleSVGPaint_nsStyleStruct_h_unnamed_18 { } -impl ::std::clone::Clone for nsStyleSVGPaint_nsStyleStruct_h_unnamed_18 { +impl nsStyleSVGPaint_nsStyleStruct_h_unnamed_19 { } +impl ::std::clone::Clone for nsStyleSVGPaint_nsStyleStruct_h_unnamed_19 { fn clone(&self) -> Self { *self } } #[test] -fn bindgen_test_layout_nsStyleSVGPaint_nsStyleStruct_h_unnamed_18() { - assert_eq!(::std::mem::size_of::<nsStyleSVGPaint_nsStyleStruct_h_unnamed_18>() +fn bindgen_test_layout_nsStyleSVGPaint_nsStyleStruct_h_unnamed_19() { + assert_eq!(::std::mem::size_of::<nsStyleSVGPaint_nsStyleStruct_h_unnamed_19>() , 8usize); - assert_eq!(::std::mem::align_of::<nsStyleSVGPaint_nsStyleStruct_h_unnamed_18>() + assert_eq!(::std::mem::align_of::<nsStyleSVGPaint_nsStyleStruct_h_unnamed_19>() , 8usize); } #[test] @@ -4836,6 +5236,7 @@ fn bindgen_test_layout_nsStyleSVGPaint() { assert_eq!(::std::mem::align_of::<nsStyleSVGPaint>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsStyleSVG { pub mFill: nsStyleSVGPaint, pub mStroke: nsStyleSVGPaint, @@ -4858,8 +5259,7 @@ pub struct nsStyleSVG { pub mStrokeLinecap: u8, pub mStrokeLinejoin: u8, pub mTextAnchor: u8, - pub _bitfield_1: u8, - pub _bitfield_2: u8, + pub _bitfield_1: u32, } #[test] fn bindgen_test_layout_nsStyleSVG() { @@ -4890,27 +5290,28 @@ fn bindgen_test_layout_nsStyleBasicShape() { assert_eq!(::std::mem::align_of::<nsStyleBasicShape>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsStyleClipPath { pub mType: i32, - pub nsStyleClipPath_nsStyleStruct_h_unnamed_19: nsStyleClipPath_nsStyleStruct_h_unnamed_19, + pub nsStyleClipPath_nsStyleStruct_h_unnamed_20: nsStyleClipPath_nsStyleStruct_h_unnamed_20, pub mSizingBox: u8, } #[repr(C)] -#[derive(Copy, Debug)] -pub struct nsStyleClipPath_nsStyleStruct_h_unnamed_19 { +#[derive(Debug, Copy)] +pub struct nsStyleClipPath_nsStyleStruct_h_unnamed_20 { pub mBasicShape: __BindgenUnionField<*mut nsStyleBasicShape>, pub mURL: __BindgenUnionField<*mut nsIURI>, pub _bindgen_data_: u64, } -impl nsStyleClipPath_nsStyleStruct_h_unnamed_19 { } -impl ::std::clone::Clone for nsStyleClipPath_nsStyleStruct_h_unnamed_19 { +impl nsStyleClipPath_nsStyleStruct_h_unnamed_20 { } +impl ::std::clone::Clone for nsStyleClipPath_nsStyleStruct_h_unnamed_20 { fn clone(&self) -> Self { *self } } #[test] -fn bindgen_test_layout_nsStyleClipPath_nsStyleStruct_h_unnamed_19() { - assert_eq!(::std::mem::size_of::<nsStyleClipPath_nsStyleStruct_h_unnamed_19>() +fn bindgen_test_layout_nsStyleClipPath_nsStyleStruct_h_unnamed_20() { + assert_eq!(::std::mem::size_of::<nsStyleClipPath_nsStyleStruct_h_unnamed_20>() , 8usize); - assert_eq!(::std::mem::align_of::<nsStyleClipPath_nsStyleStruct_h_unnamed_19>() + assert_eq!(::std::mem::align_of::<nsStyleClipPath_nsStyleStruct_h_unnamed_20>() , 8usize); } #[test] @@ -4919,27 +5320,28 @@ fn bindgen_test_layout_nsStyleClipPath() { assert_eq!(::std::mem::align_of::<nsStyleClipPath>() , 8usize); } #[repr(C)] +#[derive(Debug)] pub struct nsStyleFilter { pub mType: i32, pub mFilterParameter: nsStyleCoord, - pub nsStyleFilter_nsStyleStruct_h_unnamed_20: nsStyleFilter_nsStyleStruct_h_unnamed_20, + pub nsStyleFilter_nsStyleStruct_h_unnamed_21: nsStyleFilter_nsStyleStruct_h_unnamed_21, } #[repr(C)] -#[derive(Copy, Debug)] -pub struct nsStyleFilter_nsStyleStruct_h_unnamed_20 { +#[derive(Debug, Copy)] +pub struct nsStyleFilter_nsStyleStruct_h_unnamed_21 { pub mURL: __BindgenUnionField<*mut nsIURI>, pub mDropShadow: __BindgenUnionField<*mut nsCSSShadowArray>, pub _bindgen_data_: u64, } -impl nsStyleFilter_nsStyleStruct_h_unnamed_20 { } -impl ::std::clone::Clone for nsStyleFilter_nsStyleStruct_h_unnamed_20 { +impl nsStyleFilter_nsStyleStruct_h_unnamed_21 { } +impl ::std::clone::Clone for nsStyleFilter_nsStyleStruct_h_unnamed_21 { fn clone(&self) -> Self { *self } } #[test] -fn bindgen_test_layout_nsStyleFilter_nsStyleStruct_h_unnamed_20() { - assert_eq!(::std::mem::size_of::<nsStyleFilter_nsStyleStruct_h_unnamed_20>() +fn bindgen_test_layout_nsStyleFilter_nsStyleStruct_h_unnamed_21() { + assert_eq!(::std::mem::size_of::<nsStyleFilter_nsStyleStruct_h_unnamed_21>() , 8usize); - assert_eq!(::std::mem::align_of::<nsStyleFilter_nsStyleStruct_h_unnamed_20>() + assert_eq!(::std::mem::align_of::<nsStyleFilter_nsStyleStruct_h_unnamed_21>() , 8usize); } #[test] @@ -4968,7 +5370,7 @@ pub struct nsStyleSVGReset { } #[test] fn bindgen_test_layout_nsStyleSVGReset() { - assert_eq!(::std::mem::size_of::<nsStyleSVGReset>() , 216usize); + assert_eq!(::std::mem::size_of::<nsStyleSVGReset>() , 208usize); assert_eq!(::std::mem::align_of::<nsStyleSVGReset>() , 8usize); } #[repr(C)] diff --git a/ports/geckolib/properties.mako.rs b/ports/geckolib/properties.mako.rs index 77c8b2679c9..f3827bcc6c1 100644 --- a/ports/geckolib/properties.mako.rs +++ b/ports/geckolib/properties.mako.rs @@ -2,10 +2,15 @@ * 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/. */ -// STYLE_STRUCTS comes from components/style/properties.mako.rs; see build.rs for more details. +// `data` comes from components/style/properties.mako.rs; see build.rs for more details. + +<%! + from data import to_rust_ident + from data import Keyword +%> use app_units::Au; -% for style_struct in STYLE_STRUCTS: +% for style_struct in data.style_structs: %if style_struct.gecko_ffi_name: use gecko_style_structs::${style_struct.gecko_ffi_name}; use bindings::Gecko_Construct_${style_struct.gecko_ffi_name}; @@ -16,7 +21,7 @@ use bindings::Gecko_Destroy_${style_struct.gecko_ffi_name}; use gecko_style_structs; use heapsize::HeapSizeOf; use std::fmt::{self, Debug}; -use std::mem::zeroed; +use std::mem::{transmute, zeroed}; use std::sync::Arc; use style::custom_properties::ComputedValuesMap; use style::logical_geometry::WritingMode; @@ -27,7 +32,7 @@ use style::properties::style_struct_traits::*; #[derive(Clone)] pub struct GeckoComputedValues { - % for style_struct in STYLE_STRUCTS: + % for style_struct in data.style_structs: ${style_struct.ident}: Arc<${style_struct.gecko_struct_name}>, % endfor @@ -38,7 +43,7 @@ pub struct GeckoComputedValues { } impl ComputedValues for GeckoComputedValues { -% for style_struct in STYLE_STRUCTS: +% for style_struct in data.style_structs: type Concrete${style_struct.trait_name} = ${style_struct.gecko_struct_name}; % endfor @@ -50,7 +55,7 @@ impl ComputedValues for GeckoComputedValues { shareable: bool, writing_mode: WritingMode, root_font_size: Au, - % for style_struct in STYLE_STRUCTS: + % for style_struct in data.style_structs: ${style_struct.ident}: Arc<${style_struct.gecko_struct_name}>, % endfor ) -> Self { @@ -59,7 +64,7 @@ impl ComputedValues for GeckoComputedValues { shareable: shareable, writing_mode: writing_mode, root_font_size: root_font_size, - % for style_struct in STYLE_STRUCTS: + % for style_struct in data.style_structs: ${style_struct.ident}: ${style_struct.ident}, % endfor } @@ -71,7 +76,7 @@ impl ComputedValues for GeckoComputedValues { CASCADE_PROPERTY.with(|x| f(x)); } - % for style_struct in STYLE_STRUCTS: + % for style_struct in data.style_structs: #[inline] fn clone_${style_struct.trait_name_lower}(&self) -> Arc<Self::Concrete${style_struct.trait_name}> { self.${style_struct.ident}.clone() @@ -91,13 +96,13 @@ impl ComputedValues for GeckoComputedValues { fn set_root_font_size(&mut self, s: Au) { self.root_font_size = s; } fn set_writing_mode(&mut self, mode: WritingMode) { self.writing_mode = mode; } + // FIXME(bholley): Implement this properly. #[inline] - fn is_multicol(&self) -> bool { unimplemented!() } + fn is_multicol(&self) -> bool { false } } <%def name="declare_style_struct(style_struct)"> #[derive(Clone, HeapSizeOf, Debug)] -#[no_move] % if style_struct.gecko_ffi_name: pub struct ${style_struct.gecko_struct_name} { gecko: ${style_struct.gecko_ffi_name}, @@ -107,21 +112,82 @@ pub struct ${style_struct.gecko_struct_name}; % endif </%def> +<%def name="impl_simple_copy(ident, gecko_ffi_name)"> + fn copy_${ident}_from(&mut self, other: &Self) { + self.gecko.${gecko_ffi_name} = other.gecko.${gecko_ffi_name}; + } +</%def> + +<%! +def is_border_style_masked(ffi_name): + return ffi_name.split("[")[0] in ["mBorderStyle", "mOutlineStyle", "mTextDecorationStyle"] + +def get_gecko_property(ffi_name): + if is_border_style_masked(ffi_name): + return "(self.gecko.%s & (gecko_style_structs::BORDER_STYLE_MASK as u8))" % ffi_name + else: + return "self.gecko.%s" % ffi_name + +def set_gecko_property(ffi_name, expr): + if is_border_style_masked(ffi_name): + return "self.gecko.%s &= !(gecko_style_structs::BORDER_STYLE_MASK as u8);" % ffi_name + \ + "self.gecko.%s |= %s as u8;" % (ffi_name, expr) + else: + return "self.gecko.%s = %s;" % (ffi_name, expr) +%> + +<%def name="impl_keyword_setter(ident, gecko_ffi_name, keyword)"> + fn set_${ident}(&mut self, v: longhands::${ident}::computed_value::T) { + use gecko_style_structs as gss; + use style::properties::longhands::${ident}::computed_value::T as Keyword; + // FIXME(bholley): Align binary representations and ditch |match| for cast + static_asserts + let result = match v { + % for value in keyword.values_for('gecko'): + Keyword::${to_rust_ident(value)} => gss::${keyword.gecko_constant(value)} as u8, + % endfor + }; + ${set_gecko_property(gecko_ffi_name, "result")} + } +</%def> + +<%def name="impl_keyword_clone(ident, gecko_ffi_name, keyword)"> + fn clone_${ident}(&self) -> longhands::${ident}::computed_value::T { + use gecko_style_structs as gss; + use style::properties::longhands::${ident}::computed_value::T as Keyword; + // FIXME(bholley): Align binary representations and ditch |match| for cast + static_asserts + match ${get_gecko_property(gecko_ffi_name)} as u32 { + % for value in keyword.values_for('gecko'): + gss::${keyword.gecko_constant(value)} => Keyword::${to_rust_ident(value)}, + % endfor + x => panic!("Found unexpected value in style struct for ${ident} property: {}", x), + } + } +</%def> + +<%def name="impl_keyword(ident, gecko_ffi_name, keyword, need_clone)"> +<%call expr="impl_keyword_setter(ident, gecko_ffi_name, keyword)"></%call> +<%call expr="impl_simple_copy(ident, gecko_ffi_name)"></%call> +%if need_clone: +<%call expr="impl_keyword_clone(ident, gecko_ffi_name, keyword)"></%call> +% endif +</%def> + +<%def name="impl_app_units(ident, gecko_ffi_name, need_clone)"> + fn set_${ident}(&mut self, v: longhands::${ident}::computed_value::T) { + self.gecko.${gecko_ffi_name} = v.0; + } +<%call expr="impl_simple_copy(ident, gecko_ffi_name)"></%call> +%if need_clone: + fn clone_${ident}(&self) -> longhands::${ident}::computed_value::T { + Au(self.gecko.${gecko_ffi_name}) + } +% endif +</%def> + <%def name="impl_style_struct(style_struct)"> impl ${style_struct.gecko_struct_name} { #[allow(dead_code, unused_variables)] fn initial() -> Arc<Self> { - // Some Gecko style structs have AutoTArray members, which have internal pointers and are - // thus MOZ_NON_MEMMOVABLE. Since Rust is generally a very move-happy language, we need to - // be very careful that nsStyle* structs are never moved after they are constructed. - // - // By annotating the structs [no_move], we can get the |rust-tenacious| linter to trigger - // an error on any semantic moves. But we don't have a great way of telling LLVM to - // allocate our new object directly on the heap without using a temporary. So to do that - // (and also please tenacious), we pass zeroed memory into the Arc constructor, and _then_ - // use make_mut to get a reference to pass to the Gecko constructor. Since the refcount is - // guaranteed to be 1, make_mut will always pass us a direct reference instead of taking - // the copy-on-write path. let mut result = Arc::new(${style_struct.gecko_struct_name} { gecko: unsafe { zeroed() } }); unsafe { Gecko_Construct_${style_struct.gecko_ffi_name}(&mut Arc::make_mut(&mut result).gecko); @@ -152,6 +218,10 @@ impl HeapSizeOf for ${style_struct.gecko_ffi_name} { // Not entirely accurate, but good enough for now. fn heap_size_of_children(&self) -> usize { 0 } } + +// FIXME(bholley): Make bindgen generate Debug for all types. +%if style_struct.gecko_ffi_name in "nsStyleBorder nsStylePosition nsStyleDisplay nsStyleList nsStyleBackground "\ + "nsStyleFont nsStyleEffects nsStyleSVGReset".split(): impl Debug for ${style_struct.gecko_ffi_name} { // FIXME(bholley): Generate this. fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { @@ -159,12 +229,12 @@ impl Debug for ${style_struct.gecko_ffi_name} { } } %endif +%endif </%def> -<%def name="raw_impl_trait(style_struct, skip_longhands=None, skip_additionals=None)"> +<%def name="raw_impl_trait(style_struct, skip_longhands='', skip_additionals='')"> <% - longhands = [x for x in style_struct.longhands - if not (skip_longhands and x.name in skip_longhands)] + longhands = [x for x in style_struct.longhands if not x.name in skip_longhands.split()] # # Make a list of types we can't auto-generate. @@ -182,11 +252,6 @@ impl Debug for ${style_struct.gecko_ffi_name} { force_stub += ["box-sizing"] # Inconsistent constant naming in gecko force_stub += ["unicode-bidi", "text-transform"] - # Need to figure out why servo has sideways-left computed value and gecko doesn't - force_stub += ["text-orientation"] - # Automatic mapping generates NS_STYLE_TEXT_DECORATION_STYLE__MOZ_NONE instead of - # NS_STYLE_TEXT_DECORATION_STYLE__NONE - force_stub += ["text-decoration-style"] # These are booleans. force_stub += ["page-break-after", "page-break-before"] @@ -203,19 +268,7 @@ impl ${style_struct.trait_name} for ${style_struct.gecko_struct_name} { * Auto-Generated Methods. */ % for longhand in keyword_longhands: - fn set_${longhand.ident}(&mut self, v: longhands::${longhand.ident}::computed_value::T) { - use gecko_style_structs as gss; - use style::properties::longhands::${longhand.ident}::computed_value::T as Keyword; - // FIXME(bholley): Align binary representations and ditch |match| for cast + static_asserts - self.gecko.${longhand.gecko_ffi_name} = match v { - % for value in longhand.keyword.values_for('gecko'): - Keyword::${to_rust_ident(value)} => gss::${longhand.keyword.gecko_constant(value)} as u8, - % endfor - }; - } - fn copy_${longhand.ident}_from(&mut self, other: &Self) { - self.gecko.${longhand.gecko_ffi_name} = other.gecko.${longhand.gecko_ffi_name}; - } + <%call expr="impl_keyword(longhand.ident, longhand.gecko_ffi_name, longhand.keyword, longhand.need_clone)"></%call> % endfor /* @@ -223,64 +276,145 @@ impl ${style_struct.trait_name} for ${style_struct.gecko_struct_name} { */ % for longhand in stub_longhands: fn set_${longhand.ident}(&mut self, _: longhands::${longhand.ident}::computed_value::T) { - unimplemented!() + println!("stylo: Unimplemented property setter: ${longhand.name}"); } fn copy_${longhand.ident}_from(&mut self, _: &Self) { + println!("stylo: Unimplemented property setter: ${longhand.name}"); + } + % if longhand.need_clone: + fn clone_${longhand.ident}(&self) -> longhands::${longhand.ident}::computed_value::T { unimplemented!() } + % endif % endfor <% additionals = [x for x in style_struct.additional_methods - if not (skip_additionals and x.name in skip_additionals)] %> + if skip_additionals != "*" and not x.name in skip_additionals.split()] %> % for additional in additionals: ${additional.stub()} % endfor } </%def> -<%! MANUAL_STYLE_STRUCTS = [] %> -<%def name="impl_trait(style_struct_name, skip_longhands=None, skip_additionals=None)"> -<%self:raw_impl_trait style_struct="${next(x for x in STYLE_STRUCTS if x.trait_name == style_struct_name)}" +<% data.manual_style_structs = [] %> +<%def name="impl_trait(style_struct_name, skip_longhands='', skip_additionals='')"> +<%self:raw_impl_trait style_struct="${next(x for x in data.style_structs if x.trait_name == style_struct_name)}" skip_longhands="${skip_longhands}" skip_additionals="${skip_additionals}"> ${caller.body()} </%self:raw_impl_trait> -<% MANUAL_STYLE_STRUCTS.append(style_struct_name) %> +<% data.manual_style_structs.append(style_struct_name) %> </%def> -// Proof-of-concept for a style struct with some manually-implemented methods. We add -// the manually-implemented methods to skip_longhands and skip_additionals, and the -// infrastructure auto-generates everything not in those lists. This allows us to -// iteratively implement more and more methods. -<%self:impl_trait style_struct_name="Border" - skip_longhands="${['border-left-color', 'border-left-style']}" - skip_additionals="${['border_bottom_is_none_or_hidden_and_has_nonzero_width']}"> - fn set_border_left_color(&mut self, _: longhands::border_left_color::computed_value::T) { - unimplemented!() +<%! +class Side(object): + def __init__(self, name, index): + self.name = name + self.ident = name.lower() + self.index = index + +SIDES = [Side("Top", 0), Side("Right", 1), Side("Bottom", 2), Side("Left", 3)] + +%> + +#[allow(dead_code)] +fn static_assert() { + unsafe { + % for side in SIDES: + transmute::<_, [u32; ${side.index}]>([1; gecko_style_structs::Side::eSide${side.name} as usize]); + % endfor } - fn copy_border_left_color_from(&mut self, _: &Self) { - unimplemented!() +} + +<% border_style_keyword = Keyword("border-style", + "none solid double dotted dashed hidden groove ridge inset outset") %> + +<% +skip_border_longhands = "" +for side in SIDES: + skip_border_longhands += "border-{0}-style border-{0}-width ".format(side.ident) +%> + +<%self:impl_trait style_struct_name="Border" + skip_longhands="${skip_border_longhands}" + skip_additionals="*"> + + % for side in SIDES: + <% impl_keyword("border_%s_style" % side.ident, "mBorderStyle[%s]" % side.index, border_style_keyword, + need_clone=True) %> + + <% impl_app_units("border_%s_width" % side.ident, "mComputedBorder.%s" % side.ident, need_clone=False) %> + + fn border_${side.ident}_has_nonzero_width(&self) -> bool { + self.gecko.mComputedBorder.${side.ident} != 0 } - fn set_border_left_style(&mut self, _: longhands::border_left_style::computed_value::T) { - unimplemented!() + % endfor +</%self:impl_trait> + +<%self:impl_trait style_struct_name="Outline" + skip_longhands="outline-style" + skip_additionals="*"> + + <% impl_keyword("outline_style", "mOutlineStyle", border_style_keyword, need_clone=True) %> + + fn outline_has_nonzero_width(&self) -> bool { + self.gecko.mCachedOutlineWidth != 0 } - fn copy_border_left_style_from(&mut self, _: &Self) { - unimplemented!() +</%self:impl_trait> + +<%self:impl_trait style_struct_name="Font" skip_longhands="font-size"> + + // FIXME(bholley): This doesn't handle zooming properly. + <% impl_app_units("font_size", "mSize", need_clone=True) %> +</%self:impl_trait> + +<%self:impl_trait style_struct_name="Box" skip_longhands="display overflow-y"> + + // We manually-implement the |display| property until we get general + // infrastructure for preffing certain values. + <% display_keyword = Keyword("display", "inline block inline-block table inline-table table-row-group " + + "table-header-group table-footer-group table-row table-column-group " + + "table-column table-cell table-caption list-item flex none") %> + <%call expr="impl_keyword('display', 'mDisplay', display_keyword, True)"></%call> + + // overflow-y is implemented as a newtype of overflow-x, so we need special handling. + // We could generalize this if we run into other newtype keywords. + <% overflow_x = data.longhands_by_name["overflow-x"] %> + fn set_overflow_y(&mut self, v: longhands::overflow_y::computed_value::T) { + use gecko_style_structs as gss; + use style::properties::longhands::overflow_x::computed_value::T as BaseType; + // FIXME(bholley): Align binary representations and ditch |match| for cast + static_asserts + self.gecko.mOverflowY = match v.0 { + % for value in overflow_x.keyword.values_for('gecko'): + BaseType::${to_rust_ident(value)} => gss::${overflow_x.keyword.gecko_constant(value)} as u8, + % endfor + }; } - fn border_bottom_is_none_or_hidden_and_has_nonzero_width(&self) -> bool { - unimplemented!() + <%call expr="impl_simple_copy('overflow_y', 'mOverflowY')"></%call> + fn clone_overflow_y(&self) -> longhands::overflow_y::computed_value::T { + use gecko_style_structs as gss; + use style::properties::longhands::overflow_x::computed_value::T as BaseType; + use style::properties::longhands::overflow_y::computed_value::T as NewType; + // FIXME(bholley): Align binary representations and ditch |match| for cast + static_asserts + match self.gecko.mOverflowY as u32 { + % for value in overflow_x.keyword.values_for('gecko'): + gss::${overflow_x.keyword.gecko_constant(value)} => NewType(BaseType::${to_rust_ident(value)}), + % endfor + x => panic!("Found unexpected value in style struct for overflow_y property: {}", x), + } } + </%self:impl_trait> -% for style_struct in STYLE_STRUCTS: +% for style_struct in data.style_structs: ${declare_style_struct(style_struct)} ${impl_style_struct(style_struct)} -% if not style_struct.trait_name in MANUAL_STYLE_STRUCTS: +% if not style_struct.trait_name in data.manual_style_structs: <%self:raw_impl_trait style_struct="${style_struct}"></%self:raw_impl_trait> % endif % endfor lazy_static! { pub static ref INITIAL_GECKO_VALUES: GeckoComputedValues = GeckoComputedValues { - % for style_struct in STYLE_STRUCTS: + % for style_struct in data.style_structs: ${style_struct.ident}: ${style_struct.gecko_struct_name}::initial(), % endfor custom_properties: None, diff --git a/ports/geckolib/tools/regen_style_structs.sh b/ports/geckolib/tools/regen_style_structs.sh index d4f3b822415..a00f8df9750 100755 --- a/ports/geckolib/tools/regen_style_structs.sh +++ b/ports/geckolib/tools/regen_style_structs.sh @@ -109,12 +109,14 @@ fi -match "nsIPrincipal.h" \ -match "nsDataHashtable.h" \ -match "nsCSSScanner.h" \ + -match "Types.h" \ -blacklist-type "IsDestructibleFallbackImpl" \ -blacklist-type "IsDestructibleFallback" \ -opaque-type "nsIntMargin" \ -opaque-type "nsIntPoint" \ -opaque-type "nsIntRect" \ -opaque-type "nsTArray" \ + -opaque-type "nsStyleAutoArray" \ -opaque-type "nsCOMArray" \ -opaque-type "nsDependentString" \ -opaque-type "EntryStore" \ diff --git a/ports/glutin/Cargo.toml b/ports/glutin/Cargo.toml index c292f105a0c..a905811d233 100644 --- a/ports/glutin/Cargo.toml +++ b/ports/glutin/Cargo.toml @@ -9,7 +9,7 @@ path = "lib.rs" [dependencies] bitflags = "0.4" -url = {version = "0.5.7", features = ["heap_size"]} +url = {version = "1.0.0", features = ["heap_size"]} gleam = "0.2.8" euclid = {version = "0.6.4", features = ["plugins"]} servo-glutin = "0.4" @@ -48,8 +48,5 @@ x11 = "2.0.0" [target.aarch64-unknown-linux-gnu.dependencies] x11 = "2.0.0" -[target.x86_64-apple-darwin.dependencies] -cgl = "0.1" - [target.arm-linux-androideabi.dependencies] servo-egl = "0.2" diff --git a/ports/glutin/lib.rs b/ports/glutin/lib.rs index d8c6a41ce5b..5c984fbc691 100644 --- a/ports/glutin/lib.rs +++ b/ports/glutin/lib.rs @@ -7,8 +7,8 @@ #![feature(box_syntax)] #[macro_use] extern crate bitflags; -#[cfg(target_os = "macos")] extern crate cgl; extern crate compositing; +#[allow(unused_extern_crates)] #[cfg(target_os = "android")] extern crate egl; extern crate euclid; extern crate gleam; diff --git a/ports/glutin/window.rs b/ports/glutin/window.rs index e691191f3dd..1a130a43d2c 100644 --- a/ports/glutin/window.rs +++ b/ports/glutin/window.rs @@ -22,13 +22,16 @@ use msg::constellation_msg::{self, Key}; use net_traits::net_error_list::NetError; use script_traits::{TouchEventType, TouchpadPressurePhase}; use std::cell::{Cell, RefCell}; +#[cfg(not(target_os = "android"))] use std::os::raw::c_void; use std::rc::Rc; use std::sync::mpsc::{channel, Sender}; use style_traits::cursor::Cursor; use url::Url; use util::geometry::ScreenPx; -use util::opts::{self, RenderApi}; +use util::opts; +#[cfg(not(target_os = "android"))] +use util::opts::RenderApi; static mut g_nested_event_loop_listener: Option<*mut (NestedEventLoopListener + 'static)> = None; diff --git a/ports/gonk/Cargo.lock b/ports/gonk/Cargo.lock index 614fa5f1c4b..c6b6564497d 100644 --- a/ports/gonk/Cargo.lock +++ b/ports/gonk/Cargo.lock @@ -6,7 +6,7 @@ dependencies = [ "devtools 0.0.1", "env_logger 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "errno 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gfx 0.0.1", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "layers 0.2.4 (git+https://github.com/servo/rust-layers)", @@ -21,7 +21,7 @@ dependencies = [ "servo-egl 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "style_traits 0.0.1", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", ] @@ -51,10 +51,10 @@ name = "app_units" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -81,7 +81,7 @@ dependencies = [ "core-foundation 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "core-graphics 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "core-text 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "freetype 0.1.0 (git+https://github.com/servo/rust-freetype)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -100,8 +100,8 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -141,13 +141,12 @@ version = "0.0.1" dependencies = [ "azure 0.4.3 (git+https://github.com/servo/rust-azure)", "canvas_traits 0.0.1", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gfx_traits 0.0.1", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", - "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "offscreen_gl_context 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", "util 0.0.1", @@ -160,16 +159,14 @@ version = "0.0.1" dependencies = [ "azure 0.4.3 (git+https://github.com/servo/rust-azure)", "cssparser 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gfx_traits 0.0.1", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", - "offscreen_gl_context 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "util 0.0.1", "webrender_traits 0.1.0 (git+https://github.com/servo/webrender_traits)", ] @@ -251,10 +248,8 @@ dependencies = [ "canvas 0.0.1", "canvas_traits 0.0.1", "clipboard 0.1.2 (git+https://github.com/aweinstock314/rust-clipboard)", - "core-graphics 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "core-text 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "devtools_traits 0.0.1", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gaol 0.0.1 (git+https://github.com/servo/gaol)", "gfx 0.0.1", "gfx_traits 0.0.1", @@ -266,7 +261,7 @@ dependencies = [ "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "net_traits 0.0.1", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "offscreen_gl_context 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", "profile_traits 0.0.1", @@ -276,7 +271,7 @@ dependencies = [ "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "style_traits 0.0.1", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", "webrender 0.1.0 (git+https://github.com/servo/webrender)", "webrender_traits 0.1.0 (git+https://github.com/servo/webrender_traits)", @@ -284,13 +279,13 @@ dependencies = [ [[package]] name = "cookie" -version = "0.2.2" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "openssl 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -369,9 +364,8 @@ name = "devtools" version = "0.0.1" dependencies = [ "devtools_traits 0.0.1", - "hyper 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "plugins 0.0.1", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -388,15 +382,14 @@ dependencies = [ "bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "msg 0.0.1", "plugins 0.0.1", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", - "util 0.0.1", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -486,7 +479,7 @@ name = "enum_primitive" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -510,14 +503,14 @@ dependencies = [ [[package]] name = "euclid" -version = "0.6.5" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -610,7 +603,7 @@ dependencies = [ "core-foundation 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "core-graphics 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "core-text 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "freetype 0.1.0 (git+https://github.com/servo/rust-freetype)", "gfx_traits 0.0.1", @@ -629,7 +622,7 @@ dependencies = [ "profile_traits 0.0.1", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "range 0.0.1", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "servo-fontconfig 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -641,7 +634,7 @@ dependencies = [ "style_traits 0.0.1", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-script 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", "webrender_traits 0.1.0 (git+https://github.com/servo/webrender_traits)", ] @@ -651,7 +644,7 @@ name = "gfx_traits" version = "0.0.1" dependencies = [ "azure 0.4.3 (git+https://github.com/servo/rust-azure)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "layers 0.2.4 (git+https://github.com/servo/rust-layers)", @@ -659,7 +652,6 @@ dependencies = [ "plugins 0.0.1", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "util 0.0.1", ] [[package]] @@ -781,7 +773,7 @@ dependencies = [ "mac 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "phf 0.7.13 (registry+https://github.com/rust-lang/crates.io-index)", "phf_codegen 0.7.13 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", "tendril 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", @@ -794,24 +786,34 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "hyper" -version = "0.8.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cookie 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "cookie 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "httparse 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "language-tags 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "mime 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "openssl 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "solicit 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", "traitobject 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "unicase 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "idna" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-bidi 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-normalization 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -824,7 +826,7 @@ dependencies = [ "gif 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "glob 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "jpeg-decoder 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "png 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -835,7 +837,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "arrayvec 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -850,7 +852,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cgl 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "core-foundation 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "leaky-cow 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -877,22 +879,22 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "rayon 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "js" version = "0.1.2" -source = "git+https://github.com/servo/rust-mozjs#6f1eb4ea7a84714bfab2806440c9fc8a9a261409" +source = "git+https://github.com/servo/rust-mozjs#efe805affa75d776316e9ea6113f85cdad1e82ed" dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "mozjs_sys 0.0.0 (git+https://github.com/servo/mozjs)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -922,7 +924,7 @@ dependencies = [ "azure 0.4.3 (git+https://github.com/servo/rust-azure)", "cgl 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "core-foundation 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "glx 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -930,7 +932,7 @@ dependencies = [ "io-surface 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "servo-egl 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "servo-skia 0.20130412.6 (registry+https://github.com/rust-lang/crates.io-index)", "x11 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -945,7 +947,7 @@ dependencies = [ "bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "canvas_traits 0.0.1", "cssparser 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "gfx 0.0.1", "gfx_traits 0.0.1", @@ -960,11 +962,10 @@ dependencies = [ "plugins 0.0.1", "profile_traits 0.0.1", "range 0.0.1", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "script 0.0.1", "script_traits 0.0.1", "selectors 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -974,7 +975,7 @@ dependencies = [ "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-bidi 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-script 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", "webrender_traits 0.1.0 (git+https://github.com/servo/webrender_traits)", ] @@ -991,7 +992,7 @@ dependencies = [ "script_traits 0.0.1", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", "webrender_traits 0.1.0 (git+https://github.com/servo/webrender_traits)", ] @@ -1145,17 +1146,17 @@ version = "0.0.1" dependencies = [ "bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "cssparser 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "plugins 0.0.1", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", "webrender_traits 0.1.0 (git+https://github.com/servo/webrender_traits)", ] @@ -1165,29 +1166,30 @@ name = "net" version = "0.0.1" dependencies = [ "brotli 0.3.20 (git+https://github.com/ende76/brotli-rs)", - "cookie 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "cookie 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "devtools_traits 0.0.1", "flate2 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "immeta 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "mime 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "mime_guess 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "net_traits 0.0.1", "openssl 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "threadpool 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", "tinyfiledialogs 0.1.0 (git+https://github.com/jdm/tinyfiledialogs)", "unicase 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", "uuid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "webrender_traits 0.1.0 (git+https://github.com/servo/webrender_traits)", - "websocket 0.16.2 (registry+https://github.com/rust-lang/crates.io-index)", + "websocket 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1208,7 +1210,7 @@ version = "0.0.1" dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "image 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1217,9 +1219,9 @@ dependencies = [ "plugins 0.0.1", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", - "websocket 0.16.2 (registry+https://github.com/rust-lang/crates.io-index)", + "websocket 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1232,14 +1234,71 @@ dependencies = [ [[package]] name = "num" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ + "num-bigint 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-complex 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-iter 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-rational 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-bigint" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-integer 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] +name = "num-complex" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-integer" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-iter" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-integer 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-rational" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-bigint 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-traits" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] name = "num_cpus" version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1287,7 +1346,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cgl 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "core-foundation 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gl_generator 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "khronos_api 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1410,7 +1469,7 @@ dependencies = [ "flate2 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "inflate 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1466,7 +1525,7 @@ name = "quickersort" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "unreachable 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1484,8 +1543,8 @@ version = "0.0.1" dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1528,7 +1587,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "rustc-serialize" -version = "0.3.16" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1560,13 +1619,13 @@ dependencies = [ "cssparser 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "devtools_traits 0.0.1", "encoding 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "gfx_traits 0.0.1", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "html5ever 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "image 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "js 0.1.2 (git+https://github.com/servo/rust-mozjs)", @@ -1574,7 +1633,7 @@ dependencies = [ "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "net_traits 0.0.1", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "offscreen_gl_context 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "phf 0.7.13 (registry+https://github.com/rust-lang/crates.io-index)", "phf_macros 0.7.13 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1585,7 +1644,7 @@ dependencies = [ "ref_filter_map 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "ref_slice 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "regex 0.1.55 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "script_traits 0.0.1", "selectors 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1594,11 +1653,11 @@ dependencies = [ "style 0.0.1", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", "unicase 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", "uuid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "webrender_traits 0.1.0 (git+https://github.com/servo/webrender_traits)", - "websocket 0.16.2 (registry+https://github.com/rust-lang/crates.io-index)", + "websocket 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", "xml5ever 0.1.1 (git+https://github.com/Ygg01/xml5ever)", ] @@ -1609,7 +1668,7 @@ dependencies = [ "app_units 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "canvas_traits 0.0.1", "devtools_traits 0.0.1", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gfx_traits 0.0.1", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1624,7 +1683,7 @@ dependencies = [ "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "style_traits 0.0.1", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", ] @@ -1669,7 +1728,7 @@ name = "serde_json" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1693,7 +1752,7 @@ dependencies = [ "devtools 0.0.1", "devtools_traits 0.0.1", "env_logger 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gaol 0.0.1 (git+https://github.com/servo/gaol)", "gfx 0.0.1", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1705,13 +1764,12 @@ dependencies = [ "msg 0.0.1", "net 0.0.1", "net_traits 0.0.1", - "offscreen_gl_context 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "profile 0.0.1", "profile_traits 0.0.1", "script 0.0.1", "script_traits 0.0.1", "style 0.0.1", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", "webrender 0.1.0 (git+https://github.com/servo/webrender)", "webrender_traits 0.1.0 (git+https://github.com/servo/webrender_traits)", @@ -1786,7 +1844,7 @@ version = "0.20130412.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cgl 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "expat-sys 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "glx 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1858,16 +1916,16 @@ dependencies = [ "bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "cssparser 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "encoding 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "selectors 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1875,7 +1933,7 @@ dependencies = [ "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", "style_traits 0.0.1", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", ] @@ -1884,18 +1942,17 @@ name = "style_traits" version = "0.0.1" dependencies = [ "cssparser 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "selectors 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", ] @@ -1954,6 +2011,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2014,18 +2072,16 @@ dependencies = [ [[package]] name = "url" -version = "0.5.9" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "encoding 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "idna 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-bidi 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-normalization 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "uuid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2057,7 +2113,7 @@ dependencies = [ "app_units 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "deque 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "getopts 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2070,12 +2126,12 @@ dependencies = [ "num_cpus 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2145,20 +2201,20 @@ dependencies = [ [[package]] name = "webrender" version = "0.1.0" -source = "git+https://github.com/servo/webrender#46dd3f0ffe2e3a650171fd651b522ed072ccf799" +source = "git+https://github.com/servo/webrender#8d778dac5398cadd093136bc9cf0afbbb61a2b52" dependencies = [ "app_units 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "core-graphics 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "core-text 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "freetype 0.1.0 (git+https://github.com/servo/rust-freetype)", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "offscreen_gl_context 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "scoped_threadpool 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2168,12 +2224,12 @@ dependencies = [ [[package]] name = "webrender_traits" version = "0.1.0" -source = "git+https://github.com/servo/webrender_traits#69125172bcea93fd79be48d846eae63d50ddc8ea" +source = "git+https://github.com/servo/webrender_traits#d1a3bb53f87891bbba8576d05260caee147dc5d8" dependencies = [ "app_units 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "core-graphics 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "offscreen_gl_context 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2183,18 +2239,18 @@ dependencies = [ [[package]] name = "websocket" -version = "0.16.2" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "net2 0.2.19 (registry+https://github.com/rust-lang/crates.io-index)", "openssl 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "unicase 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2253,13 +2309,13 @@ dependencies = [ [[package]] name = "xml5ever" version = "0.1.1" -source = "git+https://github.com/Ygg01/xml5ever#4900bbadef28c940a0cd73dc735d53709a2845c7" +source = "git+https://github.com/Ygg01/xml5ever#a51a6df18f384ecfb0a99b288c267178cf68f7f7" dependencies = [ "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "mac 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "phf 0.7.13 (registry+https://github.com/rust-lang/crates.io-index)", "phf_codegen 0.7.13 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", "tendril 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/ports/gonk/Cargo.toml b/ports/gonk/Cargo.toml index 557dcfe2798..d035a085881 100644 --- a/ports/gonk/Cargo.toml +++ b/ports/gonk/Cargo.toml @@ -49,7 +49,7 @@ features = ["non-geckolib"] [dependencies] env_logger = "0.3" -url = {version = "0.5.7", features = ["heap_size"]} +url = {version = "1.0.0", features = ["heap_size"]} time = "0.1.17" errno = "0.1" libc = "0.2" diff --git a/python/servo/build_commands.py b/python/servo/build_commands.py index 00aae38cf78..31d8d1ded39 100644 --- a/python/servo/build_commands.py +++ b/python/servo/build_commands.py @@ -230,6 +230,8 @@ class MachCommands(CommandBase): if not (self.config["build"]["ccache"] == ""): env['CCACHE'] = self.config["build"]["ccache"] + env['RUSTFLAGS'] = env.get('RUSTFLAGS', "") + " -W unused-extern-crates" + status = call( ["cargo", "build"] + opts, env=env, cwd=self.servo_crate(), verbose=verbose) diff --git a/python/servo/devenv_commands.py b/python/servo/devenv_commands.py index 4ad07477f3f..95bb2d054a9 100644 --- a/python/servo/devenv_commands.py +++ b/python/servo/devenv_commands.py @@ -152,11 +152,17 @@ class MachCommands(CommandBase): code = call(["git", "init"], env=self.build_env()) if code: return code - call( + code = call( ["git", "remote", "add", "upstream", "https://github.com/w3c/wptrunner.git"], env=self.build_env()) + if code: + return code code = call(["git", "fetch", "upstream"], env=self.build_env()) if code: return code - code = call(["git", "reset", '--', "hard", "remotes/upstream/master"], env=self.build_env()) + code = call(["git", "reset", "--hard", "remotes/upstream/master"], env=self.build_env()) + if code: + return code + code = call(["rm", "-rf", ".git"], env=self.build_env()) if code: return code + return 0 diff --git a/python/servo/testing_commands.py b/python/servo/testing_commands.py index 66a2da5be3e..f0eccee59af 100644 --- a/python/servo/testing_commands.py +++ b/python/servo/testing_commands.py @@ -141,20 +141,7 @@ class MachCommands(CommandBase): @CommandArgument('test_name', nargs=argparse.REMAINDER, help="Only run tests that match this pattern or file path") def test_unit(self, test_name=None, package=None): - subprocess.check_output([ - sys.executable, - path.join(self.context.topdir, "components", "style", "list_properties.py") - ]) - - this_file = os.path.dirname(__file__) - servo_doc_path = os.path.abspath(os.path.join(this_file, '../', '../', 'target', 'doc', 'servo')) - - with open(os.path.join(servo_doc_path, 'css-properties.json'), 'r') as property_file: - properties = json.loads(property_file.read()) - - assert len(properties) >= 100 - assert "margin-top" in properties - assert "margin" in properties + check_css_properties_json(self.context.topdir) if test_name is None: test_name = [] @@ -670,3 +657,23 @@ testing/web-platform/mozilla/tests for Servo-only tests""" % reference_path) if editor: proc.wait() + + +def check_css_properties_json(topdir): + print("Testing generation of css-properties.json...") + filename = path.join(topdir, "target", "doc", "servo", "css-properties.json") + + if path.exists(filename): + os.remove(filename) + subprocess.check_call([ + sys.executable, + path.join(topdir, "components", "style", "properties", "build.py"), + "servo", + "html", + ]) + properties = json.load(open(filename)) + + assert len(properties) >= 100 + assert "margin-top" in properties + assert "margin" in properties + print("OK") diff --git a/python/tidy/servo_tidy/licenseck.py b/python/tidy/servo_tidy/licenseck.py index 705faf8bcb6..a67713b4421 100644 --- a/python/tidy/servo_tidy/licenseck.py +++ b/python/tidy/servo_tidy/licenseck.py @@ -59,4 +59,15 @@ licenses = [ # except according to those terms. """, +"""\ +// Copyright 2015 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. +""" ] # noqa: Indicate to flake8 that we do not want to check indentation here diff --git a/python/tidy/servo_tidy/tidy.py b/python/tidy/servo_tidy/tidy.py index 206346675e2..6ddb72d416f 100644 --- a/python/tidy/servo_tidy/tidy.py +++ b/python/tidy/servo_tidy/tidy.py @@ -133,6 +133,14 @@ def check_license(file_name, lines): yield (1, "incorrect license") +def check_modeline(file_name, lines): + for idx, line in enumerate(lines[:5]): + if re.search('^.*[ \t](vi:|vim:|ex:)[ \t]', line): + yield (idx + 1, "vi modeline present") + elif re.search('-\*-.*-\*-', line, re.IGNORECASE): + yield (idx + 1, "emacs file variables present") + + def check_length(file_name, idx, line): if file_name.endswith(".lock") or file_name.endswith(".json"): raise StopIteration @@ -277,7 +285,7 @@ def check_toml(file_name, lines): def check_rust(file_name, lines): if not file_name.endswith(".rs") or \ - file_name.endswith("properties.mako.rs") or \ + file_name.endswith(".mako.rs") or \ file_name.endswith(os.path.join("style", "build.rs")) or \ file_name.endswith(os.path.join("geckolib", "build.rs")) or \ file_name.endswith(os.path.join("unit", "style", "stylesheets.rs")): @@ -378,6 +386,7 @@ def check_rust(file_name, lines): (r": &Vec<", "use &[T] instead of &Vec<T>", no_filter), # No benefit over using &str (r": &String", "use &str instead of &String", no_filter), + (r"^&&", "operators should go at the end of the first line", no_filter), ] for pattern, message, filter_func in regex_rules: @@ -568,11 +577,12 @@ def check_spec(file_name, lines): brace_count -= 1 -def collect_errors_for_files(files_to_check, checking_functions, line_checking_functions): +def collect_errors_for_files(files_to_check, checking_functions, line_checking_functions, print_text=True): (has_element, files_to_check) = is_iter_empty(files_to_check) if not has_element: raise StopIteration - print '\rChecking files for tidiness...' + if print_text: + print '\rChecking files for tidiness...' for filename in files_to_check: with open(filename, "r") as f: contents = f.read() @@ -638,7 +648,7 @@ def scan(faster=False, progress=True): # standard checks files_to_check = filter_files('.', faster, progress) checking_functions = (check_flake8, check_lock, check_webidl_spec, check_json) - line_checking_functions = (check_license, check_by_line, check_toml, check_rust, check_spec) + line_checking_functions = (check_license, check_by_line, check_toml, check_rust, check_spec, check_modeline) errors = collect_errors_for_files(files_to_check, checking_functions, line_checking_functions) # wpt lint checks wpt_lint_errors = check_wpt_lint_errors(get_wpt_files(faster, progress)) @@ -647,6 +657,7 @@ def scan(faster=False, progress=True): error = None for error in errors: print "\r\033[94m{}\033[0m:\033[93m{}\033[0m: \033[91m{}\033[0m".format(*error) + print if error is None: - print "\n\033[92mtidy reported no errors.\033[0m" + print "\033[92mtidy reported no errors.\033[0m" return int(error is not None) diff --git a/python/tidy/servo_tidy_tests/duplicated_package.lock b/python/tidy/servo_tidy_tests/duplicated_package.lock new file mode 100644 index 00000000000..77777fdd82c --- /dev/null +++ b/python/tidy/servo_tidy_tests/duplicated_package.lock @@ -0,0 +1,21 @@ +[root] +name = "servo" +version = "0.0.1" + +[[package]] +name = "test" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "test" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "test2" +version = "0.1.0" +source = "git+https://github.com/" +dependencies = [ + "test 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", +] diff --git a/python/tidy/servo_tidy_tests/modeline.txt b/python/tidy/servo_tidy_tests/modeline.txt new file mode 100644 index 00000000000..2a3416953ce --- /dev/null +++ b/python/tidy/servo_tidy_tests/modeline.txt @@ -0,0 +1,5 @@ +# vim: set noexpandtab: +// vi: et: +/* ex: et: +anything -*-Lisp-*- + -*- mode: Lisp -*- diff --git a/python/tidy/servo_tidy_tests/rust_tidy.rs b/python/tidy/servo_tidy_tests/rust_tidy.rs index 680b527f679..580f9e2ea96 100644 --- a/python/tidy/servo_tidy_tests/rust_tidy.rs +++ b/python/tidy/servo_tidy_tests/rust_tidy.rs @@ -32,6 +32,9 @@ impl test { } fn test_fun2(y : &String, z : &Vec<f32>) -> f32 { - 1 + let x = true; + x + && x; } + } diff --git a/python/tidy/servo_tidy_tests/test_tidy.py b/python/tidy/servo_tidy_tests/test_tidy.py index 031e0873a56..fca54fd66d9 100644 --- a/python/tidy/servo_tidy_tests/test_tidy.py +++ b/python/tidy/servo_tidy_tests/test_tidy.py @@ -19,28 +19,37 @@ def iterFile(name): class CheckTidiness(unittest.TestCase): + def assertNoMoreErrors(self, errors): + with self.assertRaises(StopIteration): + errors.next() + def test_spaces_correctnes(self): - errors = tidy.collect_errors_for_files(iterFile('wrong_space.rs'), [], [tidy.check_by_line]) + errors = tidy.collect_errors_for_files(iterFile('wrong_space.rs'), [], [tidy.check_by_line], print_text=False) self.assertEqual('trailing whitespace', errors.next()[2]) self.assertEqual('no newline at EOF', errors.next()[2]) self.assertEqual('tab on line', errors.next()[2]) self.assertEqual('CR on line', errors.next()[2]) + self.assertEqual('no newline at EOF', errors.next()[2]) + self.assertNoMoreErrors(errors) def test_long_line(self): - errors = tidy.collect_errors_for_files(iterFile('long_line.rs'), [], [tidy.check_by_line]) + errors = tidy.collect_errors_for_files(iterFile('long_line.rs'), [], [tidy.check_by_line], print_text=False) self.assertEqual('Line is longer than 120 characters', errors.next()[2]) + self.assertNoMoreErrors(errors) def test_whatwg_link(self): - errors = tidy.collect_errors_for_files(iterFile('whatwg_link.rs'), [], [tidy.check_by_line]) + errors = tidy.collect_errors_for_files(iterFile('whatwg_link.rs'), [], [tidy.check_by_line], print_text=False) self.assertTrue('link to WHATWG may break in the future, use this format instead:' in errors.next()[2]) self.assertTrue('links to WHATWG single-page url, change to multi page:' in errors.next()[2]) + self.assertNoMoreErrors(errors) def test_licence(self): - errors = tidy.collect_errors_for_files(iterFile('incorrect_license.rs'), [], [tidy.check_license]) + errors = tidy.collect_errors_for_files(iterFile('incorrect_license.rs'), [], [tidy.check_license], print_text=False) self.assertEqual('incorrect license', errors.next()[2]) + self.assertNoMoreErrors(errors) def test_rust(self): - errors = tidy.collect_errors_for_files(iterFile('rust_tidy.rs'), [], [tidy.check_rust]) + errors = tidy.collect_errors_for_files(iterFile('rust_tidy.rs'), [], [tidy.check_rust], print_text=False) self.assertEqual('use statement spans multiple lines', errors.next()[2]) self.assertEqual('missing space before }', errors.next()[2]) self.assertTrue('use statement is not in alphabetical order' in errors.next()[2]) @@ -61,19 +70,44 @@ class CheckTidiness(unittest.TestCase): self.assertEqual('extra space before :', errors.next()[2]) self.assertEqual('use &[T] instead of &Vec<T>', errors.next()[2]) self.assertEqual('use &str instead of &String', errors.next()[2]) + self.assertEqual('operators should go at the end of the first line', errors.next()[2]) + self.assertNoMoreErrors(errors) def test_spec_link(self): tidy.spec_base_path = base_path - errors = tidy.collect_errors_for_files(iterFile('speclink.rs'), [], [tidy.check_spec]) + errors = tidy.collect_errors_for_files(iterFile('speclink.rs'), [], [tidy.check_spec], print_text=False) self.assertEqual('method declared in webidl is missing a comment with a specification link', errors.next()[2]) + self.assertNoMoreErrors(errors) def test_webidl(self): - errors = tidy.collect_errors_for_files(iterFile('spec.webidl'), [tidy.check_webidl_spec], []) + errors = tidy.collect_errors_for_files(iterFile('spec.webidl'), [tidy.check_webidl_spec], [], print_text=False) self.assertEqual('No specification link found.', errors.next()[2]) + self.assertNoMoreErrors(errors) def test_toml(self): - errors = tidy.collect_errors_for_files(iterFile('test.toml'), [tidy.check_toml], []) + errors = tidy.collect_errors_for_files(iterFile('test.toml'), [tidy.check_toml], [], print_text=False) self.assertEqual('found asterisk instead of minimum version number', errors.next()[2]) + self.assertNoMoreErrors(errors) + + def test_modeline(self): + errors = tidy.collect_errors_for_files(iterFile('modeline.txt'), [], [tidy.check_modeline], print_text=False) + self.assertEqual('vi modeline present', errors.next()[2]) + self.assertEqual('vi modeline present', errors.next()[2]) + self.assertEqual('vi modeline present', errors.next()[2]) + self.assertEqual('emacs file variables present', errors.next()[2]) + self.assertEqual('emacs file variables present', errors.next()[2]) + self.assertNoMoreErrors(errors) + + def test_lock(self): + errors = tidy.collect_errors_for_files(iterFile('duplicated_package.lock'), [tidy.check_lock], [], print_text=False) + msg = """duplicate versions for package "test" +\t\033[93mfound dependency on version 0.4.9\033[0m +\t\033[91mbut highest version is 0.5.1\033[0m +\t\033[93mtry upgrading with\033[0m \033[96m./mach cargo-update -p test:0.4.9\033[0m +\tThe following packages depend on version 0.4.9: +\t\ttest2""" + self.assertEqual(msg, errors.next()[2]) + self.assertNoMoreErrors(errors) def do_tests(): diff --git a/python/tidy/setup.py b/python/tidy/setup.py index 86aae654b3c..a1af7d88465 100644 --- a/python/tidy/setup.py +++ b/python/tidy/setup.py @@ -11,7 +11,7 @@ import os from setuptools import setup, find_packages -VERSION = '0.0.2' +VERSION = '0.0.3' install_requires = [ "flake8==2.4.1", diff --git a/resources/badcert.html b/resources/badcert.html index 023a833e796..9bb98db2148 100644 --- a/resources/badcert.html +++ b/resources/badcert.html @@ -3,6 +3,6 @@ <title>Certificate error</title> </head> <body> - <img src="badcert.jpg"> + <img src="chrome://resources/badcert.jpg"> </body> </html> diff --git a/resources/servo.css b/resources/servo.css index 97796bf183c..5fe1b27bf46 100644 --- a/resources/servo.css +++ b/resources/servo.css @@ -60,3 +60,11 @@ details[open]::-servo-details-content { display: block; } +/* + * Until servo supports svg properly, make sure to at least prevent svg + * children from being layed out and rendered like usual html. + * https://github.com/servo/servo/issues/10646 + */ +svg > * { + display: none; +} diff --git a/support/android/build-apk/src/main.rs b/support/android/build-apk/src/main.rs index 80f7464bc7d..f9326f76452 100644 --- a/support/android/build-apk/src/main.rs +++ b/support/android/build-apk/src/main.rs @@ -274,9 +274,9 @@ fn find_native_libs(args: &Args) -> HashMap<String, PathBuf> { (Some(file_name), Some(extension)) => { let file_name = file_name.to_str().unwrap(); - if file_name.starts_with("lib") - && extension == "so" - && args.shared_libraries.contains(file_name) { + if file_name.starts_with("lib") && + extension == "so" && + args.shared_libraries.contains(file_name) { println!("Adding the file {:?}", file_name); native_shared_libs.insert(file_name.to_string(), path.to_path_buf().clone()); break; diff --git a/tests/html/simple-overflow-scroll.html b/tests/html/simple-overflow-scroll.html index 0df956eb905..f0a158b7eaa 100644 --- a/tests/html/simple-overflow-scroll.html +++ b/tests/html/simple-overflow-scroll.html @@ -17,8 +17,14 @@ nav { top: 16px; left: 16px; } +div { + width: 400px; +} + </style> -<nav></nav><section>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc ultricies tortor eu augue eleifend malesuada. Duis id condimentum urna. Duis vulputate urna a dignissim sodales. Aenean et magna id dui rutrum suscipit. Etiam metus mauris, congue ac suscipit dapibus, mattis non neque. Donec porttitor eros sed mauris tristique, non condimentum augue feugiat. Suspendisse iaculis faucibus nunc at porttitor. Integer convallis enim in feugiat molestie. Ut eget tincidunt mi, vel malesuada lectus. Quisque fermentum neque a sapien interdum consectetur. Nam tincidunt leo sit amet tortor ornare, sit amet ultrices ante semper. Fusce malesuada mi vitae venenatis sagittis. Duis eget urna quam. +<nav></nav><section id="section"> + + <div>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc ultricies tortor eu augue eleifend malesuada. Duis id condimentum urna. Duis vulputate urna a dignissim sodales. Aenean et magna id dui rutrum suscipit. Etiam metus mauris, congue ac suscipit dapibus, mattis non neque. Donec porttitor eros sed mauris tristique, non condimentum augue feugiat. Suspendisse iaculis faucibus nunc at porttitor. Integer convallis enim in feugiat molestie. Ut eget tincidunt mi, vel malesuada lectus. Quisque fermentum neque a sapien interdum consectetur. Nam tincidunt leo sit amet tortor ornare, sit amet ultrices ante semper. Fusce malesuada mi vitae venenatis sagittis. Duis eget urna quam. Sed lacinia aliquam tortor quis elementum. Cras vitae mauris erat. Vestibulum posuere justo et dolor condimentum feugiat. Sed at magna nunc. Suspendisse est nunc, ultrices sed enim lobortis, vulputate rutrum mauris. Fusce ultrices eget erat blandit porta. Sed eros nulla, tristique eget porta a, viverra vel velit. Praesent sit amet odio eleifend, tempor arcu ut, elementum tellus. Suspendisse lorem tortor, sodales eget nulla a, rhoncus lobortis magna. Phasellus purus ante, rhoncus a ipsum nec, condimentum lacinia purus. Cras lobortis posuere nisi, vitae dapibus ante feugiat et. Quisque ornare nisi quis erat congue viverra. Vestibulum a nunc odio. @@ -26,5 +32,18 @@ Sed id venenatis tortor. Curabitur sit amet mauris eget mi semper rutrum vel et Sed sed ante aliquam, rutrum nisl quis, fermentum tellus. Proin ac leo molestie, euismod mauris sed, consequat nunc. Vivamus ut leo a nunc pharetra accumsan a non lorem. Aliquam iaculis mattis augue, in eleifend est accumsan vel. Pellentesque efficitur pulvinar leo vel ornare. Pellentesque non fermentum enim, ut efficitur elit. Duis risus quam, congue vel nulla a, blandit egestas erat. Suspendisse at sodales dolor. Vivamus auctor, lorem et ultrices venenatis, erat ex mollis nisi, quis maximus libero quam a libero. -Curabitur elit lacus, bibendum non tempus a, bibendum sit amet ante. Mauris eget nibh quis leo rhoncus consequat. Integer iaculis sed sapien eu pellentesque. In aliquet elementum lorem, ut consequat elit ultrices id. Phasellus vestibulum ex ex, ac sagittis tortor convallis et. Curabitur placerat id lectus at aliquam. Morbi sed nisl sem. Nam sit amet arcu maximus, volutpat nisl ac, dignissim neque. Etiam nec efficitur libero. Quisque tristique pulvinar est, eget dictum ex vehicula non. Nam dignissim non felis a iaculis. Nullam vel dolor vitae libero aliquet congue. Donec mi eros, semper non lectus at, commodo ullamcorper ligula. Donec commodo, sem vel lacinia porttitor, elit orci maximus felis, eget eleifend est velit id lorem. +Curabitur elit lacus, bibendum non tempus a, bibendum sit amet ante. Mauris eget nibh quis leo rhoncus consequat. Integer iaculis sed sapien eu pellentesque. In aliquet elementum lorem, ut consequat elit ultrices id. Phasellus vestibulum ex ex, ac sagittis tortor convallis et. Curabitur placerat id lectus at aliquam. Morbi sed nisl sem. Nam sit amet arcu maximus, volutpat nisl ac, dignissim neque. Etiam nec efficitur libero. Quisque tristique pulvinar est, eget dictum ex vehicula non. Nam dignissim non felis a iaculis. Nullam vel dolor vitae libero aliquet congue. Donec mi eros, semper non lectus at, commodo ullamcorper ligula. Donec commodo, sem vel lacinia porttitor, elit orci maximus felis, eget eleifend est velit id lorem. + </div> +<script> +var section = document.getElementById("section"); + +window.setTimeout(function () { + section.scroll(0, 1000); +}, 2000) + +window.setInterval(function () { + console.log("scrollTop: " + section.scrollTop); + console.log("scrollLeft: " + section.scrollLeft); +}, 1000); +</script> diff --git a/tests/unit/net/Cargo.toml b/tests/unit/net/Cargo.toml index 3ba7774e043..b1ac67aec05 100644 --- a/tests/unit/net/Cargo.toml +++ b/tests/unit/net/Cargo.toml @@ -31,8 +31,8 @@ git = "https://github.com/servo/ipc-channel" [dependencies] cookie = "0.2" -hyper = "0.8" -url = {version = "0.5.7", features = ["heap_size"]} +hyper = "0.9" +url = {version = "1.0.0", features = ["heap_size"]} time = "0.1" flate2 = "0.2.0" unicase = "1.0" diff --git a/tests/unit/net/chrome_loader.rs b/tests/unit/net/chrome_loader.rs new file mode 100644 index 00000000000..5008fe67fc8 --- /dev/null +++ b/tests/unit/net/chrome_loader.rs @@ -0,0 +1,44 @@ +/* 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/. */ + +use net::chrome_loader::resolve_chrome_url; +use url::Url; + +fn c(s: &str) -> Result<Url, ()> { + resolve_chrome_url(&Url::parse(s).unwrap()) +} + +#[test] +fn test_resolve_chrome_url() { + assert_eq!(c("chrome://resources/nonexistent.jpg"), Err(())); + assert_eq!(c("chrome://not-resources/badcert.jpg"), Err(())); + assert_eq!(c("chrome://resources/badcert.jpg").unwrap().scheme(), "file"); + assert_eq!(c("chrome://resources/subdir/../badcert.jpg").unwrap().scheme(), "file"); + assert_eq!(c("chrome://resources/subdir/../../badcert.jpg").unwrap().scheme(), "file"); + assert_eq!(c("chrome://resources/../badcert.jpg").unwrap().scheme(), "file"); + assert_eq!(c("chrome://resources/../README.md"), Err(())); + assert_eq!(c("chrome://resources/%2e%2e/README.md"), Err(())); + + assert_eq!(c("chrome://resources/etc/passwd"), Err(())); + assert_eq!(c("chrome://resources//etc/passwd"), Err(())); + assert_eq!(c("chrome://resources/%2Fetc%2Fpasswd"), Err(())); + + assert_eq!(c("chrome://resources/C:/Windows/notepad.exe"), Err(())); + assert_eq!(c("chrome://resources/C:\\Windows\\notepad.exe"), Err(())); + + assert_eq!(c("chrome://resources/localhost/C:/Windows/notepad.exe"), Err(())); + assert_eq!(c("chrome://resources//localhost/C:/Windows/notepad.exe"), Err(())); + assert_eq!(c("chrome://resources///localhost/C:/Windows/notepad.exe"), Err(())); + assert_eq!(c("chrome://resources/\\\\localhost\\C:\\Windows\\notepad.exe"), Err(())); + + assert_eq!(c("chrome://resources/%3F/C:/Windows/notepad.exe"), Err(())); + assert_eq!(c("chrome://resources//%3F/C:/Windows/notepad.exe"), Err(())); + assert_eq!(c("chrome://resources///%3F/C:/Windows/notepad.exe"), Err(())); + assert_eq!(c("chrome://resources/\\\\%3F\\C:\\Windows\\notepad.exe"), Err(())); + + assert_eq!(c("chrome://resources/%3F/UNC/localhost/C:/Windows/notepad.exe"), Err(())); + assert_eq!(c("chrome://resources//%3F/UNC/localhost/C:/Windows/notepad.exe"), Err(())); + assert_eq!(c("chrome://resources///%3F/UNC/localhost/C:/Windows/notepad.exe"), Err(())); + assert_eq!(c("chrome://resources/\\\\%3F\\UNC\\localhost\\C:\\Windows\\notepad.exe"), Err(())); +} diff --git a/tests/unit/net/data_loader.rs b/tests/unit/net/data_loader.rs index 50ee8771490..480e48221de 100644 --- a/tests/unit/net/data_loader.rs +++ b/tests/unit/net/data_loader.rs @@ -7,7 +7,7 @@ extern crate hyper; use ipc_channel::ipc; use net_traits::LoadConsumer::Channel; use net_traits::ProgressMsg::{Payload, Done}; -use net_traits::{LoadData, LoadContext}; +use net_traits::{LoadData, LoadContext, NetworkError}; use self::hyper::header::ContentType; use self::hyper::mime::{Mime, TopLevel, SubLevel, Attr, Value}; @@ -24,7 +24,7 @@ fn assert_parse(url: &'static str, let (start_chan, start_port) = ipc::channel().unwrap(); let classifier = Arc::new(MIMEClassifier::new()); - load(LoadData::new(LoadContext::Browsing, Url::parse(url).unwrap(), None), + load(LoadData::new(LoadContext::Browsing, Url::parse(url).unwrap(), None, None, None), Channel(start_chan), classifier, CancellationListener::new(None)); @@ -36,7 +36,7 @@ fn assert_parse(url: &'static str, match data { None => { - assert_eq!(progress, Done(Err("invalid data uri".to_owned()))); + assert_eq!(progress, Done(Err(NetworkError::Internal("invalid data uri".to_owned())))); } Some(dat) => { assert_eq!(progress, Payload(dat)); diff --git a/tests/unit/net/fetch.rs b/tests/unit/net/fetch.rs index b2353d33113..8b95314c726 100644 --- a/tests/unit/net/fetch.rs +++ b/tests/unit/net/fetch.rs @@ -22,7 +22,7 @@ use std::sync::mpsc::{Sender, channel}; use std::sync::{Arc, Mutex}; use time::{self, Duration}; use unicase::UniCase; -use url::{Origin as UrlOrigin, OpaqueOrigin, Url}; +use url::{Origin as UrlOrigin, Url}; // TODO write a struct that impls Handler for storing test values @@ -156,7 +156,7 @@ fn test_cors_preflight_fetch() { }; let (mut server, url) = make_server(handler); - let origin = Origin::Origin(UrlOrigin::UID(OpaqueOrigin::new())); + let origin = Origin::Origin(UrlOrigin::new_opaque()); let mut request = Request::new(url, Some(origin), false); request.referer = Referer::NoReferer; request.use_cors_preflight = true; @@ -192,7 +192,7 @@ fn test_cors_preflight_fetch_network_error() { }; let (mut server, url) = make_server(handler); - let origin = Origin::Origin(UrlOrigin::UID(OpaqueOrigin::new())); + let origin = Origin::Origin(UrlOrigin::new_opaque()); let mut request = Request::new(url, Some(origin), false); *request.method.borrow_mut() = Method::Extension("CHICKEN".to_owned()); request.referer = Referer::NoReferer; @@ -269,7 +269,7 @@ fn test_fetch_response_is_cors_filtered() { let (mut server, url) = make_server(handler); // an origin mis-match will stop it from defaulting to a basic filtered response - let origin = Origin::Origin(UrlOrigin::UID(OpaqueOrigin::new())); + let origin = Origin::Origin(UrlOrigin::new_opaque()); let mut request = Request::new(url, Some(origin), false); request.referer = Referer::NoReferer; request.mode = RequestMode::CORSMode; @@ -304,7 +304,7 @@ fn test_fetch_response_is_opaque_filtered() { let (mut server, url) = make_server(handler); // an origin mis-match will fall through to an Opaque filtered response - let origin = Origin::Origin(UrlOrigin::UID(OpaqueOrigin::new())); + let origin = Origin::Origin(UrlOrigin::new_opaque()); let mut request = Request::new(url, Some(origin), false); request.referer = Referer::NoReferer; let wrapped_request = Rc::new(request); @@ -340,7 +340,7 @@ fn test_fetch_response_is_opaque_redirect_filtered() { RequestUri::AbsolutePath(url) => url.split("/").collect::<String>().parse::<u32>().unwrap_or(0), RequestUri::AbsoluteUri(url) => - url.path().unwrap().last().unwrap().split("/").collect::<String>().parse::<u32>().unwrap_or(0), + url.path_segments().unwrap().next_back().unwrap().parse::<u32>().unwrap_or(0), _ => panic!() }; @@ -420,7 +420,7 @@ fn setup_server_and_fetch(message: &'static [u8], redirect_cap: u32) -> Response RequestUri::AbsolutePath(url) => url.split("/").collect::<String>().parse::<u32>().unwrap_or(0), RequestUri::AbsoluteUri(url) => - url.path().unwrap().last().unwrap().split("/").collect::<String>().parse::<u32>().unwrap_or(0), + url.path_segments().unwrap().next_back().unwrap().parse::<u32>().unwrap_or(0), _ => panic!() }; @@ -493,7 +493,7 @@ fn test_fetch_redirect_updates_method_runner(tx: Sender<bool>, status_code: Stat RequestUri::AbsolutePath(url) => url.split("/").collect::<String>().parse::<u32>().unwrap_or(0), RequestUri::AbsoluteUri(url) => - url.path().unwrap().last().unwrap().split("/").collect::<String>().parse::<u32>().unwrap_or(0), + url.path_segments().unwrap().next_back().unwrap().parse::<u32>().unwrap_or(0), _ => panic!() }; @@ -631,7 +631,7 @@ fn test_opaque_filtered_fetch_async_returns_complete_response() { let (mut server, url) = make_server(handler); // an origin mis-match will fall through to an Opaque filtered response - let origin = Origin::Origin(UrlOrigin::UID(OpaqueOrigin::new())); + let origin = Origin::Origin(UrlOrigin::new_opaque()); let mut request = Request::new(url, Some(origin), false); request.referer = Referer::NoReferer; @@ -658,7 +658,7 @@ fn test_opaque_redirect_filtered_fetch_async_returns_complete_response() { RequestUri::AbsolutePath(url) => url.split("/").collect::<String>().parse::<u32>().unwrap_or(0), RequestUri::AbsoluteUri(url) => - url.path().unwrap().last().unwrap().split("/").collect::<String>().parse::<u32>().unwrap_or(0), + url.path_segments().unwrap().last().unwrap().parse::<u32>().unwrap_or(0), _ => panic!() }; diff --git a/tests/unit/net/hsts.rs b/tests/unit/net/hsts.rs index 5d8ceb641b3..6d310d25aea 100644 --- a/tests/unit/net/hsts.rs +++ b/tests/unit/net/hsts.rs @@ -267,7 +267,7 @@ fn test_secure_url_does_not_affect_non_http_schemas() { let url = Url::parse("file://mozilla.org").unwrap(); let secure = secure_url(&url); - assert_eq!(&secure.scheme, "file"); + assert_eq!(secure.scheme(), "file"); } #[test] @@ -275,5 +275,5 @@ fn test_secure_url_forces_an_http_host_in_list_to_https() { let url = Url::parse("http://mozilla.org").unwrap(); let secure = secure_url(&url); - assert_eq!(&secure.scheme, "https"); + assert_eq!(secure.scheme(), "https"); } diff --git a/tests/unit/net/http_loader.rs b/tests/unit/net/http_loader.rs index 3b9da166a45..a32df4781bf 100644 --- a/tests/unit/net/http_loader.rs +++ b/tests/unit/net/http_loader.rs @@ -10,16 +10,17 @@ use flate2::Compression; use flate2::write::{GzEncoder, DeflateEncoder}; use hyper::header::{Accept, AcceptEncoding, ContentEncoding, ContentLength, Cookie as CookieHeader}; use hyper::header::{Authorization, Basic}; -use hyper::header::{Encoding, Headers, Host, Location, Quality, QualityItem, qitem, SetCookie}; +use hyper::header::{Encoding, Headers, Host, Location, Quality, QualityItem, qitem, Referer, SetCookie}; use hyper::header::{StrictTransportSecurity, UserAgent}; use hyper::http::RawStatus; use hyper::method::Method; use hyper::mime::{Mime, SubLevel, TopLevel}; use hyper::status::StatusCode; -use msg::constellation_msg::PipelineId; +use msg::constellation_msg::{PipelineId, ReferrerPolicy}; use net::cookie::Cookie; use net::cookie_storage::CookieStorage; use net::hsts::HstsEntry; +use net::http_loader::LoadErrorType; use net::http_loader::{load, LoadError, HttpRequestFactory, HttpRequest, HttpResponse, UIProvider, HttpState}; use net::resource_thread::{AuthCacheEntry, CancellationListener}; use net_traits::{LoadData, CookieSource, LoadContext, IncludeSubdomains}; @@ -327,7 +328,7 @@ fn test_check_default_headers_loaded_in_every_request() { let http_state = HttpState::new(); let ui_provider = TestProvider::new(); - let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None); + let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None); load_data.data = None; load_data.method = Method::Get; @@ -371,7 +372,7 @@ fn test_load_when_request_is_not_get_or_head_and_there_is_no_body_content_length let http_state = HttpState::new(); let ui_provider = TestProvider::new(); - let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None); + let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None); load_data.data = None; load_data.method = Method::Post; @@ -409,7 +410,7 @@ fn test_request_and_response_data_with_network_messages() { let (devtools_chan, devtools_port) = mpsc::channel::<DevtoolsControlMsg>(); // This will probably have to be changed as it uses fake_root_pipeline_id which is marked for removal. let pipeline_id = PipelineId::fake_root_pipeline_id(); - let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), Some(pipeline_id)); + let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), Some(pipeline_id), None, None); let mut request_headers = Headers::new(); request_headers.set(Host { hostname: "bar.foo".to_owned(), port: None }); load_data.headers = request_headers.clone(); @@ -482,7 +483,7 @@ fn test_request_and_response_message_from_devtool_without_pipeline_id() { let url = Url::parse("https://mozilla.com").unwrap(); let (devtools_chan, devtools_port) = mpsc::channel::<DevtoolsControlMsg>(); - let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None); + let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None); let _ = load(&load_data, &ui_provider, &http_state, Some(devtools_chan), &Factory, DEFAULT_USER_AGENT.to_owned(), &CancellationListener::new(None)); @@ -511,7 +512,8 @@ fn test_load_when_redirecting_from_a_post_should_rewrite_next_request_as_get() { } let url = Url::parse("http://mozilla.com").unwrap(); - let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None); + let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None); + load_data.method = Method::Post; let http_state = HttpState::new(); @@ -540,7 +542,7 @@ fn test_load_should_decode_the_response_as_deflate_when_response_headers_have_co } let url = Url::parse("http://mozilla.com").unwrap(); - let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None); + let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None); let http_state = HttpState::new(); let ui_provider = TestProvider::new(); @@ -574,7 +576,8 @@ fn test_load_should_decode_the_response_as_gzip_when_response_headers_have_conte } let url = Url::parse("http://mozilla.com").unwrap(); - let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None); + let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None); + let http_state = HttpState::new(); let ui_provider = TestProvider::new(); @@ -616,7 +619,8 @@ fn test_load_doesnt_send_request_body_on_any_redirect() { } let url = Url::parse("http://mozilla.com").unwrap(); - let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None); + let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None); + load_data.data = Some(<[_]>::to_vec("Body on POST!".as_bytes())); let http_state = HttpState::new(); @@ -647,7 +651,7 @@ fn test_load_doesnt_add_host_to_sts_list_when_url_is_http_even_if_sts_headers_ar let url = Url::parse("http://mozilla.com").unwrap(); - let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None); + let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None); let http_state = HttpState::new(); let ui_provider = TestProvider::new(); @@ -679,7 +683,7 @@ fn test_load_adds_host_to_sts_list_when_url_is_https_and_sts_headers_are_present let url = Url::parse("https://mozilla.com").unwrap(); - let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None); + let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None); let http_state = HttpState::new(); let ui_provider = TestProvider::new(); @@ -716,7 +720,7 @@ fn test_load_sets_cookies_in_the_resource_manager_when_it_get_set_cookie_header_ assert_cookie_for_domain(http_state.cookie_jar.clone(), "http://mozilla.com", ""); - let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None); + let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None); let _ = load(&load_data, &ui_provider, &http_state, @@ -732,7 +736,7 @@ fn test_load_sets_cookies_in_the_resource_manager_when_it_get_set_cookie_header_ fn test_load_sets_requests_cookies_header_for_url_by_getting_cookies_from_the_resource_manager() { let url = Url::parse("http://mozilla.com").unwrap(); - let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None); + let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None); load_data.data = Some(<[_]>::to_vec("Yay!".as_bytes())); let http_state = HttpState::new(); @@ -788,7 +792,7 @@ fn test_load_sends_secure_cookie_if_http_changed_to_https_due_to_entry_in_hsts_s cookie_jar.push(cookie, CookieSource::HTTP); } - let mut load_data = LoadData::new(LoadContext::Browsing, url, None); + let mut load_data = LoadData::new(LoadContext::Browsing, url, None, None, None); load_data.data = Some(<[_]>::to_vec("Yay!".as_bytes())); let mut headers = Headers::new(); @@ -820,7 +824,7 @@ fn test_load_sends_cookie_if_nonhttp() { cookie_jar.push(cookie, CookieSource::HTTP); } - let mut load_data = LoadData::new(LoadContext::Browsing, url, None); + let mut load_data = LoadData::new(LoadContext::Browsing, url, None, None, None); load_data.data = Some(<[_]>::to_vec("Yay!".as_bytes())); let mut headers = Headers::new(); @@ -854,7 +858,7 @@ fn test_cookie_set_with_httponly_should_not_be_available_using_getcookiesforurl( let http_state = HttpState::new(); let ui_provider = TestProvider::new(); - let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None); + let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None); let _ = load(&load_data, &ui_provider, &http_state, None, @@ -884,7 +888,7 @@ fn test_when_cookie_received_marked_secure_is_ignored_for_http() { let http_state = HttpState::new(); let ui_provider = TestProvider::new(); - let load_data = LoadData::new(LoadContext::Browsing, Url::parse("http://mozilla.com").unwrap(), None); + let load_data = LoadData::new(LoadContext::Browsing, Url::parse("http://mozilla.com").unwrap(), None, None, None); let _ = load(&load_data, &ui_provider, &http_state, None, @@ -915,7 +919,7 @@ fn test_when_cookie_set_marked_httpsonly_secure_isnt_sent_on_http_request() { cookie_jar.push(cookie, CookieSource::HTTP); } - let mut load_data = LoadData::new(LoadContext::Browsing, url, None); + let mut load_data = LoadData::new(LoadContext::Browsing, url, None, None, None); load_data.data = Some(<[_]>::to_vec("Yay!".as_bytes())); assert_cookie_for_domain(http_state.cookie_jar.clone(), "https://mozilla.com", "mozillaIs=theBest"); @@ -933,7 +937,8 @@ fn test_load_sets_content_length_to_length_of_request_body() { let content = "This is a request body"; let url = Url::parse("http://mozilla.com").unwrap(); - let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None); + let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None); + load_data.data = Some(<[_]>::to_vec(content.as_bytes())); let mut content_len_headers = Headers::new(); @@ -958,7 +963,8 @@ fn test_load_uses_explicit_accept_from_headers_in_load_data() { accept_headers.set(Accept(vec![text_html.clone()])); let url = Url::parse("http://mozilla.com").unwrap(); - let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None); + let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None); + load_data.data = Some(<[_]>::to_vec("Yay!".as_bytes())); load_data.headers.set(Accept(vec![text_html.clone()])); @@ -986,7 +992,8 @@ fn test_load_sets_default_accept_to_html_xhtml_xml_and_then_anything_else() { ])); let url = Url::parse("http://mozilla.com").unwrap(); - let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None); + let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None); + load_data.data = Some(<[_]>::to_vec("Yay!".as_bytes())); let http_state = HttpState::new(); @@ -1008,7 +1015,7 @@ fn test_load_uses_explicit_accept_encoding_from_load_data_headers() { accept_encoding_headers.set(AcceptEncoding(vec![qitem(Encoding::Chunked)])); let url = Url::parse("http://mozilla.com").unwrap(); - let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None); + let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None); load_data.data = Some(<[_]>::to_vec("Yay!".as_bytes())); load_data.headers.set(AcceptEncoding(vec![qitem(Encoding::Chunked)])); @@ -1033,7 +1040,7 @@ fn test_load_sets_default_accept_encoding_to_gzip_and_deflate() { qitem(Encoding::EncodingExt("br".to_owned()))])); let url = Url::parse("http://mozilla.com").unwrap(); - let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None); + let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None); load_data.data = Some(<[_]>::to_vec("Yay!".as_bytes())); let http_state = HttpState::new(); @@ -1068,16 +1075,14 @@ fn test_load_errors_when_there_a_redirect_loop() { } let url = Url::parse("http://mozilla.com").unwrap(); - let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None); + let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None); let http_state = HttpState::new(); let ui_provider = TestProvider::new(); match load(&load_data, &ui_provider, &http_state, None, &Factory, DEFAULT_USER_AGENT.to_owned(), &CancellationListener::new(None)) { - Err(LoadError::InvalidRedirect(_, msg)) => { - assert_eq!(msg, "redirect loop"); - }, + Err(ref load_err) if load_err.error == LoadErrorType::RedirectLoop => (), _ => panic!("expected max redirects to fail") } } @@ -1091,7 +1096,7 @@ fn test_load_errors_when_there_is_too_many_redirects() { fn create(&self, url: Url, _: Method, _: Headers) -> Result<MockRequest, LoadError> { if url.domain().unwrap() == "mozilla.com" { - Ok(MockRequest::new(ResponseType::Redirect(format!("{}/1", url.serialize())))) + Ok(MockRequest::new(ResponseType::Redirect(format!("{}/1", url)))) } else { panic!("unexpected host {:?}", url) } @@ -1099,7 +1104,7 @@ fn test_load_errors_when_there_is_too_many_redirects() { } let url = Url::parse("http://mozilla.com").unwrap(); - let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None); + let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None); let http_state = HttpState::new(); let ui_provider = TestProvider::new(); @@ -1110,10 +1115,11 @@ fn test_load_errors_when_there_is_too_many_redirects() { match load(&load_data, &ui_provider, &http_state, None, &Factory, DEFAULT_USER_AGENT.to_owned(), &CancellationListener::new(None)) { - Err(LoadError::MaxRedirects(url, num_redirects)) => { + Err(LoadError { error: LoadErrorType::MaxRedirects(num_redirects), + url, .. }) => { assert_eq!(num_redirects, redirect_limit as u32); - assert_eq!(url.domain().unwrap(), "mozilla.com") - }, + assert_eq!(url.domain().unwrap(), "mozilla.com"); + } _ => panic!("expected max redirects to fail") } @@ -1145,8 +1151,7 @@ fn test_load_follows_a_redirect() { } let url = Url::parse("http://mozilla.com").unwrap(); - let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None); - + let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None); let http_state = HttpState::new(); let ui_provider = TestProvider::new(); @@ -1166,14 +1171,14 @@ impl HttpRequestFactory for DontConnectFactory { type R = MockRequest; fn create(&self, url: Url, _: Method, _: Headers) -> Result<MockRequest, LoadError> { - Err(LoadError::Connection(url, "should not have connected".to_owned())) + Err(LoadError::new(url, LoadErrorType::Connection { reason: "should not have connected".into() })) } } #[test] fn test_load_errors_when_scheme_is_not_http_or_https() { let url = Url::parse("ftp://not-supported").unwrap(); - let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None); + let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None); let http_state = HttpState::new(); let ui_provider = TestProvider::new(); @@ -1184,7 +1189,7 @@ fn test_load_errors_when_scheme_is_not_http_or_https() { &DontConnectFactory, DEFAULT_USER_AGENT.to_owned(), &CancellationListener::new(None)) { - Err(LoadError::UnsupportedScheme(_)) => {} + Err(ref load_err) if load_err.error == LoadErrorType::UnsupportedScheme { scheme: "ftp".into() } => (), _ => panic!("expected ftp scheme to be unsupported") } } @@ -1192,7 +1197,7 @@ fn test_load_errors_when_scheme_is_not_http_or_https() { #[test] fn test_load_errors_when_viewing_source_and_inner_url_scheme_is_not_http_or_https() { let url = Url::parse("view-source:ftp://not-supported").unwrap(); - let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None); + let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None); let http_state = HttpState::new(); let ui_provider = TestProvider::new(); @@ -1203,7 +1208,7 @@ fn test_load_errors_when_viewing_source_and_inner_url_scheme_is_not_http_or_http &DontConnectFactory, DEFAULT_USER_AGENT.to_owned(), &CancellationListener::new(None)) { - Err(LoadError::UnsupportedScheme(_)) => {} + Err(ref load_err) if load_err.error == LoadErrorType::UnsupportedScheme { scheme: "ftp".into() } => (), _ => panic!("expected ftp scheme to be unsupported") } } @@ -1235,7 +1240,7 @@ fn test_load_errors_when_cancelled() { cancel_sender.send(()).unwrap(); let url = Url::parse("https://mozilla.com").unwrap(); - let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None); + let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None); let http_state = HttpState::new(); let ui_provider = TestProvider::new(); @@ -1245,7 +1250,7 @@ fn test_load_errors_when_cancelled() { &Factory, DEFAULT_USER_AGENT.to_owned(), &cancel_listener) { - Err(LoadError::Cancelled(_, _)) => (), + Err(ref load_err) if load_err.error == LoadErrorType::Cancelled => (), _ => panic!("expected load cancelled error!") } } @@ -1284,7 +1289,7 @@ fn test_redirect_from_x_to_y_provides_y_cookies_from_y() { } } - let load_data = LoadData::new(LoadContext::Browsing, url_x.clone(), None); + let load_data = LoadData::new(LoadContext::Browsing, url_x.clone(), None, None, None); let http_state = HttpState::new(); let ui_provider = TestProvider::new(); @@ -1333,13 +1338,13 @@ fn test_redirect_from_x_to_x_provides_x_with_cookie_from_first_response() { type R = MockRequest; fn create(&self, url: Url, _: Method, headers: Headers) -> Result<MockRequest, LoadError> { - if url.path().unwrap()[0] == "initial" { + if url.path_segments().unwrap().next().unwrap() == "initial" { let mut initial_answer_headers = Headers::new(); initial_answer_headers.set_raw("set-cookie", vec![b"mozillaIs=theBest; path=/;".to_vec()]); Ok(MockRequest::new( ResponseType::RedirectWithHeaders("http://mozilla.org/subsequent/".to_owned(), initial_answer_headers))) - } else if url.path().unwrap()[0] == "subsequent" { + } else if url.path_segments().unwrap().next().unwrap() == "subsequent" { let mut expected_subsequent_headers = Headers::new(); expected_subsequent_headers.set_raw("Cookie", vec![b"mozillaIs=theBest".to_vec()]); assert_headers_included(&expected_subsequent_headers, &headers); @@ -1350,7 +1355,7 @@ fn test_redirect_from_x_to_x_provides_x_with_cookie_from_first_response() { } } - let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None); + let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None); let http_state = HttpState::new(); let ui_provider = TestProvider::new(); @@ -1381,9 +1386,9 @@ fn test_if_auth_creds_not_in_url_but_in_cache_it_sets_it() { password: "test".to_owned(), }; - http_state.auth_cache.write().unwrap().insert(url.clone(), auth_entry); + http_state.auth_cache.write().unwrap().entries.insert(url.clone(), auth_entry); - let mut load_data = LoadData::new(LoadContext::Browsing, url, None); + let mut load_data = LoadData::new(LoadContext::Browsing, url, None, None, None); load_data.credentials_flag = true; let mut auth_header = Headers::new(); @@ -1422,7 +1427,7 @@ fn test_auth_ui_sets_header_on_401() { ) ); - let load_data = LoadData::new(LoadContext::Browsing, url, None); + let load_data = LoadData::new(LoadContext::Browsing, url, None, None, None); match load( &load_data, &ui_provider, &http_state, @@ -1436,3 +1441,188 @@ fn test_auth_ui_sets_header_on_401() { } } } + +fn assert_referer_header_matches(request_url: &str, + referrer_url: &str, + referrer_policy: Option<ReferrerPolicy>, + expected_referrer: &str) { + let ref_url = Url::parse(referrer_url).unwrap(); + let url = Url::parse(request_url).unwrap(); + let ui_provider = TestProvider::new(); + + let load_data = LoadData::new(LoadContext::Browsing, + url.clone(), + None, + referrer_policy, + Some(ref_url)); + + let mut referer_headers = Headers::new(); + referer_headers.set(Referer(expected_referrer.to_owned())); + + let http_state = HttpState::new(); + + let _ = load(&load_data.clone(), &ui_provider, &http_state, None, + &AssertMustIncludeHeadersRequestFactory { + expected_headers: referer_headers, + body: <[_]>::to_vec(&[]) + }, DEFAULT_USER_AGENT.to_owned(), + &CancellationListener::new(None)); +} + +fn assert_referer_header_not_included(request_url: &str, referrer_url: &str, referrer_policy: Option<ReferrerPolicy>) { + let ref_url = Url::parse(referrer_url).unwrap(); + let url = Url::parse(request_url).unwrap(); + let ui_provider = TestProvider::new(); + + let load_data = LoadData::new(LoadContext::Browsing, + url.clone(), + None, + referrer_policy, + Some(ref_url)); + + let http_state = HttpState::new(); + + let _ = load( + &load_data.clone(), &ui_provider, &http_state, None, + &AssertMustNotIncludeHeadersRequestFactory { + headers_not_expected: vec!["Referer".to_owned()], + body: <[_]>::to_vec(&[]) + }, DEFAULT_USER_AGENT.to_owned(), &CancellationListener::new(None)); +} + +#[test] +fn test_referer_set_to_origin_with_originonly_policy() { + let request_url = "http://mozilla.com"; + let referrer_url = "http://username:password@someurl.com/some/path#fragment"; + let referrer_policy = Some(ReferrerPolicy::OriginOnly); + let expected_referrer = "http://someurl.com/"; + + assert_referer_header_matches(request_url, referrer_url, referrer_policy, expected_referrer); +} + +#[test] +fn test_referer_set_to_stripped_url_with_unsafeurl_policy() { + let request_url = "http://mozilla.com"; + let referrer_url = "http://username:password@someurl.com/some/path#fragment"; + let referrer_policy = Some(ReferrerPolicy::UnsafeUrl); + let expected_referrer = "http://someurl.com/some/path"; + + assert_referer_header_matches(request_url, referrer_url, referrer_policy, expected_referrer); +} + +#[test] +fn test_referer_with_originwhencrossorigin_policy_cross_orig() { + let request_url = "http://mozilla.com"; + let referrer_url = "http://username:password@someurl.com/some/path#fragment"; + let referrer_policy = Some(ReferrerPolicy::OriginWhenCrossOrigin); + let expected_referrer = "http://someurl.com/"; + + assert_referer_header_matches(request_url, referrer_url, referrer_policy, expected_referrer); +} + +#[test] +fn test_referer_with_originwhencrossorigin_policy_same_orig() { + let request_url = "http://mozilla.com"; + let referrer_url = "http://username:password@mozilla.com/some/path#fragment"; + let referrer_policy = Some(ReferrerPolicy::OriginWhenCrossOrigin); + let expected_referrer = "http://mozilla.com/some/path"; + + assert_referer_header_matches(request_url, referrer_url, referrer_policy, expected_referrer); +} + +#[test] +fn test_http_to_https_considered_cross_origin_for_referer_header_logic() { + let request_url = "https://mozilla.com"; + let referrer_url = "http://mozilla.com/some/path"; + let referrer_policy = Some(ReferrerPolicy::OriginWhenCrossOrigin); + let expected_referrer = "http://mozilla.com/"; + + assert_referer_header_matches(request_url, referrer_url, referrer_policy, expected_referrer); +} + +#[test] +fn test_referer_set_to_ref_url_with_noreferrerwhendowngrade_policy_https_to_https() { + let request_url = "https://mozilla.com"; + let referrer_url = "https://username:password@mozilla.com/some/path#fragment"; + let referrer_policy = Some(ReferrerPolicy::NoRefWhenDowngrade); + let expected_referrer = "https://mozilla.com/some/path"; + + assert_referer_header_matches(request_url, referrer_url, referrer_policy, expected_referrer); +} + +#[test] +fn test_no_referer_set_with_noreferrerwhendowngrade_policy_https_to_http() { + let request_url = "http://mozilla.com"; + let referrer_url = "https://username:password@mozilla.com/some/path#fragment"; + let referrer_policy = Some(ReferrerPolicy::NoRefWhenDowngrade); + + assert_referer_header_not_included(request_url, referrer_url, referrer_policy) +} + +#[test] +fn test_referer_set_to_ref_url_with_noreferrerwhendowngrade_policy_http_to_https() { + let request_url = "https://mozilla.com"; + let referrer_url = "http://username:password@mozilla.com/some/path#fragment"; + let referrer_policy = Some(ReferrerPolicy::NoRefWhenDowngrade); + let expected_referrer = "http://mozilla.com/some/path"; + + assert_referer_header_matches(request_url, referrer_url, referrer_policy, expected_referrer); +} + +#[test] +fn test_referer_set_to_ref_url_with_noreferrerwhendowngrade_policy_http_to_http() { + let request_url = "http://mozilla.com"; + let referrer_url = "http://username:password@mozilla.com/some/path#fragment"; + let referrer_policy = Some(ReferrerPolicy::NoRefWhenDowngrade); + let expected_referrer = "http://mozilla.com/some/path"; + + assert_referer_header_matches(request_url, referrer_url, referrer_policy, expected_referrer); +} + +#[test] +fn test_no_referrer_policy_follows_noreferrerwhendowngrade_https_to_https() { + let request_url = "https://mozilla.com"; + let referrer_url = "https://username:password@mozilla.com/some/path#fragment"; + let referrer_policy = None; + let expected_referrer = "https://mozilla.com/some/path"; + + assert_referer_header_matches(request_url, referrer_url, referrer_policy, expected_referrer); +} + +#[test] +fn test_no_referrer_policy_follows_noreferrerwhendowngrade_https_to_http() { + let request_url = "http://mozilla.com"; + let referrer_url = "https://username:password@mozilla.com/some/path#fragment"; + let referrer_policy = None; + + assert_referer_header_not_included(request_url, referrer_url, referrer_policy); +} + +#[test] +fn test_no_referrer_policy_follows_noreferrerwhendowngrade_http_to_https() { + let request_url = "https://mozilla.com"; + let referrer_url = "http://username:password@mozilla.com/some/path#fragment"; + let referrer_policy = None; + let expected_referrer = "http://mozilla.com/some/path"; + + assert_referer_header_matches(request_url, referrer_url, referrer_policy, expected_referrer); +} + +#[test] +fn test_no_referrer_policy_follows_noreferrerwhendowngrade_http_to_http() { + let request_url = "http://mozilla.com"; + let referrer_url = "http://username:password@mozilla.com/some/path#fragment"; + let referrer_policy = None; + let expected_referrer = "http://mozilla.com/some/path"; + + assert_referer_header_matches(request_url, referrer_url, referrer_policy, expected_referrer); +} + +#[test] +fn test_no_referer_set_with_noreferrer_policy() { + let request_url = "http://mozilla.com"; + let referrer_url = "http://someurl.com"; + let referrer_policy = Some(ReferrerPolicy::NoReferrer); + + assert_referer_header_not_included(request_url, referrer_url, referrer_policy) +} diff --git a/tests/unit/net/lib.rs b/tests/unit/net/lib.rs index 7de91fb7738..4e8e38dc854 100644 --- a/tests/unit/net/lib.rs +++ b/tests/unit/net/lib.rs @@ -18,6 +18,7 @@ extern crate unicase; extern crate url; extern crate util; +#[cfg(test)] mod chrome_loader; #[cfg(test)] mod cookie; #[cfg(test)] mod data_loader; #[cfg(test)] mod file_loader; diff --git a/tests/unit/net/resource_thread.rs b/tests/unit/net/resource_thread.rs index fdaa0cd6bdb..798478285a5 100644 --- a/tests/unit/net/resource_thread.rs +++ b/tests/unit/net/resource_thread.rs @@ -5,12 +5,17 @@ use ipc_channel::ipc; use net::resource_thread::new_resource_thread; use net_traits::hosts::{parse_hostsfile, host_replacement}; -use net_traits::{ControlMsg, LoadData, LoadConsumer, ProgressMsg, LoadContext}; +use net_traits::{ControlMsg, LoadData, LoadConsumer, LoadContext, NetworkError, ProgressMsg}; use std::borrow::ToOwned; use std::collections::HashMap; +use std::net::IpAddr; use std::sync::mpsc::channel; use url::Url; +fn ip(s: &str) -> IpAddr { + s.parse().unwrap() +} + #[test] fn test_exit() { let resource_thread = new_resource_thread("".to_owned(), None); @@ -22,8 +27,9 @@ fn test_bad_scheme() { let resource_thread = new_resource_thread("".to_owned(), None); let (start_chan, start) = ipc::channel().unwrap(); let url = Url::parse("bogus://whatever").unwrap(); - resource_thread.send(ControlMsg::Load(LoadData::new(LoadContext::Browsing, url, None), - LoadConsumer::Channel(start_chan), None)).unwrap(); + resource_thread.send(ControlMsg::Load(LoadData::new(LoadContext::Browsing, url, None, None, None), + + LoadConsumer::Channel(start_chan), None)).unwrap(); let response = start.recv().unwrap(); match response.progress_port.recv().unwrap() { ProgressMsg::Done(result) => { assert!(result.is_err()) } @@ -37,8 +43,8 @@ fn test_parse_hostsfile() { let mock_hosts_file_content = "127.0.0.1 foo.bar.com\n127.0.0.2 servo.test.server"; let hosts_table = parse_hostsfile(mock_hosts_file_content); assert_eq!(2, hosts_table.len()); - assert_eq!("127.0.0.1".to_owned(), *hosts_table.get(&"foo.bar.com".to_owned()).unwrap()); - assert_eq!("127.0.0.2".to_owned(), *hosts_table.get(&"servo.test.server".to_owned()).unwrap()); + assert_eq!(ip("127.0.0.1"), *hosts_table.get("foo.bar.com").unwrap()); + assert_eq!(ip("127.0.0.2"), *hosts_table.get("servo.test.server").unwrap()); } #[test] @@ -46,7 +52,7 @@ fn test_parse_malformed_hostsfile() { let mock_hosts_file_content = "malformed file\n127.0.0.1 foo.bar.com\nservo.test.server 127.0.0.1"; let hosts_table = parse_hostsfile(mock_hosts_file_content); assert_eq!(1, hosts_table.len()); - assert_eq!("127.0.0.1".to_owned(), *hosts_table.get(&"foo.bar.com".to_owned()).unwrap()); + assert_eq!(ip("127.0.0.1"), *hosts_table.get("foo.bar.com").unwrap()); } #[test] @@ -54,7 +60,7 @@ fn test_parse_hostsfile_with_line_comment() { let mock_hosts_file_content = "# this is a line comment\n127.0.0.1 foo.bar.com\n# anothercomment"; let hosts_table = parse_hostsfile(mock_hosts_file_content); assert_eq!(1, hosts_table.len()); - assert_eq!("127.0.0.1".to_owned(), *hosts_table.get(&"foo.bar.com".to_owned()).unwrap()); + assert_eq!(ip("127.0.0.1"), *hosts_table.get("foo.bar.com").unwrap()); } #[test] @@ -62,8 +68,8 @@ fn test_parse_hostsfile_with_end_of_line_comment() { let mock_hosts_file_content = "127.0.0.1 foo.bar.com # line ending comment\n127.0.0.2 servo.test.server #comment"; let hosts_table = parse_hostsfile(mock_hosts_file_content); assert_eq!(2, hosts_table.len()); - assert_eq!("127.0.0.1".to_owned(), *hosts_table.get(&"foo.bar.com".to_owned()).unwrap()); - assert_eq!("127.0.0.2".to_owned(), *hosts_table.get(&"servo.test.server".to_owned()).unwrap()); + assert_eq!(ip("127.0.0.1"), *hosts_table.get("foo.bar.com").unwrap()); + assert_eq!(ip("127.0.0.2"), *hosts_table.get("servo.test.server").unwrap()); } #[test] @@ -71,8 +77,8 @@ fn test_parse_hostsfile_with_2_hostnames_for_1_address() { let mock_hosts_file_content = "127.0.0.1 foo.bar.com baz.bar.com"; let hosts_table = parse_hostsfile(mock_hosts_file_content); assert_eq!(2, hosts_table.len()); - assert_eq!("127.0.0.1".to_owned(), *hosts_table.get(&"foo.bar.com".to_owned()).unwrap()); - assert_eq!("127.0.0.1".to_owned(), *hosts_table.get(&"baz.bar.com".to_owned()).unwrap()); + assert_eq!(ip("127.0.0.1"), *hosts_table.get("foo.bar.com").unwrap()); + assert_eq!(ip("127.0.0.1"), *hosts_table.get("baz.bar.com").unwrap()); } #[test] @@ -80,10 +86,10 @@ fn test_parse_hostsfile_with_4_hostnames_for_1_address() { let mock_hosts_file_content = "127.0.0.1 moz.foo.com moz.bar.com moz.baz.com moz.moz.com"; let hosts_table = parse_hostsfile(mock_hosts_file_content); assert_eq!(4, hosts_table.len()); - assert_eq!("127.0.0.1".to_owned(), *hosts_table.get(&"moz.foo.com".to_owned()).unwrap()); - assert_eq!("127.0.0.1".to_owned(), *hosts_table.get(&"moz.bar.com".to_owned()).unwrap()); - assert_eq!("127.0.0.1".to_owned(), *hosts_table.get(&"moz.baz.com".to_owned()).unwrap()); - assert_eq!("127.0.0.1".to_owned(), *hosts_table.get(&"moz.moz.com".to_owned()).unwrap()); + assert_eq!(ip("127.0.0.1"), *hosts_table.get("moz.foo.com").unwrap()); + assert_eq!(ip("127.0.0.1"), *hosts_table.get("moz.bar.com").unwrap()); + assert_eq!(ip("127.0.0.1"), *hosts_table.get("moz.baz.com").unwrap()); + assert_eq!(ip("127.0.0.1"), *hosts_table.get("moz.moz.com").unwrap()); } #[test] @@ -91,8 +97,8 @@ fn test_parse_hostsfile_with_tabs_instead_spaces() { let mock_hosts_file_content = "127.0.0.1\tfoo.bar.com\n127.0.0.2\tservo.test.server"; let hosts_table = parse_hostsfile(mock_hosts_file_content); assert_eq!(2, hosts_table.len()); - assert_eq!("127.0.0.1".to_owned(), *hosts_table.get(&"foo.bar.com".to_owned()).unwrap()); - assert_eq!("127.0.0.2".to_owned(), *hosts_table.get(&"servo.test.server".to_owned()).unwrap()); + assert_eq!(ip("127.0.0.1"), *hosts_table.get("foo.bar.com").unwrap()); + assert_eq!(ip("127.0.0.2"), *hosts_table.get("servo.test.server").unwrap()); } #[test] @@ -145,25 +151,25 @@ fn test_parse_hostsfile_with_end_of_line_whitespace() 127.0.0.2 servo.test.server "; let hosts_table = parse_hostsfile(mock_hosts_file_content); assert_eq!(3, hosts_table.len()); - assert_eq!("127.0.0.1".to_owned(), *hosts_table.get(&"foo.bar.com".to_owned()).unwrap()); - assert_eq!("2001:db8:0:0:0:ff00:42:8329".to_owned(), *hosts_table.get(&"moz.foo.com".to_owned()).unwrap()); - assert_eq!("127.0.0.2".to_owned(), *hosts_table.get(&"servo.test.server".to_owned()).unwrap()); + assert_eq!(ip("127.0.0.1"), *hosts_table.get("foo.bar.com").unwrap()); + assert_eq!(ip("2001:db8:0:0:0:ff00:42:8329"), *hosts_table.get("moz.foo.com").unwrap()); + assert_eq!(ip("127.0.0.2"), *hosts_table.get("servo.test.server").unwrap()); } #[test] fn test_replace_hosts() { let mut host_table = HashMap::new(); - host_table.insert("foo.bar.com".to_owned(), "127.0.0.1".to_owned()); - host_table.insert("servo.test.server".to_owned(), "127.0.0.2".to_owned()); + host_table.insert("foo.bar.com".to_owned(), ip("127.0.0.1")); + host_table.insert("servo.test.server".to_owned(), ip("127.0.0.2")); let url = Url::parse("http://foo.bar.com:8000/foo").unwrap(); - assert_eq!(host_replacement(&host_table, &url).domain().unwrap(), "127.0.0.1"); + assert_eq!(host_replacement(&host_table, &url).host_str().unwrap(), "127.0.0.1"); let url = Url::parse("http://servo.test.server").unwrap(); - assert_eq!(host_replacement(&host_table, &url).domain().unwrap(), "127.0.0.2"); + assert_eq!(host_replacement(&host_table, &url).host_str().unwrap(), "127.0.0.2"); let url = Url::parse("http://a.foo.bar.com").unwrap(); - assert_eq!(host_replacement(&host_table, &url).domain().unwrap(), "a.foo.bar.com"); + assert_eq!(host_replacement(&host_table, &url).host_str().unwrap(), "a.foo.bar.com"); } #[test] @@ -200,7 +206,7 @@ fn test_cancelled_listener() { let (sync_sender, sync_receiver) = ipc::channel().unwrap(); let url = Url::parse(&format!("http://127.0.0.1:{}", port)).unwrap(); - resource_thread.send(ControlMsg::Load(LoadData::new(LoadContext::Browsing, url, None), + resource_thread.send(ControlMsg::Load(LoadData::new(LoadContext::Browsing, url, None, None, None), LoadConsumer::Channel(sender), Some(id_sender))).unwrap(); // get the `ResourceId` and send a cancel message, which should stop the loading loop @@ -213,9 +219,7 @@ fn test_cancelled_listener() { // (but, the loading has been cancelled) let _ = body_sender.send(body); let response = receiver.recv().unwrap(); - match response.progress_port.recv().unwrap() { - ProgressMsg::Done(result) => assert_eq!(result.unwrap_err(), "load cancelled".to_owned()), - _ => panic!("baaaah!"), - } + assert_eq!(response.progress_port.recv().unwrap(), + ProgressMsg::Done(Err(NetworkError::Internal("load cancelled".to_owned())))); resource_thread.send(ControlMsg::Exit).unwrap(); } diff --git a/tests/unit/profile/Cargo.toml b/tests/unit/profile/Cargo.toml new file mode 100644 index 00000000000..812a304660d --- /dev/null +++ b/tests/unit/profile/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "profile_tests" +version = "0.0.1" +authors = ["The Servo Project Developers"] + +[lib] +name = "profile_tests" +path = "lib.rs" +doctest = false + +[dependencies.profile] +path = "../../../components/profile" + +[dependencies.profile_traits] +path = "../../../components/profile_traits" diff --git a/tests/unit/profile/lib.rs b/tests/unit/profile/lib.rs new file mode 100644 index 00000000000..f60883d4211 --- /dev/null +++ b/tests/unit/profile/lib.rs @@ -0,0 +1,9 @@ +/* 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/. */ + +extern crate profile; +extern crate profile_traits; + +#[cfg(test)] +mod time; diff --git a/tests/unit/profile/time.rs b/tests/unit/profile/time.rs new file mode 100644 index 00000000000..b3156f40f87 --- /dev/null +++ b/tests/unit/profile/time.rs @@ -0,0 +1,15 @@ +/* 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/. */ + +use profile::time; +use profile_traits::time::ProfilerMsg; + +#[test] +fn time_profiler_smoke_test() { + let chan = time::Profiler::create(None); + assert!(true, "Can create the profiler thread"); + + chan.send(ProfilerMsg::Exit); + assert!(true, "Can tell the profiler thread to exit"); +} diff --git a/tests/unit/script/Cargo.toml b/tests/unit/script/Cargo.toml index b34cfb238f6..af2c06e4f1b 100644 --- a/tests/unit/script/Cargo.toml +++ b/tests/unit/script/Cargo.toml @@ -21,4 +21,4 @@ path = "../../../components/script" path = "../../../components/util" [dependencies] -url = {version = "0.5.8", features = ["heap_size"]} +url = {version = "1.0.0", features = ["heap_size"]} diff --git a/tests/unit/style/Cargo.toml b/tests/unit/style/Cargo.toml index 45245ba9327..0b6ffdf843b 100644 --- a/tests/unit/style/Cargo.toml +++ b/tests/unit/style/Cargo.toml @@ -29,4 +29,4 @@ cssparser = {version = "0.5.4", features = ["heap_size"]} euclid = {version = "0.6.4", features = ["plugins"]} selectors = {version = "0.5", features = ["heap_size"]} string_cache = {version = "0.2.12", features = ["heap_size"]} -url = {version = "0.5.7", features = ["heap_size"]} +url = {version = "1.0.0", features = ["heap_size"]} diff --git a/tests/unit/util/opts.rs b/tests/unit/util/opts.rs index 5807f3327ef..8367e1d5117 100644 --- a/tests/unit/util/opts.rs +++ b/tests/unit/util/opts.rs @@ -17,11 +17,11 @@ fn test_argument_parsing() { assert!(parse_url_or_filename(fake_cwd, "http://example.net:invalid").is_err()); let url = parse_url_or_filename(fake_cwd, "http://example.net").unwrap(); - assert_eq!(url.scheme, "http"); + assert_eq!(url.scheme(), "http"); let url = parse_url_or_filename(fake_cwd, "file:///foo/bar.html").unwrap(); - assert_eq!(url.scheme, "file"); - assert_eq!(url.path().unwrap(), ["foo", "bar.html"]); + assert_eq!(url.scheme(), "file"); + assert_eq!(url.path_segments().unwrap().collect::<Vec<_>>(), ["foo", "bar.html"]); } #[test] @@ -30,8 +30,8 @@ fn test_file_path_parsing() { let fake_cwd = Path::new(FAKE_CWD); let url = parse_url_or_filename(fake_cwd, "bar.html").unwrap(); - assert_eq!(url.scheme, "file"); - assert_eq!(url.path().unwrap(), ["fake", "cwd", "bar.html"]); + assert_eq!(url.scheme(), "file"); + assert_eq!(url.path_segments().unwrap().collect::<Vec<_>>(), ["fake", "cwd", "bar.html"]); } #[test] @@ -40,8 +40,8 @@ fn test_file_path_parsing() { let fake_cwd = Path::new(FAKE_CWD); let url = parse_url_or_filename(fake_cwd, "bar.html").unwrap(); - assert_eq!(url.scheme, "file"); - assert_eq!(url.path().unwrap(), ["C:", "fake", "cwd", "bar.html"]); + assert_eq!(url.scheme(), "file"); + assert_eq!(url.path_segments().unwrap().collect::<Vec<_>>(), ["C:", "fake", "cwd", "bar.html"]); } #[test] @@ -53,16 +53,17 @@ fn test_argument_parsing_special() { // '?' and '#' have a special meaning in URLs... let url = parse_url_or_filename(fake_cwd, "file:///foo/bar?baz#buzz.html").unwrap(); assert_eq!(&*url.to_file_path().unwrap(), Path::new("/foo/bar")); - assert_eq!(url.scheme, "file"); - assert_eq!(url.path().unwrap(), ["foo", "bar"]); - assert_eq!(url.query.unwrap(), "baz"); - assert_eq!(url.fragment.unwrap(), "buzz.html"); + assert_eq!(url.scheme(), "file"); + assert_eq!(url.path_segments().unwrap().collect::<Vec<_>>(), ["foo", "bar"]); + assert_eq!(url.query(), Some("baz")); + assert_eq!(url.fragment(), Some("buzz.html")); // but not in file names. let url = parse_url_or_filename(fake_cwd, "./bar?baz#buzz.html").unwrap(); assert_eq!(&*url.to_file_path().unwrap(), Path::new("/fake/cwd/bar?baz#buzz.html")); - assert_eq!(url.scheme, "file"); - assert_eq!(url.path().unwrap(), ["fake", "cwd", "bar%3Fbaz%23buzz.html"]); - assert!(url.query.is_none()); - assert!(url.fragment.is_none()); + assert_eq!(url.scheme(), "file"); + assert_eq!(url.path_segments().unwrap().collect::<Vec<_>>(), + ["fake", "cwd", "bar%3Fbaz%23buzz.html"]); + assert_eq!(url.query(), None); + assert_eq!(url.fragment(), None); } diff --git a/tests/wpt/css-tests/compositing-1_dev/html/chapter-12.htm b/tests/wpt/css-tests/compositing-1_dev/html/chapter-12.htm index 42cfc9e39b9..5bc61693f83 100644 --- a/tests/wpt/css-tests/compositing-1_dev/html/chapter-12.htm +++ b/tests/wpt/css-tests/compositing-1_dev/html/chapter-12.htm @@ -36,76 +36,76 @@ <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-2dcontext2"> + <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css21"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3bg"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3color"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-porterduff"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-rfc2119"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-svg11"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> + <tbody id="sconformance.#conformance-classes"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="sconformance.#conventions"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> + <tbody id="sconformance.#cr-exit-criteria"> <!-- 0 tests --> </tbody> - <tbody id="s.#cr-exit-criteria"> + <tbody id="sconformance.#experimental"> <!-- 0 tests --> </tbody> - <tbody id="s.#experimental"> + <tbody id="sconformance.#partial"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="sconformance.#testing"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="sinformative.#biblio-porterduff"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="snormative.#biblio-2dcontext2"> <!-- 0 tests --> </tbody> - <tbody id="s.#partial"> + <tbody id="snormative.#biblio-css21"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="snormative.#biblio-css3bg"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="snormative.#biblio-css3color"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#biblio-rfc2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="snormative.#biblio-svg11"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> + <tbody id="sreferences.#informative"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> + <tbody id="sstatus.#w3c_process_revision"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/compositing-1_dev/xhtml1/chapter-12.xht b/tests/wpt/css-tests/compositing-1_dev/xhtml1/chapter-12.xht index 4b457ead38c..50de6eda679 100644 --- a/tests/wpt/css-tests/compositing-1_dev/xhtml1/chapter-12.xht +++ b/tests/wpt/css-tests/compositing-1_dev/xhtml1/chapter-12.xht @@ -36,76 +36,76 @@ <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-2dcontext2"> + <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css21"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3bg"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3color"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-porterduff"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-rfc2119"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-svg11"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> + <tbody id="sconformance.#conformance-classes"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="sconformance.#conventions"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> + <tbody id="sconformance.#cr-exit-criteria"> <!-- 0 tests --> </tbody> - <tbody id="s.#cr-exit-criteria"> + <tbody id="sconformance.#experimental"> <!-- 0 tests --> </tbody> - <tbody id="s.#experimental"> + <tbody id="sconformance.#partial"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="sconformance.#testing"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="sinformative.#biblio-porterduff"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="snormative.#biblio-2dcontext2"> <!-- 0 tests --> </tbody> - <tbody id="s.#partial"> + <tbody id="snormative.#biblio-css21"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="snormative.#biblio-css3bg"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="snormative.#biblio-css3color"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#biblio-rfc2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="snormative.#biblio-svg11"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> + <tbody id="sreferences.#informative"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> + <tbody id="sstatus.#w3c_process_revision"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/compositing-1_dev/xhtml1print/chapter-12.xht b/tests/wpt/css-tests/compositing-1_dev/xhtml1print/chapter-12.xht index 4b457ead38c..50de6eda679 100644 --- a/tests/wpt/css-tests/compositing-1_dev/xhtml1print/chapter-12.xht +++ b/tests/wpt/css-tests/compositing-1_dev/xhtml1print/chapter-12.xht @@ -36,76 +36,76 @@ <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-2dcontext2"> + <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css21"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3bg"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3color"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-porterduff"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-rfc2119"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-svg11"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> + <tbody id="sconformance.#conformance-classes"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="sconformance.#conventions"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> + <tbody id="sconformance.#cr-exit-criteria"> <!-- 0 tests --> </tbody> - <tbody id="s.#cr-exit-criteria"> + <tbody id="sconformance.#experimental"> <!-- 0 tests --> </tbody> - <tbody id="s.#experimental"> + <tbody id="sconformance.#partial"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="sconformance.#testing"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="sinformative.#biblio-porterduff"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="snormative.#biblio-2dcontext2"> <!-- 0 tests --> </tbody> - <tbody id="s.#partial"> + <tbody id="snormative.#biblio-css21"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="snormative.#biblio-css3bg"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="snormative.#biblio-css3color"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#biblio-rfc2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="snormative.#biblio-svg11"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> + <tbody id="sreferences.#informative"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> + <tbody id="sstatus.#w3c_process_revision"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-animations-1_dev/html/chapter-8.htm b/tests/wpt/css-tests/css-animations-1_dev/html/chapter-8.htm index 75c65214e2a..64047167d74 100644 --- a/tests/wpt/css-tests/css-animations-1_dev/html/chapter-8.htm +++ b/tests/wpt/css-tests/css-animations-1_dev/html/chapter-8.htm @@ -33,43 +33,43 @@ <a href="https://www.w3.org/TR/css3-animations/#references">8 References</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="s8.#CSS21"> + <tbody id="s8.#normative-references"> <!-- 0 tests --> </tbody> - <tbody id="s8.#CSS3-TRANSITIONS"> + <tbody id="s8.#other-references"> <!-- 0 tests --> </tbody> - <tbody id="s8.#CSS3VAL"> + <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s8.#WCAG20"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s8.#normative-references"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s8.#other-references"> + <tbody id="s.#longstatus-date"> <!-- 0 tests --> </tbody> - <tbody id="s.#abstract"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#editors-list"> + <tbody id="slongstatus-date.#editors-list"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="snormative-references.#CSS21"> <!-- 0 tests --> </tbody> - <tbody id="s.#longstatus-date"> + <tbody id="snormative-references.#CSS3-TRANSITIONS"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="sother-references.#CSS3VAL"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="sother-references.#WCAG20"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-animations-1_dev/xhtml1/chapter-8.xht b/tests/wpt/css-tests/css-animations-1_dev/xhtml1/chapter-8.xht index d2529165d8a..4e5cd943233 100644 --- a/tests/wpt/css-tests/css-animations-1_dev/xhtml1/chapter-8.xht +++ b/tests/wpt/css-tests/css-animations-1_dev/xhtml1/chapter-8.xht @@ -33,43 +33,43 @@ <a href="https://www.w3.org/TR/css3-animations/#references">8 References</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="s8.#CSS21"> + <tbody id="s8.#normative-references"> <!-- 0 tests --> </tbody> - <tbody id="s8.#CSS3-TRANSITIONS"> + <tbody id="s8.#other-references"> <!-- 0 tests --> </tbody> - <tbody id="s8.#CSS3VAL"> + <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s8.#WCAG20"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s8.#normative-references"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s8.#other-references"> + <tbody id="s.#longstatus-date"> <!-- 0 tests --> </tbody> - <tbody id="s.#abstract"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#editors-list"> + <tbody id="slongstatus-date.#editors-list"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="snormative-references.#CSS21"> <!-- 0 tests --> </tbody> - <tbody id="s.#longstatus-date"> + <tbody id="snormative-references.#CSS3-TRANSITIONS"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="sother-references.#CSS3VAL"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="sother-references.#WCAG20"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-backgrounds-3_dev/html4/chapter-11.htm b/tests/wpt/css-tests/css-backgrounds-3_dev/html4/chapter-11.htm index eb1bb5c10a0..25765402e6a 100644 --- a/tests/wpt/css-tests/css-backgrounds-3_dev/html4/chapter-11.htm +++ b/tests/wpt/css-tests/css-backgrounds-3_dev/html4/chapter-11.htm @@ -39,64 +39,64 @@ <tbody id="s11.#other-references"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-CSS-2010"> + <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-CSS-SHAPES"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-CSS1"> + <tbody id="s.#editors-list"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-CSS21"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-CSS3-BREAK"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-CSS3-IMAGES"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-CSS3-TRANSITIONS"> + <tbody id="snormative-references.#ref-CSS21"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-CSS3COLOR"> + <tbody id="snormative-references.#ref-HTML401"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-HTML401"> + <tbody id="snormative-references.#ref-RFC2119"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-RFC2119"> + <tbody id="snormative-references.#ref-XHTML11"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-WCAG20"> + <tbody id="sother-references.#ref-CSS-2010"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-XHTML11"> + <tbody id="sother-references.#ref-CSS-SHAPES"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-XML11"> + <tbody id="sother-references.#ref-CSS1"> <!-- 0 tests --> </tbody> - <tbody id="s.#abstract"> + <tbody id="sother-references.#ref-CSS3-BREAK"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="sother-references.#ref-CSS3-IMAGES"> <!-- 0 tests --> </tbody> - <tbody id="s.#editors-list"> + <tbody id="sother-references.#ref-CSS3-TRANSITIONS"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="sother-references.#ref-CSS3COLOR"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="sother-references.#ref-WCAG20"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="sother-references.#ref-XML11"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> + <tbody id="sstatus.#w3c_process_revision"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-backgrounds-3_dev/xhtml1/chapter-11.xht b/tests/wpt/css-tests/css-backgrounds-3_dev/xhtml1/chapter-11.xht index 6aa97dd3639..89addb31f29 100644 --- a/tests/wpt/css-tests/css-backgrounds-3_dev/xhtml1/chapter-11.xht +++ b/tests/wpt/css-tests/css-backgrounds-3_dev/xhtml1/chapter-11.xht @@ -39,64 +39,64 @@ <tbody id="s11.#other-references"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-CSS-2010"> + <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-CSS-SHAPES"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-CSS1"> + <tbody id="s.#editors-list"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-CSS21"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-CSS3-BREAK"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-CSS3-IMAGES"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-CSS3-TRANSITIONS"> + <tbody id="snormative-references.#ref-CSS21"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-CSS3COLOR"> + <tbody id="snormative-references.#ref-HTML401"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-HTML401"> + <tbody id="snormative-references.#ref-RFC2119"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-RFC2119"> + <tbody id="snormative-references.#ref-XHTML11"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-WCAG20"> + <tbody id="sother-references.#ref-CSS-2010"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-XHTML11"> + <tbody id="sother-references.#ref-CSS-SHAPES"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-XML11"> + <tbody id="sother-references.#ref-CSS1"> <!-- 0 tests --> </tbody> - <tbody id="s.#abstract"> + <tbody id="sother-references.#ref-CSS3-BREAK"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="sother-references.#ref-CSS3-IMAGES"> <!-- 0 tests --> </tbody> - <tbody id="s.#editors-list"> + <tbody id="sother-references.#ref-CSS3-TRANSITIONS"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="sother-references.#ref-CSS3COLOR"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="sother-references.#ref-WCAG20"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="sother-references.#ref-XML11"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> + <tbody id="sstatus.#w3c_process_revision"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-backgrounds-3_dev/xhtml1print/chapter-11.xht b/tests/wpt/css-tests/css-backgrounds-3_dev/xhtml1print/chapter-11.xht index 6aa97dd3639..89addb31f29 100644 --- a/tests/wpt/css-tests/css-backgrounds-3_dev/xhtml1print/chapter-11.xht +++ b/tests/wpt/css-tests/css-backgrounds-3_dev/xhtml1print/chapter-11.xht @@ -39,64 +39,64 @@ <tbody id="s11.#other-references"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-CSS-2010"> + <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-CSS-SHAPES"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-CSS1"> + <tbody id="s.#editors-list"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-CSS21"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-CSS3-BREAK"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-CSS3-IMAGES"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-CSS3-TRANSITIONS"> + <tbody id="snormative-references.#ref-CSS21"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-CSS3COLOR"> + <tbody id="snormative-references.#ref-HTML401"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-HTML401"> + <tbody id="snormative-references.#ref-RFC2119"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-RFC2119"> + <tbody id="snormative-references.#ref-XHTML11"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-WCAG20"> + <tbody id="sother-references.#ref-CSS-2010"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-XHTML11"> + <tbody id="sother-references.#ref-CSS-SHAPES"> <!-- 0 tests --> </tbody> - <tbody id="s11.#ref-XML11"> + <tbody id="sother-references.#ref-CSS1"> <!-- 0 tests --> </tbody> - <tbody id="s.#abstract"> + <tbody id="sother-references.#ref-CSS3-BREAK"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="sother-references.#ref-CSS3-IMAGES"> <!-- 0 tests --> </tbody> - <tbody id="s.#editors-list"> + <tbody id="sother-references.#ref-CSS3-TRANSITIONS"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="sother-references.#ref-CSS3COLOR"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="sother-references.#ref-WCAG20"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="sother-references.#ref-XML11"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> + <tbody id="sstatus.#w3c_process_revision"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-break-3_dev/html/chapter-3.htm b/tests/wpt/css-tests/css-break-3_dev/html/chapter-3.htm index 20a30e358f9..8a2dbbf2aa4 100644 --- a/tests/wpt/css-tests/css-break-3_dev/html/chapter-3.htm +++ b/tests/wpt/css-tests/css-break-3_dev/html/chapter-3.htm @@ -63,42 +63,6 @@ <tbody id="s3.1.#region-break-values"> <!-- 0 tests --> </tbody> - <tbody id="s3.1.#valdef-break-before-auto"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.#valdef-break-before-avoid"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.#valdef-break-before-avoid-column"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.#valdef-break-before-avoid-page"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.#valdef-break-before-avoid-region"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.#valdef-break-before-column"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.#valdef-break-before-left"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.#valdef-break-before-page"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.#valdef-break-before-recto"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.#valdef-break-before-region"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.#valdef-break-before-right"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.#valdef-break-before-verso"> - <!-- 0 tests --> - </tbody> <tbody id="s3.2"> <tr><th colspan="4" scope="rowgroup"> <a href="#s3.2">+</a> diff --git a/tests/wpt/css-tests/css-break-3_dev/html/chapter-5.htm b/tests/wpt/css-tests/css-break-3_dev/html/chapter-5.htm index d89fd0352c1..25b98d3d27e 100644 --- a/tests/wpt/css-tests/css-break-3_dev/html/chapter-5.htm +++ b/tests/wpt/css-tests/css-break-3_dev/html/chapter-5.htm @@ -186,139 +186,175 @@ <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-backgrounds-3"> + <tbody id="s.#changes"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-cascade-3"> + <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-display-3"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-masking-1"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-page-3"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-position-3"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-regions-1"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-shapes-1"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-sizing-3"> + <tbody id="s.#tagline"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-writing-modes-3"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css21"> + <tbody id="scolumn-break-values.#valdef-break-before-avoid-column"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-flexbox"> + <tbody id="scolumn-break-values.#valdef-break-before-column"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-regions"> + <tbody id="sconform-responsible.#conform-future-proofing"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-sizing"> + <tbody id="sconform-responsible.#conform-partial"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-transforms"> + <tbody id="sconform-responsible.#conform-testing"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-writing-modes"> + <tbody id="sconformance.#conform-classes"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3bg"> + <tbody id="sconformance.#conform-responsible"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3col"> + <tbody id="sconformance.#cr-exit-criteria"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3page"> + <tbody id="sconformance.#document-conventions"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3text"> + <tbody id="sdocument-conventions.#example-a13d9f9a"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3val"> + <tbody id="sgeneric-break-values.#valdef-break-before-auto"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-rfc2119"> + <tbody id="sgeneric-break-values.#valdef-break-before-avoid"> <!-- 0 tests --> </tbody> - <tbody id="s.#changes"> + <tbody id="sindex.#index-defined-elsewhere"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-classes"> + <tbody id="sindex.#index-defined-here"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-future-proofing"> + <tbody id="sinformative.#biblio-css3-flexbox"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-partial"> + <tbody id="sinformative.#biblio-css3-sizing"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-responsible"> + <tbody id="sinformative.#biblio-css3-writing-modes"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-testing"> + <tbody id="sinformative.#biblio-css3text"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance"> + <tbody id="sinformative.#biblio-css3val"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="snormative.#biblio-css-backgrounds-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#cr-exit-criteria"> + <tbody id="snormative.#biblio-css-cascade-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#document-conventions"> + <tbody id="snormative.#biblio-css-display-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#example-a13d9f9a"> + <tbody id="snormative.#biblio-css-masking-1"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="snormative.#biblio-css-page-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-elsewhere"> + <tbody id="snormative.#biblio-css-position-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-here"> + <tbody id="snormative.#biblio-css-regions-1"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="snormative.#biblio-css-shapes-1"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="snormative.#biblio-css-sizing-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="snormative.#biblio-css-writing-modes-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="snormative.#biblio-css21"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#biblio-css3-regions"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="snormative.#biblio-css3-transforms"> <!-- 0 tests --> </tbody> - <tbody id="s.#tagline"> + <tbody id="snormative.#biblio-css3bg"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="snormative.#biblio-css3col"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3page"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-rfc2119"> + <!-- 0 tests --> + </tbody> + <tbody id="spage-break-values.#valdef-break-before-avoid-page"> + <!-- 0 tests --> + </tbody> + <tbody id="spage-break-values.#valdef-break-before-left"> + <!-- 0 tests --> + </tbody> + <tbody id="spage-break-values.#valdef-break-before-page"> + <!-- 0 tests --> + </tbody> + <tbody id="spage-break-values.#valdef-break-before-recto"> + <!-- 0 tests --> + </tbody> + <tbody id="spage-break-values.#valdef-break-before-right"> + <!-- 0 tests --> + </tbody> + <tbody id="spage-break-values.#valdef-break-before-verso"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#informative"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#normative"> + <!-- 0 tests --> + </tbody> + <tbody id="sregion-break-values.#valdef-break-before-avoid-region"> + <!-- 0 tests --> + </tbody> + <tbody id="sregion-break-values.#valdef-break-before-region"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> + <tbody id="sstatus.#w3c_process_revision"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-break-3_dev/xhtml1/chapter-3.xht b/tests/wpt/css-tests/css-break-3_dev/xhtml1/chapter-3.xht index 1e2c3f30380..e767d5e23e7 100644 --- a/tests/wpt/css-tests/css-break-3_dev/xhtml1/chapter-3.xht +++ b/tests/wpt/css-tests/css-break-3_dev/xhtml1/chapter-3.xht @@ -63,42 +63,6 @@ <tbody id="s3.1.#region-break-values"> <!-- 0 tests --> </tbody> - <tbody id="s3.1.#valdef-break-before-auto"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.#valdef-break-before-avoid"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.#valdef-break-before-avoid-column"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.#valdef-break-before-avoid-page"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.#valdef-break-before-avoid-region"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.#valdef-break-before-column"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.#valdef-break-before-left"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.#valdef-break-before-page"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.#valdef-break-before-recto"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.#valdef-break-before-region"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.#valdef-break-before-right"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.#valdef-break-before-verso"> - <!-- 0 tests --> - </tbody> <tbody id="s3.2"> <tr><th colspan="4" scope="rowgroup"> <a href="#s3.2">+</a> diff --git a/tests/wpt/css-tests/css-break-3_dev/xhtml1/chapter-5.xht b/tests/wpt/css-tests/css-break-3_dev/xhtml1/chapter-5.xht index a8afffb05ff..96866e44217 100644 --- a/tests/wpt/css-tests/css-break-3_dev/xhtml1/chapter-5.xht +++ b/tests/wpt/css-tests/css-break-3_dev/xhtml1/chapter-5.xht @@ -186,139 +186,175 @@ <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-backgrounds-3"> + <tbody id="s.#changes"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-cascade-3"> + <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-display-3"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-masking-1"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-page-3"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-position-3"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-regions-1"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-shapes-1"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-sizing-3"> + <tbody id="s.#tagline"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-writing-modes-3"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css21"> + <tbody id="scolumn-break-values.#valdef-break-before-avoid-column"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-flexbox"> + <tbody id="scolumn-break-values.#valdef-break-before-column"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-regions"> + <tbody id="sconform-responsible.#conform-future-proofing"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-sizing"> + <tbody id="sconform-responsible.#conform-partial"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-transforms"> + <tbody id="sconform-responsible.#conform-testing"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-writing-modes"> + <tbody id="sconformance.#conform-classes"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3bg"> + <tbody id="sconformance.#conform-responsible"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3col"> + <tbody id="sconformance.#cr-exit-criteria"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3page"> + <tbody id="sconformance.#document-conventions"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3text"> + <tbody id="sdocument-conventions.#example-a13d9f9a"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3val"> + <tbody id="sgeneric-break-values.#valdef-break-before-auto"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-rfc2119"> + <tbody id="sgeneric-break-values.#valdef-break-before-avoid"> <!-- 0 tests --> </tbody> - <tbody id="s.#changes"> + <tbody id="sindex.#index-defined-elsewhere"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-classes"> + <tbody id="sindex.#index-defined-here"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-future-proofing"> + <tbody id="sinformative.#biblio-css3-flexbox"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-partial"> + <tbody id="sinformative.#biblio-css3-sizing"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-responsible"> + <tbody id="sinformative.#biblio-css3-writing-modes"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-testing"> + <tbody id="sinformative.#biblio-css3text"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance"> + <tbody id="sinformative.#biblio-css3val"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="snormative.#biblio-css-backgrounds-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#cr-exit-criteria"> + <tbody id="snormative.#biblio-css-cascade-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#document-conventions"> + <tbody id="snormative.#biblio-css-display-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#example-a13d9f9a"> + <tbody id="snormative.#biblio-css-masking-1"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="snormative.#biblio-css-page-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-elsewhere"> + <tbody id="snormative.#biblio-css-position-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-here"> + <tbody id="snormative.#biblio-css-regions-1"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="snormative.#biblio-css-shapes-1"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="snormative.#biblio-css-sizing-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="snormative.#biblio-css-writing-modes-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="snormative.#biblio-css21"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#biblio-css3-regions"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="snormative.#biblio-css3-transforms"> <!-- 0 tests --> </tbody> - <tbody id="s.#tagline"> + <tbody id="snormative.#biblio-css3bg"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="snormative.#biblio-css3col"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3page"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-rfc2119"> + <!-- 0 tests --> + </tbody> + <tbody id="spage-break-values.#valdef-break-before-avoid-page"> + <!-- 0 tests --> + </tbody> + <tbody id="spage-break-values.#valdef-break-before-left"> + <!-- 0 tests --> + </tbody> + <tbody id="spage-break-values.#valdef-break-before-page"> + <!-- 0 tests --> + </tbody> + <tbody id="spage-break-values.#valdef-break-before-recto"> + <!-- 0 tests --> + </tbody> + <tbody id="spage-break-values.#valdef-break-before-right"> + <!-- 0 tests --> + </tbody> + <tbody id="spage-break-values.#valdef-break-before-verso"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#informative"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#normative"> + <!-- 0 tests --> + </tbody> + <tbody id="sregion-break-values.#valdef-break-before-avoid-region"> + <!-- 0 tests --> + </tbody> + <tbody id="sregion-break-values.#valdef-break-before-region"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> + <tbody id="sstatus.#w3c_process_revision"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-break-3_dev/xhtml1print/chapter-3.xht b/tests/wpt/css-tests/css-break-3_dev/xhtml1print/chapter-3.xht index 1e2c3f30380..e767d5e23e7 100644 --- a/tests/wpt/css-tests/css-break-3_dev/xhtml1print/chapter-3.xht +++ b/tests/wpt/css-tests/css-break-3_dev/xhtml1print/chapter-3.xht @@ -63,42 +63,6 @@ <tbody id="s3.1.#region-break-values"> <!-- 0 tests --> </tbody> - <tbody id="s3.1.#valdef-break-before-auto"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.#valdef-break-before-avoid"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.#valdef-break-before-avoid-column"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.#valdef-break-before-avoid-page"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.#valdef-break-before-avoid-region"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.#valdef-break-before-column"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.#valdef-break-before-left"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.#valdef-break-before-page"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.#valdef-break-before-recto"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.#valdef-break-before-region"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.#valdef-break-before-right"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.#valdef-break-before-verso"> - <!-- 0 tests --> - </tbody> <tbody id="s3.2"> <tr><th colspan="4" scope="rowgroup"> <a href="#s3.2">+</a> diff --git a/tests/wpt/css-tests/css-break-3_dev/xhtml1print/chapter-5.xht b/tests/wpt/css-tests/css-break-3_dev/xhtml1print/chapter-5.xht index a8afffb05ff..96866e44217 100644 --- a/tests/wpt/css-tests/css-break-3_dev/xhtml1print/chapter-5.xht +++ b/tests/wpt/css-tests/css-break-3_dev/xhtml1print/chapter-5.xht @@ -186,139 +186,175 @@ <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-backgrounds-3"> + <tbody id="s.#changes"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-cascade-3"> + <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-display-3"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-masking-1"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-page-3"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-position-3"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-regions-1"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-shapes-1"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-sizing-3"> + <tbody id="s.#tagline"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-writing-modes-3"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css21"> + <tbody id="scolumn-break-values.#valdef-break-before-avoid-column"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-flexbox"> + <tbody id="scolumn-break-values.#valdef-break-before-column"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-regions"> + <tbody id="sconform-responsible.#conform-future-proofing"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-sizing"> + <tbody id="sconform-responsible.#conform-partial"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-transforms"> + <tbody id="sconform-responsible.#conform-testing"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-writing-modes"> + <tbody id="sconformance.#conform-classes"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3bg"> + <tbody id="sconformance.#conform-responsible"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3col"> + <tbody id="sconformance.#cr-exit-criteria"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3page"> + <tbody id="sconformance.#document-conventions"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3text"> + <tbody id="sdocument-conventions.#example-a13d9f9a"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3val"> + <tbody id="sgeneric-break-values.#valdef-break-before-auto"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-rfc2119"> + <tbody id="sgeneric-break-values.#valdef-break-before-avoid"> <!-- 0 tests --> </tbody> - <tbody id="s.#changes"> + <tbody id="sindex.#index-defined-elsewhere"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-classes"> + <tbody id="sindex.#index-defined-here"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-future-proofing"> + <tbody id="sinformative.#biblio-css3-flexbox"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-partial"> + <tbody id="sinformative.#biblio-css3-sizing"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-responsible"> + <tbody id="sinformative.#biblio-css3-writing-modes"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-testing"> + <tbody id="sinformative.#biblio-css3text"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance"> + <tbody id="sinformative.#biblio-css3val"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="snormative.#biblio-css-backgrounds-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#cr-exit-criteria"> + <tbody id="snormative.#biblio-css-cascade-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#document-conventions"> + <tbody id="snormative.#biblio-css-display-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#example-a13d9f9a"> + <tbody id="snormative.#biblio-css-masking-1"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="snormative.#biblio-css-page-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-elsewhere"> + <tbody id="snormative.#biblio-css-position-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-here"> + <tbody id="snormative.#biblio-css-regions-1"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="snormative.#biblio-css-shapes-1"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="snormative.#biblio-css-sizing-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="snormative.#biblio-css-writing-modes-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="snormative.#biblio-css21"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#biblio-css3-regions"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="snormative.#biblio-css3-transforms"> <!-- 0 tests --> </tbody> - <tbody id="s.#tagline"> + <tbody id="snormative.#biblio-css3bg"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="snormative.#biblio-css3col"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3page"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-rfc2119"> + <!-- 0 tests --> + </tbody> + <tbody id="spage-break-values.#valdef-break-before-avoid-page"> + <!-- 0 tests --> + </tbody> + <tbody id="spage-break-values.#valdef-break-before-left"> + <!-- 0 tests --> + </tbody> + <tbody id="spage-break-values.#valdef-break-before-page"> + <!-- 0 tests --> + </tbody> + <tbody id="spage-break-values.#valdef-break-before-recto"> + <!-- 0 tests --> + </tbody> + <tbody id="spage-break-values.#valdef-break-before-right"> + <!-- 0 tests --> + </tbody> + <tbody id="spage-break-values.#valdef-break-before-verso"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#informative"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#normative"> + <!-- 0 tests --> + </tbody> + <tbody id="sregion-break-values.#valdef-break-before-avoid-region"> + <!-- 0 tests --> + </tbody> + <tbody id="sregion-break-values.#valdef-break-before-region"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> + <tbody id="sstatus.#w3c_process_revision"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-conditional-3_dev/html/chapter-9.htm b/tests/wpt/css-tests/css-conditional-3_dev/html/chapter-9.htm index 27a2c5796f5..b5c5599a765 100644 --- a/tests/wpt/css-tests/css-conditional-3_dev/html/chapter-9.htm +++ b/tests/wpt/css-tests/css-conditional-3_dev/html/chapter-9.htm @@ -33,55 +33,55 @@ <a href="https://www.w3.org/TR/css3-conditional/#changes">9 Changes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS1"> + <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS21"> + <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS3-ANIMATIONS"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS3-FONTS"> + <tbody id="s.#grammar"> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS3-TRANSITIONS"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#MEDIAQ"> + <tbody id="s.#longstatus-date"> <!-- 0 tests --> </tbody> - <tbody id="s.#RFC2119"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#abstract"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#acknowledgments"> + <tbody id="snormative-references.#CSS21"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="snormative-references.#CSS3-ANIMATIONS"> <!-- 0 tests --> </tbody> - <tbody id="s.#grammar"> + <tbody id="snormative-references.#CSS3-FONTS"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="snormative-references.#MEDIAQ"> <!-- 0 tests --> </tbody> - <tbody id="s.#longstatus-date"> + <tbody id="snormative-references.#RFC2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative-references"> + <tbody id="sother-references.#CSS1"> <!-- 0 tests --> </tbody> - <tbody id="s.#other-references"> + <tbody id="sother-references.#CSS3-TRANSITIONS"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="sreferences.#normative-references"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="sreferences.#other-references"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-conditional-3_dev/xhtml1/chapter-9.xht b/tests/wpt/css-tests/css-conditional-3_dev/xhtml1/chapter-9.xht index 5b285b4729d..0ca64583b57 100644 --- a/tests/wpt/css-tests/css-conditional-3_dev/xhtml1/chapter-9.xht +++ b/tests/wpt/css-tests/css-conditional-3_dev/xhtml1/chapter-9.xht @@ -33,55 +33,55 @@ <a href="https://www.w3.org/TR/css3-conditional/#changes">9 Changes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS1"> + <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS21"> + <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS3-ANIMATIONS"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS3-FONTS"> + <tbody id="s.#grammar"> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS3-TRANSITIONS"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#MEDIAQ"> + <tbody id="s.#longstatus-date"> <!-- 0 tests --> </tbody> - <tbody id="s.#RFC2119"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#abstract"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#acknowledgments"> + <tbody id="snormative-references.#CSS21"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="snormative-references.#CSS3-ANIMATIONS"> <!-- 0 tests --> </tbody> - <tbody id="s.#grammar"> + <tbody id="snormative-references.#CSS3-FONTS"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="snormative-references.#MEDIAQ"> <!-- 0 tests --> </tbody> - <tbody id="s.#longstatus-date"> + <tbody id="snormative-references.#RFC2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative-references"> + <tbody id="sother-references.#CSS1"> <!-- 0 tests --> </tbody> - <tbody id="s.#other-references"> + <tbody id="sother-references.#CSS3-TRANSITIONS"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="sreferences.#normative-references"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="sreferences.#other-references"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-conditional-3_dev/xhtml1print/chapter-9.xht b/tests/wpt/css-tests/css-conditional-3_dev/xhtml1print/chapter-9.xht index 5b285b4729d..0ca64583b57 100644 --- a/tests/wpt/css-tests/css-conditional-3_dev/xhtml1print/chapter-9.xht +++ b/tests/wpt/css-tests/css-conditional-3_dev/xhtml1print/chapter-9.xht @@ -33,55 +33,55 @@ <a href="https://www.w3.org/TR/css3-conditional/#changes">9 Changes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS1"> + <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS21"> + <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS3-ANIMATIONS"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS3-FONTS"> + <tbody id="s.#grammar"> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS3-TRANSITIONS"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#MEDIAQ"> + <tbody id="s.#longstatus-date"> <!-- 0 tests --> </tbody> - <tbody id="s.#RFC2119"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#abstract"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#acknowledgments"> + <tbody id="snormative-references.#CSS21"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="snormative-references.#CSS3-ANIMATIONS"> <!-- 0 tests --> </tbody> - <tbody id="s.#grammar"> + <tbody id="snormative-references.#CSS3-FONTS"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="snormative-references.#MEDIAQ"> <!-- 0 tests --> </tbody> - <tbody id="s.#longstatus-date"> + <tbody id="snormative-references.#RFC2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative-references"> + <tbody id="sother-references.#CSS1"> <!-- 0 tests --> </tbody> - <tbody id="s.#other-references"> + <tbody id="sother-references.#CSS3-TRANSITIONS"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="sreferences.#normative-references"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="sreferences.#other-references"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-counter-styles-3_dev/html/chapter-10.htm b/tests/wpt/css-tests/css-counter-styles-3_dev/html/chapter-10.htm index 4b85366dc1b..afd7a28731b 100644 --- a/tests/wpt/css-tests/css-counter-styles-3_dev/html/chapter-10.htm +++ b/tests/wpt/css-tests/css-counter-styles-3_dev/html/chapter-10.htm @@ -39,121 +39,121 @@ <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-animations-1"> + <tbody id="s.#changes"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-content-3"> + <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-images-3"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-lists-3"> + <tbody id="s.#idl-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-pseudo-4"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-syntax-3"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-text-3"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-values-3"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css21"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-writing-modes"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3list"> + <tbody id="sconformance.#conformance-classes"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-cssom-1"> + <tbody id="sconformance.#conventions"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-dom-ls"> + <tbody id="sconformance.#cr-exit-criteria"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-mediaqueries-4"> + <tbody id="sconformance.#experimental"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-predefined-counter-styles"> + <tbody id="sconformance.#partial"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-rfc2119"> + <tbody id="sconformance.#testing"> <!-- 0 tests --> </tbody> - <tbody id="s.#changes"> + <tbody id="sconventions.#example-f839f6c8"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance"> + <tbody id="sindex.#index-defined-elsewhere"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> + <tbody id="sindex.#index-defined-here"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="sinformative.#biblio-css3list"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> + <tbody id="sinformative.#biblio-predefined-counter-styles"> <!-- 0 tests --> </tbody> - <tbody id="s.#counter-style-descriptor-table"> + <tbody id="snormative.#biblio-css-animations-1"> <!-- 0 tests --> </tbody> - <tbody id="s.#cr-exit-criteria"> + <tbody id="snormative.#biblio-css-content-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#example-f839f6c8"> + <tbody id="snormative.#biblio-css-images-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#experimental"> + <tbody id="snormative.#biblio-css-lists-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#idl-index"> + <tbody id="snormative.#biblio-css-pseudo-4"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="snormative.#biblio-css-syntax-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-elsewhere"> + <tbody id="snormative.#biblio-css-text-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-here"> + <tbody id="snormative.#biblio-css-values-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="snormative.#biblio-css21"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="snormative.#biblio-css3-writing-modes"> <!-- 0 tests --> </tbody> - <tbody id="s.#partial"> + <tbody id="snormative.#biblio-cssom-1"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="snormative.#biblio-dom-ls"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="snormative.#biblio-mediaqueries-4"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#biblio-rfc2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="sproperty-index.#counter-style-descriptor-table"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> + <tbody id="sreferences.#informative"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> + <tbody id="sstatus.#w3c_process_revision"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-counter-styles-3_dev/xhtml1/chapter-10.xht b/tests/wpt/css-tests/css-counter-styles-3_dev/xhtml1/chapter-10.xht index 05a0aa2d12b..1c745b25f35 100644 --- a/tests/wpt/css-tests/css-counter-styles-3_dev/xhtml1/chapter-10.xht +++ b/tests/wpt/css-tests/css-counter-styles-3_dev/xhtml1/chapter-10.xht @@ -39,121 +39,121 @@ <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-animations-1"> + <tbody id="s.#changes"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-content-3"> + <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-images-3"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-lists-3"> + <tbody id="s.#idl-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-pseudo-4"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-syntax-3"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-text-3"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-values-3"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css21"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-writing-modes"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3list"> + <tbody id="sconformance.#conformance-classes"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-cssom-1"> + <tbody id="sconformance.#conventions"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-dom-ls"> + <tbody id="sconformance.#cr-exit-criteria"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-mediaqueries-4"> + <tbody id="sconformance.#experimental"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-predefined-counter-styles"> + <tbody id="sconformance.#partial"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-rfc2119"> + <tbody id="sconformance.#testing"> <!-- 0 tests --> </tbody> - <tbody id="s.#changes"> + <tbody id="sconventions.#example-f839f6c8"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance"> + <tbody id="sindex.#index-defined-elsewhere"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> + <tbody id="sindex.#index-defined-here"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="sinformative.#biblio-css3list"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> + <tbody id="sinformative.#biblio-predefined-counter-styles"> <!-- 0 tests --> </tbody> - <tbody id="s.#counter-style-descriptor-table"> + <tbody id="snormative.#biblio-css-animations-1"> <!-- 0 tests --> </tbody> - <tbody id="s.#cr-exit-criteria"> + <tbody id="snormative.#biblio-css-content-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#example-f839f6c8"> + <tbody id="snormative.#biblio-css-images-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#experimental"> + <tbody id="snormative.#biblio-css-lists-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#idl-index"> + <tbody id="snormative.#biblio-css-pseudo-4"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="snormative.#biblio-css-syntax-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-elsewhere"> + <tbody id="snormative.#biblio-css-text-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-here"> + <tbody id="snormative.#biblio-css-values-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="snormative.#biblio-css21"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="snormative.#biblio-css3-writing-modes"> <!-- 0 tests --> </tbody> - <tbody id="s.#partial"> + <tbody id="snormative.#biblio-cssom-1"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="snormative.#biblio-dom-ls"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="snormative.#biblio-mediaqueries-4"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#biblio-rfc2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="sproperty-index.#counter-style-descriptor-table"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> + <tbody id="sreferences.#informative"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> + <tbody id="sstatus.#w3c_process_revision"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-counter-styles-3_dev/xhtml1print/chapter-10.xht b/tests/wpt/css-tests/css-counter-styles-3_dev/xhtml1print/chapter-10.xht index 05a0aa2d12b..1c745b25f35 100644 --- a/tests/wpt/css-tests/css-counter-styles-3_dev/xhtml1print/chapter-10.xht +++ b/tests/wpt/css-tests/css-counter-styles-3_dev/xhtml1print/chapter-10.xht @@ -39,121 +39,121 @@ <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-animations-1"> + <tbody id="s.#changes"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-content-3"> + <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-images-3"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-lists-3"> + <tbody id="s.#idl-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-pseudo-4"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-syntax-3"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-text-3"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-values-3"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css21"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-writing-modes"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3list"> + <tbody id="sconformance.#conformance-classes"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-cssom-1"> + <tbody id="sconformance.#conventions"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-dom-ls"> + <tbody id="sconformance.#cr-exit-criteria"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-mediaqueries-4"> + <tbody id="sconformance.#experimental"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-predefined-counter-styles"> + <tbody id="sconformance.#partial"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-rfc2119"> + <tbody id="sconformance.#testing"> <!-- 0 tests --> </tbody> - <tbody id="s.#changes"> + <tbody id="sconventions.#example-f839f6c8"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance"> + <tbody id="sindex.#index-defined-elsewhere"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> + <tbody id="sindex.#index-defined-here"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="sinformative.#biblio-css3list"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> + <tbody id="sinformative.#biblio-predefined-counter-styles"> <!-- 0 tests --> </tbody> - <tbody id="s.#counter-style-descriptor-table"> + <tbody id="snormative.#biblio-css-animations-1"> <!-- 0 tests --> </tbody> - <tbody id="s.#cr-exit-criteria"> + <tbody id="snormative.#biblio-css-content-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#example-f839f6c8"> + <tbody id="snormative.#biblio-css-images-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#experimental"> + <tbody id="snormative.#biblio-css-lists-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#idl-index"> + <tbody id="snormative.#biblio-css-pseudo-4"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="snormative.#biblio-css-syntax-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-elsewhere"> + <tbody id="snormative.#biblio-css-text-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-here"> + <tbody id="snormative.#biblio-css-values-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="snormative.#biblio-css21"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="snormative.#biblio-css3-writing-modes"> <!-- 0 tests --> </tbody> - <tbody id="s.#partial"> + <tbody id="snormative.#biblio-cssom-1"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="snormative.#biblio-dom-ls"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="snormative.#biblio-mediaqueries-4"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#biblio-rfc2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="sproperty-index.#counter-style-descriptor-table"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> + <tbody id="sreferences.#informative"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> + <tbody id="sstatus.#w3c_process_revision"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-exclusions-1_dev/html/chapter-3.htm b/tests/wpt/css-tests/css-exclusions-1_dev/html/chapter-3.htm index 42a065d6c40..ce54084d85e 100644 --- a/tests/wpt/css-tests/css-exclusions-1_dev/html/chapter-3.htm +++ b/tests/wpt/css-tests/css-exclusions-1_dev/html/chapter-3.htm @@ -334,73 +334,73 @@ <tbody id="s.#acks"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css21"> + <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-flexbox"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-grid-layout"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-writing-modes"> + <tbody id="s.#issues-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3box"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-rfc2119"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> + <tbody id="sconformance.#conformance-classes"> <!-- 0 tests --> </tbody> - <tbody id="s.#experimental"> + <tbody id="sconformance.#conventions"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="sconformance.#experimental"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="sconformance.#partial"> <!-- 0 tests --> </tbody> - <tbody id="s.#issues-index"> + <tbody id="sconformance.#testing"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="sinformative.#biblio-css3-flexbox"> <!-- 0 tests --> </tbody> - <tbody id="s.#partial"> + <tbody id="sinformative.#biblio-css3-grid-layout"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="snormative.#biblio-css21"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="snormative.#biblio-css3-writing-modes"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#biblio-css3box"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="snormative.#biblio-rfc2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> + <tbody id="sreferences.#informative"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> + <tbody id="sstatus.#w3c_process_revision"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-exclusions-1_dev/xhtml1/chapter-3.xht b/tests/wpt/css-tests/css-exclusions-1_dev/xhtml1/chapter-3.xht index 0908041915b..5459aed9eb7 100644 --- a/tests/wpt/css-tests/css-exclusions-1_dev/xhtml1/chapter-3.xht +++ b/tests/wpt/css-tests/css-exclusions-1_dev/xhtml1/chapter-3.xht @@ -334,73 +334,73 @@ <tbody id="s.#acks"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css21"> + <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-flexbox"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-grid-layout"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-writing-modes"> + <tbody id="s.#issues-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3box"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-rfc2119"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> + <tbody id="sconformance.#conformance-classes"> <!-- 0 tests --> </tbody> - <tbody id="s.#experimental"> + <tbody id="sconformance.#conventions"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="sconformance.#experimental"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="sconformance.#partial"> <!-- 0 tests --> </tbody> - <tbody id="s.#issues-index"> + <tbody id="sconformance.#testing"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="sinformative.#biblio-css3-flexbox"> <!-- 0 tests --> </tbody> - <tbody id="s.#partial"> + <tbody id="sinformative.#biblio-css3-grid-layout"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="snormative.#biblio-css21"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="snormative.#biblio-css3-writing-modes"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#biblio-css3box"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="snormative.#biblio-rfc2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> + <tbody id="sreferences.#informative"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> + <tbody id="sstatus.#w3c_process_revision"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-exclusions-1_dev/xhtml1print/chapter-3.xht b/tests/wpt/css-tests/css-exclusions-1_dev/xhtml1print/chapter-3.xht index 0908041915b..5459aed9eb7 100644 --- a/tests/wpt/css-tests/css-exclusions-1_dev/xhtml1print/chapter-3.xht +++ b/tests/wpt/css-tests/css-exclusions-1_dev/xhtml1print/chapter-3.xht @@ -334,73 +334,73 @@ <tbody id="s.#acks"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css21"> + <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-flexbox"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-grid-layout"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-writing-modes"> + <tbody id="s.#issues-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3box"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-rfc2119"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> + <tbody id="sconformance.#conformance-classes"> <!-- 0 tests --> </tbody> - <tbody id="s.#experimental"> + <tbody id="sconformance.#conventions"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="sconformance.#experimental"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="sconformance.#partial"> <!-- 0 tests --> </tbody> - <tbody id="s.#issues-index"> + <tbody id="sconformance.#testing"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="sinformative.#biblio-css3-flexbox"> <!-- 0 tests --> </tbody> - <tbody id="s.#partial"> + <tbody id="sinformative.#biblio-css3-grid-layout"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="snormative.#biblio-css21"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="snormative.#biblio-css3-writing-modes"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#biblio-css3box"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="snormative.#biblio-rfc2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> + <tbody id="sreferences.#informative"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> + <tbody id="sstatus.#w3c_process_revision"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-flexbox-1_dev/html/chapter-11.htm b/tests/wpt/css-tests/css-flexbox-1_dev/html/chapter-11.htm index 5d8e74ea347..d4814cafe8e 100644 --- a/tests/wpt/css-tests/css-flexbox-1_dev/html/chapter-11.htm +++ b/tests/wpt/css-tests/css-flexbox-1_dev/html/chapter-11.htm @@ -39,351 +39,21 @@ <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-align-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-break-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-cascade-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-display-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-images-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-pseudo-4"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-sizing-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-text-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-ui-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-values-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-writing-modes-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css21"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-align"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-break"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-display"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-sizing"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-writing-modes"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3col"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3ui"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-html5"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-rfc2119"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-atomic-painting"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-flex-basis-zero"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-flex-continuity"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-flex-line-bug"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-flex-line-floor"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-intrinsic-ratio"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-intrinsic-sizes"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-main-depend-cross"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-min-width"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-percent-margins"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-static-pos"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-stretch-auto"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-stretch-definite"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-unresolvable-basis"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2014-blockify"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-abspos-ordering"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-clamp-single-line"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-clarify"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-clarify-stretched"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-css21-staticpos"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-definite-flexing"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-flex-animation"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-flex-basis-auto"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-max-intrinsic"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-min-auto-intrinsic-percentages"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-min-auto-main-size-basis"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-min-auto-not"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-min-auto-ratio"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-resolve-flex"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-substantive"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-algo-breaks"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-align-content-wrapping"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-clamped-specified"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-clarify"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-content"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-display-longhands"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-flexed-definite-container"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-inner-base-size"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-layout-vs-size"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-min-auto-specified-size"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-neither"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-substantive"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-table-wrappers"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-unclamped-size"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2015-a11y-tools"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2015-align-self-auto"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2015-anonymous-fixup"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2015-flex-basis-zero"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2015-intrinsic-cross-container"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2015-intrinsic-items"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2015-intrinsic-main-container"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2015-min-auto-intrinsic-percentages"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2015-min-max-constraint"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2015-percentage-margins"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201505-clarify"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201505-substantive"> - <!-- 0 tests --> - </tbody> <tbody id="s.#changes"> <!-- 0 tests --> </tbody> - <tbody id="s.#changes-2012"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#changes-2014-clarify"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#changes-2014-substantive"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#changes-201403"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#changes-201409"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#changes-2015-first-fragment"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#changes-201505"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-abspos-items"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-clamping"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-display-blockification"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-first-line-letter"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-flex-container-sizing"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-float-display"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-line-breaking"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-overflow-flex-containers"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-painting-order"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-stretch-computed-auto"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-table-anon-boxes"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-white-space"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#conform-classes"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#conform-future-proofing"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#conform-partial"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#conform-responsible"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#conform-testing"> - <!-- 0 tests --> - </tbody> <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#cr-exit-criteria"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#document-conventions"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#example-a13d9f9a"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#example-cd819179"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#example-e79a6187"> - <!-- 0 tests --> - </tbody> <tbody id="s.#example-ede42902"> <!-- 0 tests --> </tbody> <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-elsewhere"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#index-defined-here"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#informative"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#normative"> - <!-- 0 tests --> - </tbody> <tbody id="s.#overview-example"> <!-- 0 tests --> </tbody> @@ -408,12 +78,6 @@ <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#toc"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#w3c_process_revision"> - <!-- 0 tests --> - </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-flexbox-1_dev/html/chapter-A.htm b/tests/wpt/css-tests/css-flexbox-1_dev/html/chapter-A.htm index ffd6a223a92..ba320a0a669 100644 --- a/tests/wpt/css-tests/css-flexbox-1_dev/html/chapter-A.htm +++ b/tests/wpt/css-tests/css-flexbox-1_dev/html/chapter-A.htm @@ -42,6 +42,342 @@ <tbody id="sA.#axis-mapping-table-ja"> <!-- 0 tests --> </tbody> + <tbody id="schange-201403-clarify.#change-201403-abspos-ordering"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-clarify.#change-201403-clarify-stretched"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-clarify.#change-201403-css21-staticpos"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-substantive.#change-201403-clamp-single-line"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-substantive.#change-201403-definite-flexing"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-substantive.#change-201403-flex-animation"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-substantive.#change-201403-flex-basis-auto"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-substantive.#change-201403-max-intrinsic"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-substantive.#change-201403-min-auto-intrinsic-percentages"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-substantive.#change-201403-min-auto-main-size-basis"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-substantive.#change-201403-min-auto-not"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-substantive.#change-201403-min-auto-ratio"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-substantive.#change-201403-resolve-flex"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-clarify.#change-201409-clamped-specified"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-clarify.#change-201409-display-longhands"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-clarify.#change-201409-layout-vs-size"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-clarify.#change-201409-table-wrappers"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-clarify.#change-201409-unclamped-size"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-substantive.#change-2014-blockify"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-substantive.#change-201409-algo-breaks"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-substantive.#change-201409-align-content-wrapping"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-substantive.#change-201409-content"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-substantive.#change-201409-flexed-definite-container"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-substantive.#change-201409-inner-base-size"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-substantive.#change-201409-min-auto-specified-size"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-substantive.#change-201409-neither"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#change-2015-a11y-tools"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#change-2015-align-self-auto"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#change-2015-anonymous-fixup"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#change-2015-flex-basis-zero"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#change-2015-intrinsic-cross-container"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#change-2015-intrinsic-items"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#change-2015-intrinsic-main-container"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#change-2015-min-auto-intrinsic-percentages"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#change-2015-min-max-constraint"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#change-2015-percentage-margins"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#changes-2015-first-fragment"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#example-e79a6187"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges.#changes-2012"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges.#changes-201403"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges.#changes-201409"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges.#changes-201505"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2012.#changes-2014-clarify"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2012.#changes-2014-substantive"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-abspos-items"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-clamping"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-display-blockification"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-first-line-letter"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-flex-container-sizing"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-float-display"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-line-breaking"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-overflow-flex-containers"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-painting-order"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-stretch-computed-auto"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-table-anon-boxes"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-white-space"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-atomic-painting"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-flex-basis-zero"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-flex-continuity"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-flex-line-bug"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-flex-line-floor"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-intrinsic-ratio"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-intrinsic-sizes"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-main-depend-cross"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-min-width"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-percent-margins"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-static-pos"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-stretch-auto"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-stretch-definite"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-unresolvable-basis"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#example-cd819179"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-201403.#change-201403-clarify"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-201403.#change-201403-substantive"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-201409.#change-201409-clarify"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-201409.#change-201409-substantive"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-201505.#change-201505-clarify"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-201505.#change-201505-substantive"> + <!-- 0 tests --> + </tbody> + <tbody id="sconform-responsible.#conform-future-proofing"> + <!-- 0 tests --> + </tbody> + <tbody id="sconform-responsible.#conform-partial"> + <!-- 0 tests --> + </tbody> + <tbody id="sconform-responsible.#conform-testing"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conform-classes"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conform-responsible"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#cr-exit-criteria"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#document-conventions"> + <!-- 0 tests --> + </tbody> + <tbody id="sdocument-conventions.#example-a13d9f9a"> + <!-- 0 tests --> + </tbody> + <tbody id="sindex.#index-defined-elsewhere"> + <!-- 0 tests --> + </tbody> + <tbody id="sindex.#index-defined-here"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css3-align"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css3ui"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-html5"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-align-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-break-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-cascade-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-display-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-images-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-pseudo-4"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-sizing-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-text-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-ui-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-values-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-writing-modes-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css21"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-break"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-display"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-sizing"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-writing-modes"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3col"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-rfc2119"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#informative"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#normative"> + <!-- 0 tests --> + </tbody> + <tbody id="sstatus.#toc"> + <!-- 0 tests --> + </tbody> + <tbody id="sstatus.#w3c_process_revision"> + <!-- 0 tests --> + </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-flexbox-1_dev/html/flexbox_computedstyle_flex-basis-percent.htm b/tests/wpt/css-tests/css-flexbox-1_dev/html/flexbox_computedstyle_flex-basis-percent.htm index 4b95fae9b5b..a87d086874d 100644 --- a/tests/wpt/css-tests/css-flexbox-1_dev/html/flexbox_computedstyle_flex-basis-percent.htm +++ b/tests/wpt/css-tests/css-flexbox-1_dev/html/flexbox_computedstyle_flex-basis-percent.htm @@ -5,24 +5,23 @@ <link href="reference/ref-pass-body.htm" rel="match"> <meta content="dom" name="flags"> <style> -html { +body { display: flex; width: 100px; } -body { +div { color: red; - margin: 0; flex-basis: 100%; } .PASS {color: black;} </style> -</head><body><h1>FAIL, enable javascript</h1> +</head><body><div id="test"><h1>FAIL, enable javascript</h1> <script> - var body = document.body; + var test = document.getElementById("test"); var passed = - getComputedStyle(body).getPropertyValue("flex-basis") == + getComputedStyle(test).getPropertyValue("flex-basis") == "100%"; - body.textContent = body.className = passed ? "PASS" : "FAIL"; + test.textContent = test.className = passed ? "PASS" : "FAIL"; </script> -</body></html>
\ No newline at end of file +</body></html> diff --git a/tests/wpt/css-tests/css-flexbox-1_dev/xhtml1/chapter-11.xht b/tests/wpt/css-tests/css-flexbox-1_dev/xhtml1/chapter-11.xht index a702146daea..46f2234a8a4 100644 --- a/tests/wpt/css-tests/css-flexbox-1_dev/xhtml1/chapter-11.xht +++ b/tests/wpt/css-tests/css-flexbox-1_dev/xhtml1/chapter-11.xht @@ -39,351 +39,21 @@ <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-align-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-break-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-cascade-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-display-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-images-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-pseudo-4"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-sizing-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-text-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-ui-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-values-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-writing-modes-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css21"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-align"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-break"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-display"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-sizing"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-writing-modes"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3col"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3ui"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-html5"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-rfc2119"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-atomic-painting"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-flex-basis-zero"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-flex-continuity"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-flex-line-bug"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-flex-line-floor"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-intrinsic-ratio"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-intrinsic-sizes"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-main-depend-cross"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-min-width"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-percent-margins"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-static-pos"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-stretch-auto"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-stretch-definite"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-unresolvable-basis"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2014-blockify"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-abspos-ordering"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-clamp-single-line"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-clarify"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-clarify-stretched"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-css21-staticpos"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-definite-flexing"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-flex-animation"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-flex-basis-auto"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-max-intrinsic"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-min-auto-intrinsic-percentages"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-min-auto-main-size-basis"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-min-auto-not"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-min-auto-ratio"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-resolve-flex"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-substantive"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-algo-breaks"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-align-content-wrapping"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-clamped-specified"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-clarify"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-content"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-display-longhands"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-flexed-definite-container"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-inner-base-size"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-layout-vs-size"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-min-auto-specified-size"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-neither"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-substantive"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-table-wrappers"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-unclamped-size"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2015-a11y-tools"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2015-align-self-auto"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2015-anonymous-fixup"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2015-flex-basis-zero"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2015-intrinsic-cross-container"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2015-intrinsic-items"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2015-intrinsic-main-container"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2015-min-auto-intrinsic-percentages"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2015-min-max-constraint"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2015-percentage-margins"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201505-clarify"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201505-substantive"> - <!-- 0 tests --> - </tbody> <tbody id="s.#changes"> <!-- 0 tests --> </tbody> - <tbody id="s.#changes-2012"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#changes-2014-clarify"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#changes-2014-substantive"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#changes-201403"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#changes-201409"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#changes-2015-first-fragment"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#changes-201505"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-abspos-items"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-clamping"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-display-blockification"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-first-line-letter"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-flex-container-sizing"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-float-display"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-line-breaking"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-overflow-flex-containers"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-painting-order"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-stretch-computed-auto"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-table-anon-boxes"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-white-space"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#conform-classes"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#conform-future-proofing"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#conform-partial"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#conform-responsible"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#conform-testing"> - <!-- 0 tests --> - </tbody> <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#cr-exit-criteria"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#document-conventions"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#example-a13d9f9a"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#example-cd819179"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#example-e79a6187"> - <!-- 0 tests --> - </tbody> <tbody id="s.#example-ede42902"> <!-- 0 tests --> </tbody> <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-elsewhere"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#index-defined-here"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#informative"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#normative"> - <!-- 0 tests --> - </tbody> <tbody id="s.#overview-example"> <!-- 0 tests --> </tbody> @@ -408,12 +78,6 @@ <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#toc"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#w3c_process_revision"> - <!-- 0 tests --> - </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-flexbox-1_dev/xhtml1/chapter-A.xht b/tests/wpt/css-tests/css-flexbox-1_dev/xhtml1/chapter-A.xht index b8a302f79fb..217f09efd81 100644 --- a/tests/wpt/css-tests/css-flexbox-1_dev/xhtml1/chapter-A.xht +++ b/tests/wpt/css-tests/css-flexbox-1_dev/xhtml1/chapter-A.xht @@ -42,6 +42,342 @@ <tbody id="sA.#axis-mapping-table-ja"> <!-- 0 tests --> </tbody> + <tbody id="schange-201403-clarify.#change-201403-abspos-ordering"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-clarify.#change-201403-clarify-stretched"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-clarify.#change-201403-css21-staticpos"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-substantive.#change-201403-clamp-single-line"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-substantive.#change-201403-definite-flexing"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-substantive.#change-201403-flex-animation"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-substantive.#change-201403-flex-basis-auto"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-substantive.#change-201403-max-intrinsic"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-substantive.#change-201403-min-auto-intrinsic-percentages"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-substantive.#change-201403-min-auto-main-size-basis"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-substantive.#change-201403-min-auto-not"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-substantive.#change-201403-min-auto-ratio"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-substantive.#change-201403-resolve-flex"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-clarify.#change-201409-clamped-specified"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-clarify.#change-201409-display-longhands"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-clarify.#change-201409-layout-vs-size"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-clarify.#change-201409-table-wrappers"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-clarify.#change-201409-unclamped-size"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-substantive.#change-2014-blockify"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-substantive.#change-201409-algo-breaks"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-substantive.#change-201409-align-content-wrapping"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-substantive.#change-201409-content"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-substantive.#change-201409-flexed-definite-container"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-substantive.#change-201409-inner-base-size"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-substantive.#change-201409-min-auto-specified-size"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-substantive.#change-201409-neither"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#change-2015-a11y-tools"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#change-2015-align-self-auto"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#change-2015-anonymous-fixup"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#change-2015-flex-basis-zero"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#change-2015-intrinsic-cross-container"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#change-2015-intrinsic-items"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#change-2015-intrinsic-main-container"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#change-2015-min-auto-intrinsic-percentages"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#change-2015-min-max-constraint"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#change-2015-percentage-margins"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#changes-2015-first-fragment"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#example-e79a6187"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges.#changes-2012"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges.#changes-201403"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges.#changes-201409"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges.#changes-201505"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2012.#changes-2014-clarify"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2012.#changes-2014-substantive"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-abspos-items"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-clamping"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-display-blockification"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-first-line-letter"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-flex-container-sizing"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-float-display"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-line-breaking"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-overflow-flex-containers"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-painting-order"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-stretch-computed-auto"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-table-anon-boxes"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-white-space"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-atomic-painting"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-flex-basis-zero"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-flex-continuity"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-flex-line-bug"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-flex-line-floor"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-intrinsic-ratio"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-intrinsic-sizes"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-main-depend-cross"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-min-width"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-percent-margins"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-static-pos"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-stretch-auto"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-stretch-definite"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-unresolvable-basis"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#example-cd819179"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-201403.#change-201403-clarify"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-201403.#change-201403-substantive"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-201409.#change-201409-clarify"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-201409.#change-201409-substantive"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-201505.#change-201505-clarify"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-201505.#change-201505-substantive"> + <!-- 0 tests --> + </tbody> + <tbody id="sconform-responsible.#conform-future-proofing"> + <!-- 0 tests --> + </tbody> + <tbody id="sconform-responsible.#conform-partial"> + <!-- 0 tests --> + </tbody> + <tbody id="sconform-responsible.#conform-testing"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conform-classes"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conform-responsible"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#cr-exit-criteria"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#document-conventions"> + <!-- 0 tests --> + </tbody> + <tbody id="sdocument-conventions.#example-a13d9f9a"> + <!-- 0 tests --> + </tbody> + <tbody id="sindex.#index-defined-elsewhere"> + <!-- 0 tests --> + </tbody> + <tbody id="sindex.#index-defined-here"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css3-align"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css3ui"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-html5"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-align-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-break-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-cascade-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-display-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-images-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-pseudo-4"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-sizing-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-text-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-ui-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-values-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-writing-modes-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css21"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-break"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-display"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-sizing"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-writing-modes"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3col"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-rfc2119"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#informative"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#normative"> + <!-- 0 tests --> + </tbody> + <tbody id="sstatus.#toc"> + <!-- 0 tests --> + </tbody> + <tbody id="sstatus.#w3c_process_revision"> + <!-- 0 tests --> + </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-flexbox-1_dev/xhtml1print/chapter-11.xht b/tests/wpt/css-tests/css-flexbox-1_dev/xhtml1print/chapter-11.xht index a702146daea..46f2234a8a4 100644 --- a/tests/wpt/css-tests/css-flexbox-1_dev/xhtml1print/chapter-11.xht +++ b/tests/wpt/css-tests/css-flexbox-1_dev/xhtml1print/chapter-11.xht @@ -39,351 +39,21 @@ <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-align-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-break-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-cascade-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-display-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-images-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-pseudo-4"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-sizing-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-text-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-ui-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-values-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-writing-modes-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css21"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-align"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-break"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-display"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-sizing"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-writing-modes"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3col"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3ui"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-html5"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-rfc2119"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-atomic-painting"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-flex-basis-zero"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-flex-continuity"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-flex-line-bug"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-flex-line-floor"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-intrinsic-ratio"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-intrinsic-sizes"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-main-depend-cross"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-min-width"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-percent-margins"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-static-pos"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-stretch-auto"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-stretch-definite"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2012-unresolvable-basis"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2014-blockify"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-abspos-ordering"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-clamp-single-line"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-clarify"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-clarify-stretched"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-css21-staticpos"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-definite-flexing"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-flex-animation"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-flex-basis-auto"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-max-intrinsic"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-min-auto-intrinsic-percentages"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-min-auto-main-size-basis"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-min-auto-not"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-min-auto-ratio"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-resolve-flex"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201403-substantive"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-algo-breaks"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-align-content-wrapping"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-clamped-specified"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-clarify"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-content"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-display-longhands"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-flexed-definite-container"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-inner-base-size"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-layout-vs-size"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-min-auto-specified-size"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-neither"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-substantive"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-table-wrappers"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201409-unclamped-size"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2015-a11y-tools"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2015-align-self-auto"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2015-anonymous-fixup"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2015-flex-basis-zero"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2015-intrinsic-cross-container"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2015-intrinsic-items"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2015-intrinsic-main-container"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2015-min-auto-intrinsic-percentages"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2015-min-max-constraint"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-2015-percentage-margins"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201505-clarify"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#change-201505-substantive"> - <!-- 0 tests --> - </tbody> <tbody id="s.#changes"> <!-- 0 tests --> </tbody> - <tbody id="s.#changes-2012"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#changes-2014-clarify"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#changes-2014-substantive"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#changes-201403"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#changes-201409"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#changes-2015-first-fragment"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#changes-201505"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-abspos-items"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-clamping"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-display-blockification"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-first-line-letter"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-flex-container-sizing"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-float-display"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-line-breaking"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-overflow-flex-containers"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-painting-order"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-stretch-computed-auto"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-table-anon-boxes"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#clarify-2012-white-space"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#conform-classes"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#conform-future-proofing"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#conform-partial"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#conform-responsible"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#conform-testing"> - <!-- 0 tests --> - </tbody> <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#cr-exit-criteria"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#document-conventions"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#example-a13d9f9a"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#example-cd819179"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#example-e79a6187"> - <!-- 0 tests --> - </tbody> <tbody id="s.#example-ede42902"> <!-- 0 tests --> </tbody> <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-elsewhere"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#index-defined-here"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#informative"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#normative"> - <!-- 0 tests --> - </tbody> <tbody id="s.#overview-example"> <!-- 0 tests --> </tbody> @@ -408,12 +78,6 @@ <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#toc"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#w3c_process_revision"> - <!-- 0 tests --> - </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-flexbox-1_dev/xhtml1print/chapter-A.xht b/tests/wpt/css-tests/css-flexbox-1_dev/xhtml1print/chapter-A.xht index b8a302f79fb..217f09efd81 100644 --- a/tests/wpt/css-tests/css-flexbox-1_dev/xhtml1print/chapter-A.xht +++ b/tests/wpt/css-tests/css-flexbox-1_dev/xhtml1print/chapter-A.xht @@ -42,6 +42,342 @@ <tbody id="sA.#axis-mapping-table-ja"> <!-- 0 tests --> </tbody> + <tbody id="schange-201403-clarify.#change-201403-abspos-ordering"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-clarify.#change-201403-clarify-stretched"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-clarify.#change-201403-css21-staticpos"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-substantive.#change-201403-clamp-single-line"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-substantive.#change-201403-definite-flexing"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-substantive.#change-201403-flex-animation"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-substantive.#change-201403-flex-basis-auto"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-substantive.#change-201403-max-intrinsic"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-substantive.#change-201403-min-auto-intrinsic-percentages"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-substantive.#change-201403-min-auto-main-size-basis"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-substantive.#change-201403-min-auto-not"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-substantive.#change-201403-min-auto-ratio"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201403-substantive.#change-201403-resolve-flex"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-clarify.#change-201409-clamped-specified"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-clarify.#change-201409-display-longhands"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-clarify.#change-201409-layout-vs-size"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-clarify.#change-201409-table-wrappers"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-clarify.#change-201409-unclamped-size"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-substantive.#change-2014-blockify"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-substantive.#change-201409-algo-breaks"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-substantive.#change-201409-align-content-wrapping"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-substantive.#change-201409-content"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-substantive.#change-201409-flexed-definite-container"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-substantive.#change-201409-inner-base-size"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-substantive.#change-201409-min-auto-specified-size"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201409-substantive.#change-201409-neither"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#change-2015-a11y-tools"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#change-2015-align-self-auto"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#change-2015-anonymous-fixup"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#change-2015-flex-basis-zero"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#change-2015-intrinsic-cross-container"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#change-2015-intrinsic-items"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#change-2015-intrinsic-main-container"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#change-2015-min-auto-intrinsic-percentages"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#change-2015-min-max-constraint"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#change-2015-percentage-margins"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#changes-2015-first-fragment"> + <!-- 0 tests --> + </tbody> + <tbody id="schange-201505-substantive.#example-e79a6187"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges.#changes-2012"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges.#changes-201403"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges.#changes-201409"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges.#changes-201505"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2012.#changes-2014-clarify"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2012.#changes-2014-substantive"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-abspos-items"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-clamping"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-display-blockification"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-first-line-letter"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-flex-container-sizing"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-float-display"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-line-breaking"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-overflow-flex-containers"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-painting-order"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-stretch-computed-auto"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-table-anon-boxes"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-clarify.#clarify-2012-white-space"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-atomic-painting"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-flex-basis-zero"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-flex-continuity"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-flex-line-bug"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-flex-line-floor"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-intrinsic-ratio"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-intrinsic-sizes"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-main-depend-cross"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-min-width"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-percent-margins"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-static-pos"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-stretch-auto"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-stretch-definite"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#change-2012-unresolvable-basis"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-2014-substantive.#example-cd819179"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-201403.#change-201403-clarify"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-201403.#change-201403-substantive"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-201409.#change-201409-clarify"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-201409.#change-201409-substantive"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-201505.#change-201505-clarify"> + <!-- 0 tests --> + </tbody> + <tbody id="schanges-201505.#change-201505-substantive"> + <!-- 0 tests --> + </tbody> + <tbody id="sconform-responsible.#conform-future-proofing"> + <!-- 0 tests --> + </tbody> + <tbody id="sconform-responsible.#conform-partial"> + <!-- 0 tests --> + </tbody> + <tbody id="sconform-responsible.#conform-testing"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conform-classes"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conform-responsible"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#cr-exit-criteria"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#document-conventions"> + <!-- 0 tests --> + </tbody> + <tbody id="sdocument-conventions.#example-a13d9f9a"> + <!-- 0 tests --> + </tbody> + <tbody id="sindex.#index-defined-elsewhere"> + <!-- 0 tests --> + </tbody> + <tbody id="sindex.#index-defined-here"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css3-align"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css3ui"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-html5"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-align-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-break-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-cascade-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-display-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-images-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-pseudo-4"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-sizing-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-text-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-ui-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-values-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-writing-modes-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css21"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-break"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-display"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-sizing"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-writing-modes"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3col"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-rfc2119"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#informative"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#normative"> + <!-- 0 tests --> + </tbody> + <tbody id="sstatus.#toc"> + <!-- 0 tests --> + </tbody> + <tbody id="sstatus.#w3c_process_revision"> + <!-- 0 tests --> + </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-fonts-3_dev/html/chapter-3.htm b/tests/wpt/css-tests/css-fonts-3_dev/html/chapter-3.htm index 6fcdcc7c7c3..50e5874d818 100644 --- a/tests/wpt/css-tests/css-fonts-3_dev/html/chapter-3.htm +++ b/tests/wpt/css-tests/css-fonts-3_dev/html/chapter-3.htm @@ -1001,48 +1001,18 @@ <a href="https://www.w3.org/TR/css-fonts-3/#generic-font-families">3.1.1 Generic font families</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="s3.1.1.#cursive"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.1.#cursive-def"> - <!-- 0 tests --> - </tbody> <tbody id="s3.1.1.#cursive0"> <!-- 0 tests --> </tbody> - <tbody id="s3.1.1.#fantasy"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.1.#fantasy-def"> - <!-- 0 tests --> - </tbody> <tbody id="s3.1.1.#fantasy0"> <!-- 0 tests --> </tbody> - <tbody id="s3.1.1.#monospace"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.1.#monospace-def"> - <!-- 0 tests --> - </tbody> <tbody id="s3.1.1.#monospace0"> <!-- 0 tests --> </tbody> - <tbody id="s3.1.1.#sans-serif"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.1.#sans-serif-def"> - <!-- 0 tests --> - </tbody> <tbody id="s3.1.1.#sans-serif0"> <!-- 0 tests --> </tbody> - <tbody id="s3.1.1.#serif"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.1.#serif-def"> - <!-- 0 tests --> - </tbody> <tbody id="s3.1.1.#serif0"> <!-- 0 tests --> </tbody> diff --git a/tests/wpt/css-tests/css-fonts-3_dev/html/chapter-8.htm b/tests/wpt/css-tests/css-fonts-3_dev/html/chapter-8.htm index 9636aebf4cc..d9b7398c164 100644 --- a/tests/wpt/css-tests/css-fonts-3_dev/html/chapter-8.htm +++ b/tests/wpt/css-tests/css-fonts-3_dev/html/chapter-8.htm @@ -51,150 +51,33 @@ <tbody id="s8.2.#cssfontfeaturevaluesrule"> <!-- 0 tests --> </tbody> - <tbody id="s.#AAT-FEATURES"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#ARABIC-TYPO"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CHARMOD"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CHARMOD-NORM"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CJKV-INFO-PROCESSING"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CORS"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS21"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3-CONDITIONAL"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3TEXT"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3VAL"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#DIGITAL-TYPOGRAPHY"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#DOM-LEVEL-2-STYLE"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#ELEMTYPO"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#HTML5"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#LANGCULTTYPE"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#OPEN-FONT-FORMAT"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#OPENTYPE"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#OPENTYPE-FEATURES"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#OPENTYPE-FONT-GUIDE"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#RASTER-TRAGEDY"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#RFC2119"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#UAX15"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#UAX29"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#UNICODE"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#WINDOWS-GLYPH-PROC"> - <!-- 0 tests --> - </tbody> <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#atrisk"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#authoring-tool"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#authors"> - <!-- 0 tests --> - </tbody> <tbody id="s.#ch-ch-ch-changes"> <!-- 0 tests --> </tbody> <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> - <!-- 0 tests --> - </tbody> <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#cr-exit-criteria"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#experimental"> - <!-- 0 tests --> - </tbody> <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative-references"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#other-references"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#partial"> - <!-- 0 tests --> - </tbody> <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#recent-changes"> - <!-- 0 tests --> - </tbody> <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#renderer"> - <!-- 0 tests --> - </tbody> <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#style-sheet"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#testing"> - <!-- 0 tests --> - </tbody> <tbody id="s.#w3c-candidate-recommendation-3-october-2"> <!-- 0 tests --> </tbody> diff --git a/tests/wpt/css-tests/css-fonts-3_dev/html/chapter-A.htm b/tests/wpt/css-tests/css-fonts-3_dev/html/chapter-A.htm index 7530cc441bb..7473a87e76e 100644 --- a/tests/wpt/css-tests/css-fonts-3_dev/html/chapter-A.htm +++ b/tests/wpt/css-tests/css-fonts-3_dev/html/chapter-A.htm @@ -33,6 +33,153 @@ <a href="https://www.w3.org/TR/css-fonts-3/#platform-props-to-css">A Mapping platform font properties to CSS properties</a></th></tr> <!-- 0 tests --> </tbody> + <tbody id="sch-ch-ch-changes.#recent-changes"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conformance-classes"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conventions"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#cr-exit-criteria"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#experimental"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#partial"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#testing"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance-classes.#authoring-tool"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance-classes.#renderer"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance-classes.#style-sheet"> + <!-- 0 tests --> + </tbody> + <tbody id="scursive0.#cursive"> + <!-- 0 tests --> + </tbody> + <tbody id="scursive0.#cursive-def"> + <!-- 0 tests --> + </tbody> + <tbody id="sfantasy0.#fantasy"> + <!-- 0 tests --> + </tbody> + <tbody id="sfantasy0.#fantasy-def"> + <!-- 0 tests --> + </tbody> + <tbody id="smonospace0.#monospace"> + <!-- 0 tests --> + </tbody> + <tbody id="smonospace0.#monospace-def"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#CHARMOD"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#CORS"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#CSS21"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#CSS3VAL"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#HTML5"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#OPEN-FONT-FORMAT"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#OPENTYPE"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#OPENTYPE-FEATURES"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#RFC2119"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#UAX15"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#UAX29"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#UNICODE"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#AAT-FEATURES"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#ARABIC-TYPO"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#CHARMOD-NORM"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#CJKV-INFO-PROCESSING"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#CSS3-CONDITIONAL"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#CSS3TEXT"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#DIGITAL-TYPOGRAPHY"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#DOM-LEVEL-2-STYLE"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#ELEMTYPO"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#LANGCULTTYPE"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#OPENTYPE-FONT-GUIDE"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#RASTER-TRAGEDY"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#WINDOWS-GLYPH-PROC"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#normative-references"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#other-references"> + <!-- 0 tests --> + </tbody> + <tbody id="ssans-serif0.#sans-serif"> + <!-- 0 tests --> + </tbody> + <tbody id="ssans-serif0.#sans-serif-def"> + <!-- 0 tests --> + </tbody> + <tbody id="sserif0.#serif"> + <!-- 0 tests --> + </tbody> + <tbody id="sserif0.#serif-def"> + <!-- 0 tests --> + </tbody> + <tbody id="sstatus.#atrisk"> + <!-- 0 tests --> + </tbody> + <tbody id="sw3c-candidate-recommendation-3-october-2.#authors"> + <!-- 0 tests --> + </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-fonts-3_dev/xhtml1/chapter-3.xht b/tests/wpt/css-tests/css-fonts-3_dev/xhtml1/chapter-3.xht index 9790e150e86..66dd131f4d3 100644 --- a/tests/wpt/css-tests/css-fonts-3_dev/xhtml1/chapter-3.xht +++ b/tests/wpt/css-tests/css-fonts-3_dev/xhtml1/chapter-3.xht @@ -1001,48 +1001,18 @@ <a href="https://www.w3.org/TR/css-fonts-3/#generic-font-families">3.1.1 Generic font families</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="s3.1.1.#cursive"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.1.#cursive-def"> - <!-- 0 tests --> - </tbody> <tbody id="s3.1.1.#cursive0"> <!-- 0 tests --> </tbody> - <tbody id="s3.1.1.#fantasy"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.1.#fantasy-def"> - <!-- 0 tests --> - </tbody> <tbody id="s3.1.1.#fantasy0"> <!-- 0 tests --> </tbody> - <tbody id="s3.1.1.#monospace"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.1.#monospace-def"> - <!-- 0 tests --> - </tbody> <tbody id="s3.1.1.#monospace0"> <!-- 0 tests --> </tbody> - <tbody id="s3.1.1.#sans-serif"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.1.#sans-serif-def"> - <!-- 0 tests --> - </tbody> <tbody id="s3.1.1.#sans-serif0"> <!-- 0 tests --> </tbody> - <tbody id="s3.1.1.#serif"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.1.#serif-def"> - <!-- 0 tests --> - </tbody> <tbody id="s3.1.1.#serif0"> <!-- 0 tests --> </tbody> diff --git a/tests/wpt/css-tests/css-fonts-3_dev/xhtml1/chapter-8.xht b/tests/wpt/css-tests/css-fonts-3_dev/xhtml1/chapter-8.xht index 9d6da8544e0..97607699012 100644 --- a/tests/wpt/css-tests/css-fonts-3_dev/xhtml1/chapter-8.xht +++ b/tests/wpt/css-tests/css-fonts-3_dev/xhtml1/chapter-8.xht @@ -51,150 +51,33 @@ <tbody id="s8.2.#cssfontfeaturevaluesrule"> <!-- 0 tests --> </tbody> - <tbody id="s.#AAT-FEATURES"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#ARABIC-TYPO"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CHARMOD"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CHARMOD-NORM"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CJKV-INFO-PROCESSING"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CORS"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS21"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3-CONDITIONAL"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3TEXT"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3VAL"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#DIGITAL-TYPOGRAPHY"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#DOM-LEVEL-2-STYLE"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#ELEMTYPO"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#HTML5"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#LANGCULTTYPE"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#OPEN-FONT-FORMAT"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#OPENTYPE"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#OPENTYPE-FEATURES"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#OPENTYPE-FONT-GUIDE"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#RASTER-TRAGEDY"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#RFC2119"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#UAX15"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#UAX29"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#UNICODE"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#WINDOWS-GLYPH-PROC"> - <!-- 0 tests --> - </tbody> <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#atrisk"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#authoring-tool"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#authors"> - <!-- 0 tests --> - </tbody> <tbody id="s.#ch-ch-ch-changes"> <!-- 0 tests --> </tbody> <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> - <!-- 0 tests --> - </tbody> <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#cr-exit-criteria"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#experimental"> - <!-- 0 tests --> - </tbody> <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative-references"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#other-references"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#partial"> - <!-- 0 tests --> - </tbody> <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#recent-changes"> - <!-- 0 tests --> - </tbody> <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#renderer"> - <!-- 0 tests --> - </tbody> <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#style-sheet"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#testing"> - <!-- 0 tests --> - </tbody> <tbody id="s.#w3c-candidate-recommendation-3-october-2"> <!-- 0 tests --> </tbody> diff --git a/tests/wpt/css-tests/css-fonts-3_dev/xhtml1/chapter-A.xht b/tests/wpt/css-tests/css-fonts-3_dev/xhtml1/chapter-A.xht index 4d30b33f78c..7e83b939977 100644 --- a/tests/wpt/css-tests/css-fonts-3_dev/xhtml1/chapter-A.xht +++ b/tests/wpt/css-tests/css-fonts-3_dev/xhtml1/chapter-A.xht @@ -33,6 +33,153 @@ <a href="https://www.w3.org/TR/css-fonts-3/#platform-props-to-css">A Mapping platform font properties to CSS properties</a></th></tr> <!-- 0 tests --> </tbody> + <tbody id="sch-ch-ch-changes.#recent-changes"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conformance-classes"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conventions"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#cr-exit-criteria"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#experimental"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#partial"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#testing"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance-classes.#authoring-tool"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance-classes.#renderer"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance-classes.#style-sheet"> + <!-- 0 tests --> + </tbody> + <tbody id="scursive0.#cursive"> + <!-- 0 tests --> + </tbody> + <tbody id="scursive0.#cursive-def"> + <!-- 0 tests --> + </tbody> + <tbody id="sfantasy0.#fantasy"> + <!-- 0 tests --> + </tbody> + <tbody id="sfantasy0.#fantasy-def"> + <!-- 0 tests --> + </tbody> + <tbody id="smonospace0.#monospace"> + <!-- 0 tests --> + </tbody> + <tbody id="smonospace0.#monospace-def"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#CHARMOD"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#CORS"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#CSS21"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#CSS3VAL"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#HTML5"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#OPEN-FONT-FORMAT"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#OPENTYPE"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#OPENTYPE-FEATURES"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#RFC2119"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#UAX15"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#UAX29"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#UNICODE"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#AAT-FEATURES"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#ARABIC-TYPO"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#CHARMOD-NORM"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#CJKV-INFO-PROCESSING"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#CSS3-CONDITIONAL"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#CSS3TEXT"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#DIGITAL-TYPOGRAPHY"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#DOM-LEVEL-2-STYLE"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#ELEMTYPO"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#LANGCULTTYPE"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#OPENTYPE-FONT-GUIDE"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#RASTER-TRAGEDY"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#WINDOWS-GLYPH-PROC"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#normative-references"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#other-references"> + <!-- 0 tests --> + </tbody> + <tbody id="ssans-serif0.#sans-serif"> + <!-- 0 tests --> + </tbody> + <tbody id="ssans-serif0.#sans-serif-def"> + <!-- 0 tests --> + </tbody> + <tbody id="sserif0.#serif"> + <!-- 0 tests --> + </tbody> + <tbody id="sserif0.#serif-def"> + <!-- 0 tests --> + </tbody> + <tbody id="sstatus.#atrisk"> + <!-- 0 tests --> + </tbody> + <tbody id="sw3c-candidate-recommendation-3-october-2.#authors"> + <!-- 0 tests --> + </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-fonts-3_dev/xhtml1print/chapter-3.xht b/tests/wpt/css-tests/css-fonts-3_dev/xhtml1print/chapter-3.xht index 9790e150e86..66dd131f4d3 100644 --- a/tests/wpt/css-tests/css-fonts-3_dev/xhtml1print/chapter-3.xht +++ b/tests/wpt/css-tests/css-fonts-3_dev/xhtml1print/chapter-3.xht @@ -1001,48 +1001,18 @@ <a href="https://www.w3.org/TR/css-fonts-3/#generic-font-families">3.1.1 Generic font families</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="s3.1.1.#cursive"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.1.#cursive-def"> - <!-- 0 tests --> - </tbody> <tbody id="s3.1.1.#cursive0"> <!-- 0 tests --> </tbody> - <tbody id="s3.1.1.#fantasy"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.1.#fantasy-def"> - <!-- 0 tests --> - </tbody> <tbody id="s3.1.1.#fantasy0"> <!-- 0 tests --> </tbody> - <tbody id="s3.1.1.#monospace"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.1.#monospace-def"> - <!-- 0 tests --> - </tbody> <tbody id="s3.1.1.#monospace0"> <!-- 0 tests --> </tbody> - <tbody id="s3.1.1.#sans-serif"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.1.#sans-serif-def"> - <!-- 0 tests --> - </tbody> <tbody id="s3.1.1.#sans-serif0"> <!-- 0 tests --> </tbody> - <tbody id="s3.1.1.#serif"> - <!-- 0 tests --> - </tbody> - <tbody id="s3.1.1.#serif-def"> - <!-- 0 tests --> - </tbody> <tbody id="s3.1.1.#serif0"> <!-- 0 tests --> </tbody> diff --git a/tests/wpt/css-tests/css-fonts-3_dev/xhtml1print/chapter-8.xht b/tests/wpt/css-tests/css-fonts-3_dev/xhtml1print/chapter-8.xht index 9d6da8544e0..97607699012 100644 --- a/tests/wpt/css-tests/css-fonts-3_dev/xhtml1print/chapter-8.xht +++ b/tests/wpt/css-tests/css-fonts-3_dev/xhtml1print/chapter-8.xht @@ -51,150 +51,33 @@ <tbody id="s8.2.#cssfontfeaturevaluesrule"> <!-- 0 tests --> </tbody> - <tbody id="s.#AAT-FEATURES"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#ARABIC-TYPO"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CHARMOD"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CHARMOD-NORM"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CJKV-INFO-PROCESSING"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CORS"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS21"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3-CONDITIONAL"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3TEXT"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3VAL"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#DIGITAL-TYPOGRAPHY"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#DOM-LEVEL-2-STYLE"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#ELEMTYPO"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#HTML5"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#LANGCULTTYPE"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#OPEN-FONT-FORMAT"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#OPENTYPE"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#OPENTYPE-FEATURES"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#OPENTYPE-FONT-GUIDE"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#RASTER-TRAGEDY"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#RFC2119"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#UAX15"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#UAX29"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#UNICODE"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#WINDOWS-GLYPH-PROC"> - <!-- 0 tests --> - </tbody> <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#atrisk"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#authoring-tool"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#authors"> - <!-- 0 tests --> - </tbody> <tbody id="s.#ch-ch-ch-changes"> <!-- 0 tests --> </tbody> <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> - <!-- 0 tests --> - </tbody> <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#cr-exit-criteria"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#experimental"> - <!-- 0 tests --> - </tbody> <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative-references"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#other-references"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#partial"> - <!-- 0 tests --> - </tbody> <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#recent-changes"> - <!-- 0 tests --> - </tbody> <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#renderer"> - <!-- 0 tests --> - </tbody> <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#style-sheet"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#testing"> - <!-- 0 tests --> - </tbody> <tbody id="s.#w3c-candidate-recommendation-3-october-2"> <!-- 0 tests --> </tbody> diff --git a/tests/wpt/css-tests/css-fonts-3_dev/xhtml1print/chapter-A.xht b/tests/wpt/css-tests/css-fonts-3_dev/xhtml1print/chapter-A.xht index 4d30b33f78c..7e83b939977 100644 --- a/tests/wpt/css-tests/css-fonts-3_dev/xhtml1print/chapter-A.xht +++ b/tests/wpt/css-tests/css-fonts-3_dev/xhtml1print/chapter-A.xht @@ -33,6 +33,153 @@ <a href="https://www.w3.org/TR/css-fonts-3/#platform-props-to-css">A Mapping platform font properties to CSS properties</a></th></tr> <!-- 0 tests --> </tbody> + <tbody id="sch-ch-ch-changes.#recent-changes"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conformance-classes"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conventions"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#cr-exit-criteria"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#experimental"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#partial"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#testing"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance-classes.#authoring-tool"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance-classes.#renderer"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance-classes.#style-sheet"> + <!-- 0 tests --> + </tbody> + <tbody id="scursive0.#cursive"> + <!-- 0 tests --> + </tbody> + <tbody id="scursive0.#cursive-def"> + <!-- 0 tests --> + </tbody> + <tbody id="sfantasy0.#fantasy"> + <!-- 0 tests --> + </tbody> + <tbody id="sfantasy0.#fantasy-def"> + <!-- 0 tests --> + </tbody> + <tbody id="smonospace0.#monospace"> + <!-- 0 tests --> + </tbody> + <tbody id="smonospace0.#monospace-def"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#CHARMOD"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#CORS"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#CSS21"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#CSS3VAL"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#HTML5"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#OPEN-FONT-FORMAT"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#OPENTYPE"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#OPENTYPE-FEATURES"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#RFC2119"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#UAX15"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#UAX29"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#UNICODE"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#AAT-FEATURES"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#ARABIC-TYPO"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#CHARMOD-NORM"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#CJKV-INFO-PROCESSING"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#CSS3-CONDITIONAL"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#CSS3TEXT"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#DIGITAL-TYPOGRAPHY"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#DOM-LEVEL-2-STYLE"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#ELEMTYPO"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#LANGCULTTYPE"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#OPENTYPE-FONT-GUIDE"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#RASTER-TRAGEDY"> + <!-- 0 tests --> + </tbody> + <tbody id="sother-references.#WINDOWS-GLYPH-PROC"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#normative-references"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#other-references"> + <!-- 0 tests --> + </tbody> + <tbody id="ssans-serif0.#sans-serif"> + <!-- 0 tests --> + </tbody> + <tbody id="ssans-serif0.#sans-serif-def"> + <!-- 0 tests --> + </tbody> + <tbody id="sserif0.#serif"> + <!-- 0 tests --> + </tbody> + <tbody id="sserif0.#serif-def"> + <!-- 0 tests --> + </tbody> + <tbody id="sstatus.#atrisk"> + <!-- 0 tests --> + </tbody> + <tbody id="sw3c-candidate-recommendation-3-october-2.#authors"> + <!-- 0 tests --> + </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-gcpm-3_dev/html/chapter-6.htm b/tests/wpt/css-tests/css-gcpm-3_dev/html/chapter-6.htm index 61d398fe71f..15385afb9e4 100644 --- a/tests/wpt/css-tests/css-gcpm-3_dev/html/chapter-6.htm +++ b/tests/wpt/css-tests/css-gcpm-3_dev/html/chapter-6.htm @@ -72,72 +72,30 @@ <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> - <!-- 0 tests --> - </tbody> <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#css21"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#css3list"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#css3page"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#css3syn"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#css3val"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#dpub-latinreq"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#experimental"> - <!-- 0 tests --> - </tbody> <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> - <!-- 0 tests --> - </tbody> <tbody id="s.#introduction"> <!-- 0 tests --> </tbody> <tbody id="s.#issues-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#partial"> - <!-- 0 tests --> - </tbody> <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#rfc2119"> - <!-- 0 tests --> - </tbody> <tbody id="s.#status"> <!-- 0 tests --> </tbody> <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> - <!-- 0 tests --> - </tbody> <tbody id="s.#title"> <!-- 0 tests --> </tbody> diff --git a/tests/wpt/css-tests/css-gcpm-3_dev/html/chapter-C.htm b/tests/wpt/css-tests/css-gcpm-3_dev/html/chapter-C.htm index 1cea70e740e..f128c155746 100644 --- a/tests/wpt/css-tests/css-gcpm-3_dev/html/chapter-C.htm +++ b/tests/wpt/css-tests/css-gcpm-3_dev/html/chapter-C.htm @@ -33,6 +33,48 @@ <a href="https://www.w3.org/TR/css-gcpm-3/#changes">C Changes</a></th></tr> <!-- 0 tests --> </tbody> + <tbody id="sconformance.#conformance-classes"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conventions"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#experimental"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#partial"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#testing"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#css21"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#css3list"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#css3page"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#css3syn"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#css3val"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#dpub-latinreq"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#rfc2119"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#informative"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#normative"> + <!-- 0 tests --> + </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-gcpm-3_dev/xhtml1/chapter-6.xht b/tests/wpt/css-tests/css-gcpm-3_dev/xhtml1/chapter-6.xht index 720be33ce1e..75e1989b4fb 100644 --- a/tests/wpt/css-tests/css-gcpm-3_dev/xhtml1/chapter-6.xht +++ b/tests/wpt/css-tests/css-gcpm-3_dev/xhtml1/chapter-6.xht @@ -72,72 +72,30 @@ <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> - <!-- 0 tests --> - </tbody> <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#css21"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#css3list"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#css3page"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#css3syn"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#css3val"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#dpub-latinreq"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#experimental"> - <!-- 0 tests --> - </tbody> <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> - <!-- 0 tests --> - </tbody> <tbody id="s.#introduction"> <!-- 0 tests --> </tbody> <tbody id="s.#issues-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#partial"> - <!-- 0 tests --> - </tbody> <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#rfc2119"> - <!-- 0 tests --> - </tbody> <tbody id="s.#status"> <!-- 0 tests --> </tbody> <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> - <!-- 0 tests --> - </tbody> <tbody id="s.#title"> <!-- 0 tests --> </tbody> diff --git a/tests/wpt/css-tests/css-gcpm-3_dev/xhtml1/chapter-C.xht b/tests/wpt/css-tests/css-gcpm-3_dev/xhtml1/chapter-C.xht index 25dc2efc7f9..7861fb274a6 100644 --- a/tests/wpt/css-tests/css-gcpm-3_dev/xhtml1/chapter-C.xht +++ b/tests/wpt/css-tests/css-gcpm-3_dev/xhtml1/chapter-C.xht @@ -33,6 +33,48 @@ <a href="https://www.w3.org/TR/css-gcpm-3/#changes">C Changes</a></th></tr> <!-- 0 tests --> </tbody> + <tbody id="sconformance.#conformance-classes"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conventions"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#experimental"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#partial"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#testing"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#css21"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#css3list"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#css3page"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#css3syn"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#css3val"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#dpub-latinreq"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#rfc2119"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#informative"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#normative"> + <!-- 0 tests --> + </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-gcpm-3_dev/xhtml1print/chapter-6.xht b/tests/wpt/css-tests/css-gcpm-3_dev/xhtml1print/chapter-6.xht index 720be33ce1e..75e1989b4fb 100644 --- a/tests/wpt/css-tests/css-gcpm-3_dev/xhtml1print/chapter-6.xht +++ b/tests/wpt/css-tests/css-gcpm-3_dev/xhtml1print/chapter-6.xht @@ -72,72 +72,30 @@ <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> - <!-- 0 tests --> - </tbody> <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#css21"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#css3list"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#css3page"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#css3syn"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#css3val"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#dpub-latinreq"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#experimental"> - <!-- 0 tests --> - </tbody> <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> - <!-- 0 tests --> - </tbody> <tbody id="s.#introduction"> <!-- 0 tests --> </tbody> <tbody id="s.#issues-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#partial"> - <!-- 0 tests --> - </tbody> <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#rfc2119"> - <!-- 0 tests --> - </tbody> <tbody id="s.#status"> <!-- 0 tests --> </tbody> <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> - <!-- 0 tests --> - </tbody> <tbody id="s.#title"> <!-- 0 tests --> </tbody> diff --git a/tests/wpt/css-tests/css-gcpm-3_dev/xhtml1print/chapter-C.xht b/tests/wpt/css-tests/css-gcpm-3_dev/xhtml1print/chapter-C.xht index 25dc2efc7f9..7861fb274a6 100644 --- a/tests/wpt/css-tests/css-gcpm-3_dev/xhtml1print/chapter-C.xht +++ b/tests/wpt/css-tests/css-gcpm-3_dev/xhtml1print/chapter-C.xht @@ -33,6 +33,48 @@ <a href="https://www.w3.org/TR/css-gcpm-3/#changes">C Changes</a></th></tr> <!-- 0 tests --> </tbody> + <tbody id="sconformance.#conformance-classes"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conventions"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#experimental"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#partial"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#testing"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#css21"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#css3list"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#css3page"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#css3syn"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#css3val"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#dpub-latinreq"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#rfc2119"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#informative"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#normative"> + <!-- 0 tests --> + </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-grid-1_dev/html/chapter-13.htm b/tests/wpt/css-tests/css-grid-1_dev/html/chapter-13.htm index 548bd0ba219..f8b534e1f54 100644 --- a/tests/wpt/css-tests/css-grid-1_dev/html/chapter-13.htm +++ b/tests/wpt/css-tests/css-grid-1_dev/html/chapter-13.htm @@ -48,117 +48,21 @@ <tbody id="s.#acks"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-align-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-break-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-cascade-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-display-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-flexbox-1"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-multicol-1"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-overflow-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-pseudo-4"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-sizing-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-syntax-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-values"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-writing-modes-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css21"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-align"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-break"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-display"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-flexbox"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-sizing"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-writing-modes"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3col"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3val"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-mediaqueries-4"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-rfc2119"> - <!-- 0 tests --> - </tbody> <tbody id="s.#changes"> <!-- 0 tests --> </tbody> <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> - <!-- 0 tests --> - </tbody> <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#example-f839f6c8"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#experimental"> - <!-- 0 tests --> - </tbody> <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-elsewhere"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#index-defined-here"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#informative"> - <!-- 0 tests --> - </tbody> <tbody id="s.#issues-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#partial"> - <!-- 0 tests --> - </tbody> <tbody id="s.#property-index"> <!-- 1 tests --> <tr id="grid-layout-properties-.#property-index" class="ahem dom script"> @@ -182,15 +86,9 @@ <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> - <!-- 0 tests --> - </tbody> <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> - <!-- 0 tests --> - </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-grid-1_dev/html/chapter-A.htm b/tests/wpt/css-tests/css-grid-1_dev/html/chapter-A.htm index 2fb8e2bf889..e0276abd247 100644 --- a/tests/wpt/css-tests/css-grid-1_dev/html/chapter-A.htm +++ b/tests/wpt/css-tests/css-grid-1_dev/html/chapter-A.htm @@ -48,6 +48,108 @@ <tbody id="sA.#overgrowable-tracks"> <!-- 0 tests --> </tbody> + <tbody id="sconformance.#conformance-classes"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conventions"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#experimental"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#partial"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#testing"> + <!-- 0 tests --> + </tbody> + <tbody id="sconventions.#example-f839f6c8"> + <!-- 0 tests --> + </tbody> + <tbody id="sindex.#index-defined-elsewhere"> + <!-- 0 tests --> + </tbody> + <tbody id="sindex.#index-defined-here"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css3-flexbox"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-align-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-break-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-cascade-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-display-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-flexbox-1"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-multicol-1"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-overflow-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-pseudo-4"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-sizing-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-syntax-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-values"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-writing-modes-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css21"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-align"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-break"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-display"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-sizing"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-writing-modes"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3col"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3val"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-mediaqueries-4"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-rfc2119"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#informative"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#normative"> + <!-- 0 tests --> + </tbody> + <tbody id="sstatus.#w3c_process_revision"> + <!-- 0 tests --> + </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-grid-1_dev/xhtml1/chapter-13.xht b/tests/wpt/css-tests/css-grid-1_dev/xhtml1/chapter-13.xht index 2aa69d0a4e3..02664c22c2b 100644 --- a/tests/wpt/css-tests/css-grid-1_dev/xhtml1/chapter-13.xht +++ b/tests/wpt/css-tests/css-grid-1_dev/xhtml1/chapter-13.xht @@ -48,117 +48,21 @@ <tbody id="s.#acks"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-align-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-break-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-cascade-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-display-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-flexbox-1"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-multicol-1"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-overflow-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-pseudo-4"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-sizing-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-syntax-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-values"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-writing-modes-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css21"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-align"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-break"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-display"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-flexbox"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-sizing"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-writing-modes"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3col"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3val"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-mediaqueries-4"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-rfc2119"> - <!-- 0 tests --> - </tbody> <tbody id="s.#changes"> <!-- 0 tests --> </tbody> <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> - <!-- 0 tests --> - </tbody> <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#example-f839f6c8"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#experimental"> - <!-- 0 tests --> - </tbody> <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-elsewhere"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#index-defined-here"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#informative"> - <!-- 0 tests --> - </tbody> <tbody id="s.#issues-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#partial"> - <!-- 0 tests --> - </tbody> <tbody id="s.#property-index"> <!-- 1 tests --> <tr id="grid-layout-properties-.#property-index" class="ahem dom script"> @@ -182,15 +86,9 @@ <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> - <!-- 0 tests --> - </tbody> <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> - <!-- 0 tests --> - </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-grid-1_dev/xhtml1/chapter-A.xht b/tests/wpt/css-tests/css-grid-1_dev/xhtml1/chapter-A.xht index 8314d09d6ee..f6fcd98ce32 100644 --- a/tests/wpt/css-tests/css-grid-1_dev/xhtml1/chapter-A.xht +++ b/tests/wpt/css-tests/css-grid-1_dev/xhtml1/chapter-A.xht @@ -48,6 +48,108 @@ <tbody id="sA.#overgrowable-tracks"> <!-- 0 tests --> </tbody> + <tbody id="sconformance.#conformance-classes"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conventions"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#experimental"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#partial"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#testing"> + <!-- 0 tests --> + </tbody> + <tbody id="sconventions.#example-f839f6c8"> + <!-- 0 tests --> + </tbody> + <tbody id="sindex.#index-defined-elsewhere"> + <!-- 0 tests --> + </tbody> + <tbody id="sindex.#index-defined-here"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css3-flexbox"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-align-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-break-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-cascade-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-display-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-flexbox-1"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-multicol-1"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-overflow-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-pseudo-4"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-sizing-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-syntax-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-values"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-writing-modes-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css21"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-align"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-break"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-display"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-sizing"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-writing-modes"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3col"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3val"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-mediaqueries-4"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-rfc2119"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#informative"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#normative"> + <!-- 0 tests --> + </tbody> + <tbody id="sstatus.#w3c_process_revision"> + <!-- 0 tests --> + </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-grid-1_dev/xhtml1print/chapter-13.xht b/tests/wpt/css-tests/css-grid-1_dev/xhtml1print/chapter-13.xht index 2aa69d0a4e3..02664c22c2b 100644 --- a/tests/wpt/css-tests/css-grid-1_dev/xhtml1print/chapter-13.xht +++ b/tests/wpt/css-tests/css-grid-1_dev/xhtml1print/chapter-13.xht @@ -48,117 +48,21 @@ <tbody id="s.#acks"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-align-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-break-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-cascade-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-display-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-flexbox-1"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-multicol-1"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-overflow-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-pseudo-4"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-sizing-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-syntax-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-values"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-writing-modes-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css21"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-align"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-break"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-display"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-flexbox"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-sizing"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-writing-modes"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3col"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3val"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-mediaqueries-4"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-rfc2119"> - <!-- 0 tests --> - </tbody> <tbody id="s.#changes"> <!-- 0 tests --> </tbody> <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> - <!-- 0 tests --> - </tbody> <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#example-f839f6c8"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#experimental"> - <!-- 0 tests --> - </tbody> <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-elsewhere"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#index-defined-here"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#informative"> - <!-- 0 tests --> - </tbody> <tbody id="s.#issues-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#partial"> - <!-- 0 tests --> - </tbody> <tbody id="s.#property-index"> <!-- 1 tests --> <tr id="grid-layout-properties-.#property-index" class="ahem dom script"> @@ -182,15 +86,9 @@ <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> - <!-- 0 tests --> - </tbody> <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> - <!-- 0 tests --> - </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-grid-1_dev/xhtml1print/chapter-A.xht b/tests/wpt/css-tests/css-grid-1_dev/xhtml1print/chapter-A.xht index 8314d09d6ee..f6fcd98ce32 100644 --- a/tests/wpt/css-tests/css-grid-1_dev/xhtml1print/chapter-A.xht +++ b/tests/wpt/css-tests/css-grid-1_dev/xhtml1print/chapter-A.xht @@ -48,6 +48,108 @@ <tbody id="sA.#overgrowable-tracks"> <!-- 0 tests --> </tbody> + <tbody id="sconformance.#conformance-classes"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conventions"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#experimental"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#partial"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#testing"> + <!-- 0 tests --> + </tbody> + <tbody id="sconventions.#example-f839f6c8"> + <!-- 0 tests --> + </tbody> + <tbody id="sindex.#index-defined-elsewhere"> + <!-- 0 tests --> + </tbody> + <tbody id="sindex.#index-defined-here"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css3-flexbox"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-align-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-break-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-cascade-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-display-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-flexbox-1"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-multicol-1"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-overflow-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-pseudo-4"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-sizing-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-syntax-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-values"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-writing-modes-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css21"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-align"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-break"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-display"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-sizing"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-writing-modes"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3col"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3val"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-mediaqueries-4"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-rfc2119"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#informative"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#normative"> + <!-- 0 tests --> + </tbody> + <tbody id="sstatus.#w3c_process_revision"> + <!-- 0 tests --> + </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-images-3_dev/html/chapter-7.htm b/tests/wpt/css-tests/css-images-3_dev/html/chapter-7.htm index 35aa7438779..8395163ceea 100644 --- a/tests/wpt/css-tests/css-images-3_dev/html/chapter-7.htm +++ b/tests/wpt/css-tests/css-images-3_dev/html/chapter-7.htm @@ -78,73 +78,73 @@ <a href="https://www.w3.org/TR/css3-images/#cr-exit-criteria">7.6 CR Exit Criteria</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS1"> + <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS21"> + <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS3-2D-TRANSFORMS"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS3BG"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS3COLOR"> + <tbody id="s.#longstatus-date"> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS3PAGE"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS3VAL"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#MEDIA-FRAGS"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#MEDIAQ"> + <tbody id="snormative-references.#CSS21"> <!-- 0 tests --> </tbody> - <tbody id="s.#RFC2119"> + <tbody id="snormative-references.#CSS3VAL"> <!-- 0 tests --> </tbody> - <tbody id="s.#SMIL10"> + <tbody id="snormative-references.#MEDIA-FRAGS"> <!-- 0 tests --> </tbody> - <tbody id="s.#SVG11"> + <tbody id="snormative-references.#RFC2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#abstract"> + <tbody id="sother-references.#CSS1"> <!-- 0 tests --> </tbody> - <tbody id="s.#acknowledgments"> + <tbody id="sother-references.#CSS3-2D-TRANSFORMS"> <!-- 0 tests --> </tbody> - <tbody id="s.#changes"> + <tbody id="sother-references.#CSS3BG"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="sother-references.#CSS3COLOR"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="sother-references.#CSS3PAGE"> <!-- 0 tests --> </tbody> - <tbody id="s.#longstatus-date"> + <tbody id="sother-references.#MEDIAQ"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative-references"> + <tbody id="sother-references.#SMIL10"> <!-- 0 tests --> </tbody> - <tbody id="s.#other-references"> + <tbody id="sother-references.#SVG11"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="sreferences.#changes"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="sreferences.#normative-references"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="sreferences.#other-references"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-images-3_dev/xhtml1/chapter-7.xht b/tests/wpt/css-tests/css-images-3_dev/xhtml1/chapter-7.xht index 5756b01dd33..76d33b718dd 100644 --- a/tests/wpt/css-tests/css-images-3_dev/xhtml1/chapter-7.xht +++ b/tests/wpt/css-tests/css-images-3_dev/xhtml1/chapter-7.xht @@ -78,73 +78,73 @@ <a href="https://www.w3.org/TR/css3-images/#cr-exit-criteria">7.6 CR Exit Criteria</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS1"> + <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS21"> + <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS3-2D-TRANSFORMS"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS3BG"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS3COLOR"> + <tbody id="s.#longstatus-date"> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS3PAGE"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS3VAL"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#MEDIA-FRAGS"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#MEDIAQ"> + <tbody id="snormative-references.#CSS21"> <!-- 0 tests --> </tbody> - <tbody id="s.#RFC2119"> + <tbody id="snormative-references.#CSS3VAL"> <!-- 0 tests --> </tbody> - <tbody id="s.#SMIL10"> + <tbody id="snormative-references.#MEDIA-FRAGS"> <!-- 0 tests --> </tbody> - <tbody id="s.#SVG11"> + <tbody id="snormative-references.#RFC2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#abstract"> + <tbody id="sother-references.#CSS1"> <!-- 0 tests --> </tbody> - <tbody id="s.#acknowledgments"> + <tbody id="sother-references.#CSS3-2D-TRANSFORMS"> <!-- 0 tests --> </tbody> - <tbody id="s.#changes"> + <tbody id="sother-references.#CSS3BG"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="sother-references.#CSS3COLOR"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="sother-references.#CSS3PAGE"> <!-- 0 tests --> </tbody> - <tbody id="s.#longstatus-date"> + <tbody id="sother-references.#MEDIAQ"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative-references"> + <tbody id="sother-references.#SMIL10"> <!-- 0 tests --> </tbody> - <tbody id="s.#other-references"> + <tbody id="sother-references.#SVG11"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="sreferences.#changes"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="sreferences.#normative-references"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="sreferences.#other-references"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-images-3_dev/xhtml1print/chapter-7.xht b/tests/wpt/css-tests/css-images-3_dev/xhtml1print/chapter-7.xht index 5756b01dd33..76d33b718dd 100644 --- a/tests/wpt/css-tests/css-images-3_dev/xhtml1print/chapter-7.xht +++ b/tests/wpt/css-tests/css-images-3_dev/xhtml1print/chapter-7.xht @@ -78,73 +78,73 @@ <a href="https://www.w3.org/TR/css3-images/#cr-exit-criteria">7.6 CR Exit Criteria</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS1"> + <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS21"> + <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS3-2D-TRANSFORMS"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS3BG"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS3COLOR"> + <tbody id="s.#longstatus-date"> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS3PAGE"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS3VAL"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#MEDIA-FRAGS"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#MEDIAQ"> + <tbody id="snormative-references.#CSS21"> <!-- 0 tests --> </tbody> - <tbody id="s.#RFC2119"> + <tbody id="snormative-references.#CSS3VAL"> <!-- 0 tests --> </tbody> - <tbody id="s.#SMIL10"> + <tbody id="snormative-references.#MEDIA-FRAGS"> <!-- 0 tests --> </tbody> - <tbody id="s.#SVG11"> + <tbody id="snormative-references.#RFC2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#abstract"> + <tbody id="sother-references.#CSS1"> <!-- 0 tests --> </tbody> - <tbody id="s.#acknowledgments"> + <tbody id="sother-references.#CSS3-2D-TRANSFORMS"> <!-- 0 tests --> </tbody> - <tbody id="s.#changes"> + <tbody id="sother-references.#CSS3BG"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="sother-references.#CSS3COLOR"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="sother-references.#CSS3PAGE"> <!-- 0 tests --> </tbody> - <tbody id="s.#longstatus-date"> + <tbody id="sother-references.#MEDIAQ"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative-references"> + <tbody id="sother-references.#SMIL10"> <!-- 0 tests --> </tbody> - <tbody id="s.#other-references"> + <tbody id="sother-references.#SVG11"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="sreferences.#changes"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="sreferences.#normative-references"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="sreferences.#other-references"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/chapter-10.htm b/tests/wpt/css-tests/css-masking-1_dev/html/chapter-10.htm index 90afb3eeb50..4da4f6f80a8 100644 --- a/tests/wpt/css-tests/css-masking-1_dev/html/chapter-10.htm +++ b/tests/wpt/css-tests/css-masking-1_dev/html/chapter-10.htm @@ -39,72 +39,18 @@ <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-compositing-1"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-shapes"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css21"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-transforms"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3bg"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3color"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3val"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-filter-effects"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-html5"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-rfc2119"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-svg11"> - <!-- 0 tests --> - </tbody> <tbody id="s.#changes"> <!-- 0 tests --> </tbody> <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> - <!-- 0 tests --> - </tbody> <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#cr-exit-criteria"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#experimental"> - <!-- 0 tests --> - </tbody> <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#normative"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#partial"> - <!-- 0 tests --> - </tbody> <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> @@ -117,9 +63,6 @@ <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> - <!-- 0 tests --> - </tbody> <tbody id="s.#title"> <!-- 0 tests --> </tbody> diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/chapter-7.htm b/tests/wpt/css-tests/css-masking-1_dev/html/chapter-7.htm index 921cba7c6f7..c730c735575 100644 --- a/tests/wpt/css-tests/css-masking-1_dev/html/chapter-7.htm +++ b/tests/wpt/css-tests/css-masking-1_dev/html/chapter-7.htm @@ -13,7 +13,7 @@ <body> <h1>CSS Masking Level 1 CR Test Suite</h1> - <h2>Positioned Masks (5 tests)</h2> + <h2>Positioned Masks (49 tests)</h2> <table width="100%"> <col id="test-column"> <col id="refs-column"> @@ -37,7 +37,51 @@ <tr><th colspan="4" scope="rowgroup"> <a href="#s7.1">+</a> <a href="https://www.w3.org/TR/css-masking-1/#the-mask-image">7.1 Mask Image Source: the mask-image property</a></th></tr> - <!-- 0 tests --> + <!-- 4 tests --> + <tr id="mask-image-1a-7.1" class="primary"> + <td><strong> + <a href="mask-image-1a.htm">mask-image-1a</a></strong></td> + <td><a href="reference/mask-image-1-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-image: mask layer image + <ul class="assert"> + <li>Test checks whether image as mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-image-1b-7.1" class="primary"> + <td><strong> + <a href="mask-image-1b.htm">mask-image-1b</a></strong></td> + <td><a href="reference/mask-image-1-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-image: mask layer image + <ul class="assert"> + <li>Test checks whether SVG image as mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-image-1c-7.1" class="primary"> + <td><strong> + <a href="mask-image-1c.htm">mask-image-1c</a></strong></td> + <td><a href="reference/mask-image-1-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-image: mask layer image + <ul class="assert"> + <li>Test checks whether SVG mask element as mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-image-2-7.1" class="primary"> + <td><strong> + <a href="mask-image-2.htm">mask-image-2</a></strong></td> + <td><a href="reference/mask-image-2-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-image: mask layer image + <ul class="assert"> + <li>Test checks whether gradient CSS image as mask layer works correctly or not.</li> + </ul> + </td> + </tr> </tbody> <tbody id="s7.1.#mask-layer-image"> <!-- 0 tests --> @@ -61,7 +105,29 @@ <!-- 0 tests --> </tbody> <tbody id="s7.2.#propdef-mask-mode"> - <!-- 0 tests --> + <!-- 2 tests --> + <tr id="mask-mode-a-7.2.#propdef-mask-mode" class="primary"> + <td><strong> + <a href="mask-mode-a.htm">mask-mode-a</a></strong></td> + <td><a href="reference/mask-mode-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-mode with vector image + <ul class="assert"> + <li>Test checks that mask an SVG image referenced by mask-image is correct with different mask mode.</li> + </ul> + </td> + </tr> + <tr id="mask-mode-b-7.2.#propdef-mask-mode" class="primary"> + <td><strong> + <a href="mask-mode-b.htm">mask-mode-b</a></strong></td> + <td><a href="reference/mask-mode-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-mode with raster image + <ul class="assert"> + <li>Test checks that mask a PNG image referenced by mask-image is correct with different mask mode.</li> + </ul> + </td> + </tr> </tbody> <tbody id="s7.2.#typedef-masking-mode"> <!-- 0 tests --> @@ -79,7 +145,40 @@ <tr><th colspan="4" scope="rowgroup"> <a href="#s7.3">+</a> <a href="https://www.w3.org/TR/css-masking-1/#the-mask-repeat">7.3 Tiling Mask Images: The mask-repeat property</a></th></tr> - <!-- 1 tests --> + <!-- 4 tests --> + <tr id="mask-repeat-1-7.3" class="primary"> + <td><strong> + <a href="mask-repeat-1.htm">mask-repeat-1</a></strong></td> + <td><a href="reference/mask-repeat-1-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-repeat: repeated mask layer image + <ul class="assert"> + <li>Test checks whether repeated mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-repeat-2-7.3" class="primary"> + <td><strong> + <a href="mask-repeat-2.htm">mask-repeat-2</a></strong></td> + <td><a href="reference/mask-repeat-2-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-repeat: repeated mask layer image + <ul class="assert"> + <li>Test checks whether repeated mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-repeat-3-7.3" class="primary"> + <td><strong> + <a href="mask-repeat-3.htm">mask-repeat-3</a></strong></td> + <td><a href="reference/mask-repeat-3-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-repeat: repeated mask layer image + <ul class="assert"> + <li>Test checks whether repeated mask layer works correctly or not.</li> + </ul> + </td> + </tr> <tr id="test-mask-7.3" class=""> <td> <a href="test-mask.htm">test-mask</a></td> @@ -99,7 +198,161 @@ <tr><th colspan="4" scope="rowgroup"> <a href="#s7.4">+</a> <a href="https://www.w3.org/TR/css-masking-1/#the-mask-position">7.4 Positioning Mask Images: the mask-position property</a></th></tr> - <!-- 0 tests --> + <!-- 14 tests --> + <tr id="mask-position-1a-7.4" class="primary"> + <td><strong> + <a href="mask-position-1a.htm">mask-position-1a</a></strong></td> + <td><a href="reference/mask-position-1-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-1b-7.4" class="primary"> + <td><strong> + <a href="mask-position-1b.htm">mask-position-1b</a></strong></td> + <td><a href="reference/mask-position-1-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-1c-7.4" class="primary"> + <td><strong> + <a href="mask-position-1c.htm">mask-position-1c</a></strong></td> + <td><a href="reference/mask-position-1-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-2a-7.4" class="primary"> + <td><strong> + <a href="mask-position-2a.htm">mask-position-2a</a></strong></td> + <td><a href="reference/mask-position-2-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-2b-7.4" class="primary"> + <td><strong> + <a href="mask-position-2b.htm">mask-position-2b</a></strong></td> + <td><a href="reference/mask-position-2-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-3a-7.4" class="primary"> + <td><strong> + <a href="mask-position-3a.htm">mask-position-3a</a></strong></td> + <td><a href="reference/mask-position-3-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-3b-7.4" class="primary"> + <td><strong> + <a href="mask-position-3b.htm">mask-position-3b</a></strong></td> + <td><a href="reference/mask-position-3-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-4a-7.4" class="primary"> + <td><strong> + <a href="mask-position-4a.htm">mask-position-4a</a></strong></td> + <td><a href="reference/mask-position-4-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-4b-7.4" class="primary"> + <td><strong> + <a href="mask-position-4b.htm">mask-position-4b</a></strong></td> + <td><a href="reference/mask-position-4-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-4c-7.4" class="primary"> + <td><strong> + <a href="mask-position-4c.htm">mask-position-4c</a></strong></td> + <td><a href="reference/mask-position-4-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-4d-7.4" class="primary"> + <td><strong> + <a href="mask-position-4d.htm">mask-position-4d</a></strong></td> + <td><a href="reference/mask-position-4-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-5-7.4" class="primary"> + <td><strong> + <a href="mask-position-5.htm">mask-position-5</a></strong></td> + <td><a href="reference/mask-position-5-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-6-7.4" class="primary"> + <td><strong> + <a href="mask-position-6.htm">mask-position-6</a></strong></td> + <td><a href="reference/mask-position-6-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-7-7.4" class="primary"> + <td><strong> + <a href="mask-position-7.htm">mask-position-7</a></strong></td> + <td><a href="reference/mask-position-7-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> </tbody> <tbody id="s7.4.#propdef-mask-position"> <!-- 0 tests --> @@ -108,7 +361,18 @@ <tr><th colspan="4" scope="rowgroup"> <a href="#s7.5">+</a> <a href="https://www.w3.org/TR/css-masking-1/#the-mask-clip">7.5 Masking Area: the mask-clip property</a></th></tr> - <!-- 0 tests --> + <!-- 1 tests --> + <tr id="mask-clip-1-7.5" class=""> + <td> + <a href="mask-clip-1.htm">mask-clip-1</a></td> + <td><a href="reference/mask-clip-1-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-clip: clip mask image + <ul class="assert"> + <li>border-box, padding-box, and content-box values of mask-clip should clip to the appropriate boxes.</li> + </ul> + </td> + </tr> </tbody> <tbody id="s7.5.#mask-painting-area"> <!-- 0 tests --> @@ -144,7 +408,29 @@ <tr><th colspan="4" scope="rowgroup"> <a href="#s7.6">+</a> <a href="https://www.w3.org/TR/css-masking-1/#the-mask-origin">7.6 Positioning Area: the mask-origin property</a></th></tr> - <!-- 0 tests --> + <!-- 2 tests --> + <tr id="mask-origin-1-7.6" class="primary"> + <td><strong> + <a href="mask-origin-1.htm">mask-origin-1</a></strong></td> + <td><a href="reference/mask-origin-1-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-origin: mask positioning area + <ul class="assert"> + <li>Test checks whether setting mask position area works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-origin-2-7.6" class="primary"> + <td><strong> + <a href="mask-origin-2.htm">mask-origin-2</a></strong></td> + <td><a href="reference/mask-origin-2-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-origin: mask positioning area + <ul class="assert"> + <li>Test checks whether setting mask origin to margin-box works correctly or not.</li> + </ul> + </td> + </tr> </tbody> <tbody id="s7.6.#mask-positioning-area"> <!-- 0 tests --> @@ -177,7 +463,205 @@ <tr><th colspan="4" scope="rowgroup"> <a href="#s7.7">+</a> <a href="https://www.w3.org/TR/css-masking-1/#the-mask-size">7.7 Sizing Mask Images: the mask-size property</a></th></tr> - <!-- 0 tests --> + <!-- 18 tests --> + <tr id="mask-size-auto-7.7" class="primary"> + <td><strong> + <a href="mask-size-auto.htm">mask-size-auto</a></strong></td> + <td><a href="reference/mask-size-auto-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-auto-auto-7.7" class="primary"> + <td><strong> + <a href="mask-size-auto-auto.htm">mask-size-auto-auto</a></strong></td> + <td><a href="reference/mask-size-auto-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-auto-length-7.7" class="primary"> + <td><strong> + <a href="mask-size-auto-length.htm">mask-size-auto-length</a></strong></td> + <td><a href="reference/mask-size-auto-length-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-auto-percent-7.7" class="primary"> + <td><strong> + <a href="mask-size-auto-percent.htm">mask-size-auto-percent</a></strong></td> + <td><a href="reference/mask-size-auto-length-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-contain-7.7" class="primary"> + <td><strong> + <a href="mask-size-contain.htm">mask-size-contain</a></strong></td> + <td><a href="reference/mask-size-contain-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-contain-clip-border-7.7" class="primary"> + <td><strong> + <a href="mask-size-contain-clip-border.htm">mask-size-contain-clip-border</a></strong></td> + <td><a href="reference/mask-size-contain-clip-border-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-contain-clip-padding-7.7" class="primary"> + <td><strong> + <a href="mask-size-contain-clip-padding.htm">mask-size-contain-clip-padding</a></strong></td> + <td><a href="reference/mask-size-contain-clip-padding-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-contain-position-fifty-fifty-7.7" class="primary"> + <td><strong> + <a href="mask-size-contain-position-fifty-fifty.htm">mask-size-contain-position-fifty-fifty</a></strong></td> + <td><a href="reference/mask-size-contain-position-fifty-fifty-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-cover-7.7" class="primary"> + <td><strong> + <a href="mask-size-cover.htm">mask-size-cover</a></strong></td> + <td><a href="reference/mask-size-cover-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-length-7.7" class="primary"> + <td><strong> + <a href="mask-size-length.htm">mask-size-length</a></strong></td> + <td><a href="reference/mask-size-length-length-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-length-auto-7.7" class="primary"> + <td><strong> + <a href="mask-size-length-auto.htm">mask-size-length-auto</a></strong></td> + <td><a href="reference/mask-size-length-length-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-length-length-7.7" class="primary"> + <td><strong> + <a href="mask-size-length-length.htm">mask-size-length-length</a></strong></td> + <td><a href="reference/mask-size-length-length-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-length-percent-7.7" class="primary"> + <td><strong> + <a href="mask-size-length-percent.htm">mask-size-length-percent</a></strong></td> + <td><a href="reference/mask-size-length-percent-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-percent-7.7" class="primary"> + <td><strong> + <a href="mask-size-percent.htm">mask-size-percent</a></strong></td> + <td><a href="reference/mask-size-percent-percent-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-percent-auto-7.7" class="primary"> + <td><strong> + <a href="mask-size-percent-auto.htm">mask-size-percent-auto</a></strong></td> + <td><a href="reference/mask-size-percent-percent-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-percent-length-7.7" class="primary"> + <td><strong> + <a href="mask-size-percent-length.htm">mask-size-percent-length</a></strong></td> + <td><a href="reference/mask-size-percent-percent-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-percent-percent-7.7" class="primary"> + <td><strong> + <a href="mask-size-percent-percent.htm">mask-size-percent-percent</a></strong></td> + <td><a href="reference/mask-size-percent-percent-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-percent-percent-stretch-7.7" class="primary"> + <td><strong> + <a href="mask-size-percent-percent-stretch.htm">mask-size-percent-percent-stretch</a></strong></td> + <td><a href="reference/mask-size-percent-percent-stretch-ref.htm">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> </tbody> <tbody id="s7.7.#propdef-mask-size"> <!-- 0 tests --> diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/chapter-C.htm b/tests/wpt/css-tests/css-masking-1_dev/html/chapter-C.htm index b2211d51584..db0c9505f9b 100644 --- a/tests/wpt/css-tests/css-masking-1_dev/html/chapter-C.htm +++ b/tests/wpt/css-tests/css-masking-1_dev/html/chapter-C.htm @@ -39,28 +39,85 @@ <tbody id="sC.#InterfaceSVGMaskElement"> <!-- 0 tests --> </tbody> - <tbody id="sC.#SVGClipPathElement__clipPathUnits"> + <tbody id="sInterfaceSVGClipPathElement.#SVGClipPathElement__clipPathUnits"> <!-- 0 tests --> </tbody> - <tbody id="sC.#SVGClipPathElement__transform"> + <tbody id="sInterfaceSVGClipPathElement.#SVGClipPathElement__transform"> <!-- 0 tests --> </tbody> - <tbody id="sC.#SVGMaskElement__height"> + <tbody id="sInterfaceSVGMaskElement.#SVGMaskElement__height"> <!-- 0 tests --> </tbody> - <tbody id="sC.#SVGMaskElement__maskContentUnits"> + <tbody id="sInterfaceSVGMaskElement.#SVGMaskElement__maskContentUnits"> <!-- 0 tests --> </tbody> - <tbody id="sC.#SVGMaskElement__maskUnits"> + <tbody id="sInterfaceSVGMaskElement.#SVGMaskElement__maskUnits"> <!-- 0 tests --> </tbody> - <tbody id="sC.#SVGMaskElement__width"> + <tbody id="sInterfaceSVGMaskElement.#SVGMaskElement__width"> <!-- 0 tests --> </tbody> - <tbody id="sC.#SVGMaskElement__x"> + <tbody id="sInterfaceSVGMaskElement.#SVGMaskElement__x"> <!-- 0 tests --> </tbody> - <tbody id="sC.#SVGMaskElement__y"> + <tbody id="sInterfaceSVGMaskElement.#SVGMaskElement__y"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conformance-classes"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conventions"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#cr-exit-criteria"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#experimental"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#partial"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#testing"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css3color"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-filter-effects"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-compositing-1"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-shapes"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css21"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-transforms"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3bg"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3val"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-html5"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-rfc2119"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-svg11"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#informative"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-clip-1.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-clip-1.htm new file mode 100644 index 00000000000..c1760f608c0 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-clip-1.htm @@ -0,0 +1,57 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-clip: clip mask image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="http://www.w3.org/TR/css-masking-1/#the-mask-clip" rel="help"> + <link href="reference/mask-clip-1-ref.htm" rel="match"> + <meta content="border-box, padding-box, and content-box values of mask-clip should clip to the appropriate boxes." name="assert"> + <style type="text/css"> + div { + /* + * content box: 40 x 20 + * padding box: 52 x 38 + * border box: 60 x 50 + * margin box: 66 x 54 + */ + background-color: purple; + position: absolute; + top: 10px; + margin: 1px 2px 3px 4px; + border: solid transparent; + border-width: 8px 2px 4px 6px; + padding: 6px 9px 12px 3px; + width: 40px; + height: 20px; + } + + div.mask { + mask-size: 100% 100%; + mask-origin: border-box; + mask-image: url(support/transparent-100x50-blue-100x50.svg); + } + + div.border { + left: 10px; + mask-clip: border-box; + } + + div.padding { + left: 110px; + mask-clip: padding-box; + } + + div.content { + left: 210px; + mask-clip: content-box; + } + </style> + </head> + <body> + <div class="outer mask border"></div> + <div class="outer mask padding"></div> + <div class="outer mask content"></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-image-1a.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-image-1a.htm new file mode 100644 index 00000000000..750be39f0f0 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-image-1a.htm @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-image: mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-image" rel="help"> + <link href="reference/mask-image-1-ref.htm" rel="match"> + <meta content="Test checks whether image as mask layer works correctly or not." name="assert"> + <style type="text/css"> + div { + background-color: purple; + width: 100px; + height: 100px; + } + + div.mask-by-png { + mask-image: url(support/transparent-100x50-blue-100x50.png); + } + </style> + </head> + <body> + <div class="mask-by-png"></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-image-1b.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-image-1b.htm new file mode 100644 index 00000000000..2556ec63cf1 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-image-1b.htm @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-image: mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-image" rel="help"> + <link href="reference/mask-image-1-ref.htm" rel="match"> + <meta content="Test checks whether SVG image as mask layer works correctly or not." name="assert"> + <style type="text/css"> + div { + background-color: purple; + width: 100px; + height: 100px; + } + + div.mask-by-svg { + mask-image: url(support/transparent-100x50-blue-100x50.svg); + } + </style> + </head> + <body> + <div class="mask-by-svg"></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-image-1c.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-image-1c.htm new file mode 100644 index 00000000000..73c397457bf --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-image-1c.htm @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-image: mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-image" rel="help"> + <link href="reference/mask-image-1-ref.htm" rel="match"> + <meta content="Test checks whether SVG mask element as mask layer works correctly or not." name="assert"> + <style type="text/css"> + div { + background-color: purple; + width: 100px; + height: 100px; + } + + div.mask-by-svg-mask { + mask-image: url(support/mask-half-transparent-100x100.svg#mask); + } + </style> + </head> + <body> + <div class="mask-by-svg-mask"></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-image-2.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-image-2.htm new file mode 100644 index 00000000000..309af3c6727 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-image-2.htm @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-image: mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-image" rel="help"> + <link href="reference/mask-image-2-ref.htm" rel="match"> + <meta content="Test checks whether gradient CSS image as mask layer works correctly or not." name="assert"> + <style type="text/css"> + div { + background-color: purple; + width: 100px; + height: 100px; + } + + div.mask-by-gradient-1 { + mask-image: linear-gradient(rgba(0,0,255,0), rgba(0,0,255,1)); /* blue gradient mask */ + } + + div.mask-by-gradient-2 { + mask-image: linear-gradient(rgba(255,0,0,0), rgba(255,0,0,1)); /* red gradient mask */ + } + </style> + </head> + <body> + <div class="mask-by-gradient-1"></div> + <div class="mask-by-gradient-2"></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-mode-a.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-mode-a.htm new file mode 100644 index 00000000000..80fb66a883f --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-mode-a.htm @@ -0,0 +1,60 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-mode with vector image</title> + <link href="mailto:ethlin@mozilla.com" rel="author" title="Ethan Lin"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#propdef-mask-mode" rel="help"> + <link href="reference/mask-mode-ref.htm" rel="match"> + <meta content="Test checks that mask an SVG image referenced by mask-image is correct with different mask mode." name="assert"> + <style type="text/css"> + div { + background-color: blue; + position: absolute; + margin: 0px; + padding: 0px; + width: 100px; + height: 100px; + top: 10px; + } + + div.auto { + left: 10px; + mask-mode: match-source; + mask-image: url(support/blue-100x100.svg); + } + + div.alpha { + left: 120px; + mask-mode: alpha; + mask-image: url(support/blue-100x100.svg); + } + + div.luminance1 { + left: 230px; + mask-mode: luminance; + mask-image: url(support/blue-100x100.svg); + } + + div.luminance2 { + left: 340px; + mask-mode: luminance; + mask-image: url(support/red-100x100.svg); + } + + div.luminance3 { + left: 450px; + mask-mode: luminance; + mask-image: url(support/green-100x100.svg); + } + </style> + </head> + <body> + <div class="auto"></div> + <div class="alpha"></div> + <div class="luminance1"></div> + <div class="luminance2"></div> + <div class="luminance3"></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-mode-b.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-mode-b.htm new file mode 100644 index 00000000000..3a22b3e48b2 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-mode-b.htm @@ -0,0 +1,61 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-mode with raster image</title> + <link href="mailto:ethlin@mozilla.com" rel="author" title="Ethan Lin"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#propdef-mask-mode" rel="help"> + <link href="reference/mask-mode-ref.htm" rel="match"> + <meta content="Test checks that mask a PNG image referenced by mask-image is correct with different mask mode." name="assert"> + <style type="text/css"> + div { + background-color: blue; + position: absolute; + margin: 0px; + padding: 0px; + width: 100px; + height: 100px; + top: 10px; + } + + div.auto { + left: 10px; + mask-mode: match-source; + mask-image: url(support/blue-100x100.png); + } + + div.alpha { + left: 120px; + mask-mode: alpha; + mask-image: url(support/blue-100x100.png); + } + + div.luminance1 { + left: 230px; + mask-mode: luminance; + mask-image: url(support/blue-100x100.png); + } + + div.luminance2 { + left: 340px; + mask-mode: luminance; + mask-image: url(support/red-100x100.png); + } + + div.luminance3 { + left: 450px; + mask-mode: luminance; + mask-image: url(support/green-100x100.png); + } + </style> + </head> + <body> + <div class="auto"></div> + <div class="alpha"></div> + <div class="luminance1"></div> + <div class="luminance2"></div> + <div class="luminance3"></div> + + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-origin-1.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-origin-1.htm new file mode 100644 index 00000000000..632761515a9 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-origin-1.htm @@ -0,0 +1,48 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-origin: mask positioning area</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-origin" rel="help"> + <link href="reference/mask-origin-1-ref.htm" rel="match"> + <meta content="Test checks whether setting mask position area works correctly or not." name="assert"> + <style type="text/css"> + div.outer { + border: 1px solid black; + width: 100px; + height: 100px; + } + + div.inner { + /* + * content box: 60 x 60 + * padding box: 72 x 78 + * border box: 80 x 90 + * margin box: 86 x 94 + */ + margin: 1px 2px 3px 4px; + border: solid transparent; + border-width: 8px 2px 4px 6px; + padding: 6px 9px 12px 3px; + width: 60px; + height: 60px; + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-position: left top; + } + + #border { mask-origin: border-box; } + #padding { mask-origin: padding-box; } + #content { mask-origin: content-box; } + </style> + </head> + <body> + <div class="outer"><div class="inner"></div></div> + <div class="outer"><div id="border" class="inner"></div></div> + <div class="outer"><div id="padding" class="inner"></div></div> + <div class="outer"><div id="content" class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-origin-2.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-origin-2.htm new file mode 100644 index 00000000000..603df4f765a --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-origin-2.htm @@ -0,0 +1,77 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-origin: mask positioning area</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-origin" rel="help"> + <link href="reference/mask-origin-2-ref.htm" rel="match"> + <meta content="Test checks whether setting mask origin to margin-box works correctly or not." name="assert"> + <style type="text/css"> + div.outer { + border: 1px solid black; + width: 125px; + height: 125px; + } + + div.inner { + /* + * content box: 60 x 60 + * padding box: 72 x 78 + * border box: 80 x 90 + * margin box: 86 x 94 + */ + margin: 1px 2px 3px 4px; + border: solid red; + border-width: 8px 2px 4px 6px; + padding: 6px 9px 12px 3px; + width: 60px; + height: 60px; + position: relative; + background-color: blue; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-origin: margin-box; + } + + div.overflow { + position: absolute; + left: -10px; + top: -9px; + border: solid transparent; + border-width: 15px 13px 19px 13px; + width: 60px; + height: 60px; + background-color: purple; + } + + #pos-left-auto { mask-position: left; } + #pos-left-bottom { mask-position: left bottom; } + #pos-right-top { mask-position: right top; } + #pos-right-bottom { mask-position: right bottom; } + </style> + </head> + <body> + <div class="outer"> + <div id="pos-left-auto" class="inner"> + <div class="overflow"></div> + </div> + </div> + <div class="outer"> + <div id="pos-left-bottom" class="inner"> + <div class="overflow"></div> + </div> + </div> + <div class="outer"> + <div id="pos-right-top" class="inner"> + <div class="overflow"></div> + </div> + </div> + <div class="outer"> + <div id="pos-right-bottom" class="inner"> + <div class="overflow"></div> + </div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-1a.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-1a.htm new file mode 100644 index 00000000000..853b6e828cf --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-1a.htm @@ -0,0 +1,39 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help"> + <link href="reference/mask-position-1-ref.htm" rel="match"> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert"> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + div.outer { + border: 1px solid black; + } + + div.inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + + #inner1 { mask-position: right 20% bottom 70%; } + #inner2 { mask-position: bottom 70% right 20%; } + #inner3 { mask-position: right 30px bottom 25px; } + #inner4 { mask-position: bottom 25px right 30px; } + </style> + </head> + <body> + <div class="outer"><div id="inner1" class="inner"></div></div> + <div class="outer"><div id="inner2" class="inner"></div></div> + <div class="outer"><div id="inner3" class="inner"></div></div> + <div class="outer"><div id="inner4" class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-1b.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-1b.htm new file mode 100644 index 00000000000..54da3db4dc7 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-1b.htm @@ -0,0 +1,39 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help"> + <link href="reference/mask-position-1-ref.htm" rel="match"> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert"> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + div.outer { + border: 1px solid black; + } + + div.inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + + #inner1 { mask-position: left 40px top 15px; } + #inner2 { mask-position: top 30% left 80%; } + #inner3 { mask-position: left 20px top 25px } + #inner4 { mask-position: top 25px left 20px; } + </style> + </head> + <body> + <div class="outer"><div id="inner1" class="inner"></div></div> + <div class="outer"><div id="inner2" class="inner"></div></div> + <div class="outer"><div id="inner3" class="inner"></div></div> + <div class="outer"><div id="inner4" class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-1c.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-1c.htm new file mode 100644 index 00000000000..6173aba4129 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-1c.htm @@ -0,0 +1,39 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help"> + <link href="reference/mask-position-1-ref.htm" rel="match"> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert"> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + div.outer { + border: 1px solid black; + } + + div.inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + + #inner1 { mask-position: left 80% bottom 70%; } + #inner2 { mask-position: right 20% top 30%; } + #inner3 { mask-position: bottom 50% left 40%; } + #inner4 { mask-position: right 60% top 50%; } + </style> + </head> + <body> + <div class="outer"><div id="inner1" class="inner"></div></div> + <div class="outer"><div id="inner2" class="inner"></div></div> + <div class="outer"><div id="inner3" class="inner"></div></div> + <div class="outer"><div id="inner4" class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-2a.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-2a.htm new file mode 100644 index 00000000000..05021888030 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-2a.htm @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help"> + <link href="reference/mask-position-2-ref.htm" rel="match"> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert"> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-position: left 40% bottom 60%; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-2b.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-2b.htm new file mode 100644 index 00000000000..b5959d9276e --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-2b.htm @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help"> + <link href="reference/mask-position-2-ref.htm" rel="match"> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert"> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-position: 40% 40%; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-3a.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-3a.htm new file mode 100644 index 00000000000..20e68809087 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-3a.htm @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help"> + <link href="reference/mask-position-3-ref.htm" rel="match"> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert"> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-position: center bottom 80%; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-3b.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-3b.htm new file mode 100644 index 00000000000..01ebd795b33 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-3b.htm @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help"> + <link href="reference/mask-position-3-ref.htm" rel="match"> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert"> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-position: center 20%; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-4a.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-4a.htm new file mode 100644 index 00000000000..d0a5e8d8928 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-4a.htm @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help"> + <link href="reference/mask-position-4-ref.htm" rel="match"> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert"> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-position: left center; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-4b.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-4b.htm new file mode 100644 index 00000000000..c250fdfbb58 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-4b.htm @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help"> + <link href="reference/mask-position-4-ref.htm" rel="match"> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert"> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-position: left; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-4c.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-4c.htm new file mode 100644 index 00000000000..db7366baa15 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-4c.htm @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help"> + <link href="reference/mask-position-4-ref.htm" rel="match"> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert"> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-position: left bottom 50%; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-4d.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-4d.htm new file mode 100644 index 00000000000..af2caf0273d --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-4d.htm @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help"> + <link href="reference/mask-position-4-ref.htm" rel="match"> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert"> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask: url(support/50x50-opaque-blue.svg) left no-repeat; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-5.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-5.htm new file mode 100644 index 00000000000..0e1894afe64 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-5.htm @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help"> + <link href="reference/mask-position-5-ref.htm" rel="match"> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert"> + <style type="text/css"> + div { + width: 120px; + height: 120px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-position: top, bottom; + mask-repeat: no-repeat, no-repeat; + mask-image: url(support/50x50-opaque-blue.svg), + url(support/50x50-opaque-blue.svg); + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-6.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-6.htm new file mode 100644 index 00000000000..ced15e3e962 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-6.htm @@ -0,0 +1,50 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help"> + <link href="reference/mask-position-6-ref.htm" rel="match"> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert"> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + .outer { + border: 1px solid black; + } + + .outer > div { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + + #inner1 { + mask-position: left 20px bottom; + } + + #inner2 { + mask-position: left 40% bottom; + } + + #inner3 { + mask-position: right 60% bottom; + } + + #inner4 { + mask-position: right 30px bottom; + } + </style> + </head> + <body> + <div class="outer"><div id="inner1"></div></div> + <div class="outer"><div id="inner2"></div></div> + <div class="outer"><div id="inner3"></div></div> + <div class="outer"><div id="inner4"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-7.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-7.htm new file mode 100644 index 00000000000..216d7c47f2a --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-position-7.htm @@ -0,0 +1,50 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help"> + <link href="reference/mask-position-7-ref.htm" rel="match"> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert"> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + .outer { + border: 1px solid black; + } + + .outer > div { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + + #inner1 { + mask-position: right top 40%; + } + + #inner2 { + mask-position: right top 20px; + } + + #inner3 { + mask-position: right bottom 60%; + } + + #inner4 { + mask-position: right bottom 30px; + } + </style> + </head> + <body> + <div class="outer"><div id="inner1"></div></div> + <div class="outer"><div id="inner2"></div></div> + <div class="outer"><div id="inner3"></div></div> + <div class="outer"><div id="inner4"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-repeat-1.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-repeat-1.htm new file mode 100644 index 00000000000..ccc9d3dd7f2 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-repeat-1.htm @@ -0,0 +1,47 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-repeat: repeated mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-repeat" rel="help"> + <link href="reference/mask-repeat-1-ref.htm" rel="match"> + <meta content="Test checks whether repeated mask layer works correctly or not." name="assert"> + <style type="text/css"> + div { + width: 128px; + height: 128px; + } + + div.outer { + border: 1px solid black; + } + + div.inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + } + + #no-repeat { + mask-repeat: no-repeat no-repeat; + } + #repeat { + mask-repeat: repeat repeat; + } + #repeat-x { + mask-repeat: repeat no-repeat; + } + #repeat-y { + mask-repeat: no-repeat repeat; + } + </style> + </head> + <body> + <div class="outer"><div class="inner"></div></div> + <div class="outer"><div id="no-repeat" class="inner"></div></div> + <div class="outer"><div id="repeat" class="inner"></div></div> + <div class="outer"><div id="repeat-x" class="inner"></div></div> + <div class="outer"><div id="repeat-y" class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-repeat-2.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-repeat-2.htm new file mode 100644 index 00000000000..bd2962fb4b2 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-repeat-2.htm @@ -0,0 +1,42 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-repeat: repeated mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-repeat" rel="help"> + <link href="reference/mask-repeat-2-ref.htm" rel="match"> + <meta content="Test checks whether repeated mask layer works correctly or not." name="assert"> + <style type="text/css"> + div { + width: 128px; + height: 128px; + } + + div.outer { + border: 1px solid black; + } + + div.inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + } + + #space { + mask-repeat: space; + } + #space-x { + mask-repeat: space no-repeat; + } + #space-y { + mask-repeat: no-repeat space; + } + </style> + </head> + <body> + <div class="outer"><div id="space" class="inner"></div></div> + <div class="outer"><div id="space-x" class="inner"></div></div> + <div class="outer"><div id="space-y" class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-repeat-3.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-repeat-3.htm new file mode 100644 index 00000000000..b827dcb74d4 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-repeat-3.htm @@ -0,0 +1,42 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-repeat: repeated mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-repeat" rel="help"> + <link href="reference/mask-repeat-3-ref.htm" rel="match"> + <meta content="Test checks whether repeated mask layer works correctly or not." name="assert"> + <style type="text/css"> + div { + width: 150px; + height: 150px; + } + + div.outer { + border: 1px solid black; + } + + div.inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + } + + #round { + mask-repeat: round; + } + #round-x { + mask-repeat: round no-repeat; + } + #round-y { + mask-repeat: no-repeat round; + } + </style> + </head> + <body> + <div class="outer"><div id="round" class="inner"></div></div> + <div class="outer"><div id="round-x" class="inner"></div></div> + <div class="outer"><div id="round-y" class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-auto-auto.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-auto-auto.htm new file mode 100644 index 00000000000..b47b1e398bf --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-auto-auto.htm @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help"> + <link href="reference/mask-size-auto-ref.htm" rel="match"> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert"> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: auto auto; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-auto-length.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-auto-length.htm new file mode 100644 index 00000000000..cb6db57915b --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-auto-length.htm @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help"> + <link href="reference/mask-size-auto-length-ref.htm" rel="match"> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert"> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner { + width: 64px; + height: 128px; + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: auto 20px; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-auto-percent.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-auto-percent.htm new file mode 100644 index 00000000000..8825be1eefe --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-auto-percent.htm @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help"> + <link href="reference/mask-size-auto-length-ref.htm" rel="match"> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert"> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner { + width: 64px; + height: 128px; + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: auto 15.625%; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-auto.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-auto.htm new file mode 100644 index 00000000000..fc2846f8f98 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-auto.htm @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help"> + <link href="reference/mask-size-auto-ref.htm" rel="match"> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert"> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: auto; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-contain-clip-border.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-contain-clip-border.htm new file mode 100644 index 00000000000..87d350b9720 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-contain-clip-border.htm @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help"> + <link href="reference/mask-size-contain-clip-border-ref.htm" rel="match"> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert"> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner { + border: 20px solid transparent; + width: 24px; + height: 88px; + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-clip: border-box; + mask-origin: border-box; + mask-size: contain; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-contain-clip-padding.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-contain-clip-padding.htm new file mode 100644 index 00000000000..e5fc7aa08dd --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-contain-clip-padding.htm @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help"> + <link href="reference/mask-size-contain-clip-padding-ref.htm" rel="match"> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert"> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner { + background-color: purple; + border: 20px solid transparent; + width: 24px; + height: 88px; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-clip: padding-box; + mask-origin: padding-box; + mask-size: contain; + } + </style> + </head> + <body> + <div id="outer"><div id="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-contain-position-fifty-fifty.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-contain-position-fifty-fifty.htm new file mode 100644 index 00000000000..3913347922a --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-contain-position-fifty-fifty.htm @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help"> + <link href="reference/mask-size-contain-position-fifty-fifty-ref.htm" rel="match"> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert"> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: contain; + mask-position: 50% 50%; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-contain.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-contain.htm new file mode 100644 index 00000000000..50be94d7174 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-contain.htm @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help"> + <link href="reference/mask-size-contain-ref.htm" rel="match"> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert"> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 10px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: contain; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-cover.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-cover.htm new file mode 100644 index 00000000000..f917783f7c0 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-cover.htm @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help"> + <link href="reference/mask-size-cover-ref.htm" rel="match"> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert"> + <style type="text/css"> + #outer { + border: 10px solid black; + width: 64px; + height: 128px; + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-origin: content-box; + mask-clip: content-box; + mask-size: cover; + } + </style> + </head> + <body> + <div id="outer"></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-length-auto.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-length-auto.htm new file mode 100644 index 00000000000..aca61194db2 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-length-auto.htm @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help"> + <link href="reference/mask-size-length-length-ref.htm" rel="match"> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert"> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x100-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: 32px auto; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-length-length.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-length-length.htm new file mode 100644 index 00000000000..aca2ce8715f --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-length-length.htm @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help"> + <link href="reference/mask-size-length-length-ref.htm" rel="match"> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert"> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x100-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: 32px 64px; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-length-percent.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-length-percent.htm new file mode 100644 index 00000000000..b637c59e206 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-length-percent.htm @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help"> + <link href="reference/mask-size-length-percent-ref.htm" rel="match"> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert"> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x100-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: 16px 25%; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-length.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-length.htm new file mode 100644 index 00000000000..bb857429a7a --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-length.htm @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help"> + <link href="reference/mask-size-length-length-ref.htm" rel="match"> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert"> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x100-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: 32px; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-percent-auto.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-percent-auto.htm new file mode 100644 index 00000000000..9eb4f2e594a --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-percent-auto.htm @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help"> + <link href="reference/mask-size-percent-percent-ref.htm" rel="match"> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert"> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: 50% auto; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-percent-length.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-percent-length.htm new file mode 100644 index 00000000000..5edb7347299 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-percent-length.htm @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help"> + <link href="reference/mask-size-percent-percent-ref.htm" rel="match"> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert"> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: 50% 32px; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-percent-percent-stretch.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-percent-percent-stretch.htm new file mode 100644 index 00000000000..76f6ed73f93 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-percent-percent-stretch.htm @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help"> + <link href="reference/mask-size-percent-percent-stretch-ref.htm" rel="match"> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert"> + <style type="text/css"> + div { + width: 60px; + height: 120px; + } + + #outer { + border: 10px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/transparent-100x50-blue-100x50.svg); + mask-repeat: no-repeat; + mask-size: 100% 100%; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-percent-percent.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-percent-percent.htm new file mode 100644 index 00000000000..44004f8d407 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-percent-percent.htm @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help"> + <link href="reference/mask-size-percent-percent-ref.htm" rel="match"> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert"> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: 50% 25%; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-percent.htm b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-percent.htm new file mode 100644 index 00000000000..e7358b0b1d2 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/mask-size-percent.htm @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help"> + <link href="reference/mask-size-percent-percent-ref.htm" rel="match"> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert"> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: 50%; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-clip-1-ref.htm b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-clip-1-ref.htm new file mode 100644 index 00000000000..0adeaf391a5 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-clip-1-ref.htm @@ -0,0 +1,42 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS mask-clip reference</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <style type="text/css"> + div { + position: absolute; + top: 10px; + background-color: purple; + } + + div.border { + left: 10px; + margin: 1px 4px; + width: 60px; + height: 25px; + } + + div.padding { + left: 110px; + margin: 9px 10px; + width: 52px; + height: 17px; + } + + div.content { + left: 210px; + margin: 15px 13px; + width: 40px; + height: 11px; + } + </style> + </head> + <body> + <div class="color border"></div> + <div class="color padding"></div> + <div class="color content"></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-image-1-ref.htm b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-image-1-ref.htm new file mode 100644 index 00000000000..efb5293d8aa --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-image-1-ref.htm @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-image: mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <style type="text/css"> + div { + background-color: purple; + width: 100px; + height: 50px; + } + </style> + </head> + <body> + <div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-image-2-ref.htm b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-image-2-ref.htm new file mode 100644 index 00000000000..3642dba9de4 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-image-2-ref.htm @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-image: mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <style type="text/css"> + div { + background-image: linear-gradient(rgba(128,0,128,0), rgba(128,0,128,1)); + width: 100px; + height: 100px; + } + </style> + </head> + <body> + <div></div> + <div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-mode-ref.htm b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-mode-ref.htm new file mode 100644 index 00000000000..444d0043f5c --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-mode-ref.htm @@ -0,0 +1,52 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS mask-mode reference</title> + <link href="mailto:ethlin@mozilla.com" rel="author" title="Ethan Lin"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <style type="text/css"> + div { + background-color: white; + position: absolute; + margin: 0px; + padding: 0px; + width: 100px; + height: 100px; + top: 10px; + } + + div.auto { + left: 10px; + background-image: url(support/blue-100x100.svg); + } + + div.alpha { + left: 120px; + background-image: url(support/blue-100x100.svg); + } + + div.luminance1 { + left: 230px; + background-image: url(support/blue-luminance-100x100.svg); + } + + div.luminance2 { + left: 340px; + background-image: url(support/red-luminance-100x100.svg); + } + + div.luminance3 { + left: 450px; + background-image: url(support/green-luminance-100x100.svg); + } + </style> + </head> + <body> + <div class="auto"></div> + <div class="alpha"></div> + <div class="luminance1"></div> + <div class="luminance2"></div> + <div class="luminance3"></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-origin-1-ref.htm b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-origin-1-ref.htm new file mode 100644 index 00000000000..2e8a30dcba6 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-origin-1-ref.htm @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-origin: mask positioning area</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <style type="text/css"> + div.outer { + border: 1px solid black; + width: 100px; + height: 100px; + position: relative; + } + + div.inner { + width: 50px; + height: 50px; + background-color: purple; + position: absolute; + } + + #border { left: 4px; top: 1px; } + #padding { left: 10px; top: 9px; } + #content { left: 13px; top: 15px; } + </style> + </head> + <body> + <div class="outer"><div id="border" class="inner"></div></div> + <div class="outer"><div id="border" class="inner"></div></div> + <div class="outer"><div id="padding" class="inner"></div></div> + <div class="outer"><div id="content" class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-origin-2-ref.htm b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-origin-2-ref.htm new file mode 100644 index 00000000000..80fda80399f --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-origin-2-ref.htm @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-origin: mask positioning area</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <style type="text/css"> + div.outer { + border: 1px solid black; + width: 125px; + height: 125px; + position: relative; + } + + div.inner { + width: 50px; + height: 50px; + background-color: purple; + position: absolute; + } + + #pos-left-auto { left: 0px; top: 22px; } + #pos-left-bottom { left: 0px; top: 44px; } + #pos-right-top { left: 36px; top: 0px; } + #pos-right-bottom { left: 36px; top: 44px; } + </style> + </head> + <body> + <div class="outer"><div id="pos-left-auto" class="inner"></div></div> + <div class="outer"><div id="pos-left-bottom" class="inner"></div></div> + <div class="outer"><div id="pos-right-top" class="inner"></div></div> + <div class="outer"><div id="pos-right-bottom" class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-position-1-ref.htm b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-position-1-ref.htm new file mode 100644 index 00000000000..97696549a2c --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-position-1-ref.htm @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-position: position mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <style type="text/css"> + div.outer { + position: relative; + width: 100px; + height: 100px; + border: 1px solid black; + } + + div.inner { + position: absolute; + width: 50px; + height: 50px; + background-color: purple; + } + + #inner1 { right: 10px; bottom: 35px; } + #inner2 { right: 30px; bottom: 25px; } + </style> + </head> + <body> + <div class="outer"><div id="inner1" class="inner"></div></div> + <div class="outer"><div id="inner1" class="inner"></div></div> + <div class="outer"><div id="inner2" class="inner"></div></div> + <div class="outer"><div id="inner2" class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-position-2-ref.htm b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-position-2-ref.htm new file mode 100644 index 00000000000..faa427d7a7b --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-position-2-ref.htm @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-position: position mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 100px; + height: 100px; + } + + #inner { + margin-left: 20px; + margin-top: 20px; + width: 50px; + height: 50px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-position-3-ref.htm b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-position-3-ref.htm new file mode 100644 index 00000000000..ebd09621dc2 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-position-3-ref.htm @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-position: position mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 100px; + height: 100px; + } + + #inner { + margin-left: 25px; + margin-top: 10px; + width: 50px; + height: 50px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-position-4-ref.htm b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-position-4-ref.htm new file mode 100644 index 00000000000..f08f2cdc0dd --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-position-4-ref.htm @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-position: position mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 100px; + height: 100px; + } + + #inner { + margin-left: 0px; + margin-top: 25px; + width: 50px; + height: 50px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-position-5-ref.htm b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-position-5-ref.htm new file mode 100644 index 00000000000..605f3c60fff --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-position-5-ref.htm @@ -0,0 +1,38 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-position: position mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 120px; + height: 120px; + } + + #inner1 { + margin-left: 35px; + margin-top: 0px; + width: 50px; + height: 50px; + background-color: purple; + } + + #inner2 { + margin-left: 35px; + margin-top: 20px; + width: 50px; + height: 50px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner1"></div> + <div id="inner2"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-position-6-ref.htm b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-position-6-ref.htm new file mode 100644 index 00000000000..917b21e5890 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-position-6-ref.htm @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-position: position mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <style type="text/css"> + .outer { + border: 1px solid black; + width: 100px; + height: 100px; + } + + .inner { + margin-left: 20px; + margin-top: 50px; + width: 50px; + height: 50px; + background-color: purple; + } + </style> + </head> + <body> + <div class="outer"><div class="inner"></div></div> + <div class="outer"><div class="inner"></div></div> + <div class="outer"><div class="inner"></div></div> + <div class="outer"><div class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-position-7-ref.htm b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-position-7-ref.htm new file mode 100644 index 00000000000..d35e27a45a1 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-position-7-ref.htm @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-position: position mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <style type="text/css"> + .outer { + border: 1px solid black; + width: 100px; + height: 100px; + } + + .inner { + margin-left: 50px; + margin-top: 20px; + width: 50px; + height: 50px; + background-color: purple; + } + </style> + </head> + <body> + <div class="outer"><div class="inner"></div></div> + <div class="outer"><div class="inner"></div></div> + <div class="outer"><div class="inner"></div></div> + <div class="outer"><div class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-repeat-1-ref.htm b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-repeat-1-ref.htm new file mode 100644 index 00000000000..172cf8da354 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-repeat-1-ref.htm @@ -0,0 +1,45 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-repeat: repeated mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <style type="text/css"> + div.outer { + width: 128px; + height: 128px; + position: relative; + border: 1px solid black; + } + + div.inner { + width: 50px; + height: 50px; + position: absolute; + background-color: purple; + } + + #pos-top-left { left: 0; top: 0; } + #pos-top-right { right: 0; top: 0; } + #pos-bottom-left { left: 0; bottom: 0; } + #pos-bottom-right { right: 0; bottom: 0; } + </style> + </head> + <body> + <div class="outer"> + <div id="pos-top-left" class="inner"></div> + <div id="pos-top-right" class="inner"></div> + <div id="pos-bottom-left" class="inner"></div> + <div id="pos-bottom-right" class="inner"></div> + </div> + <div class="outer"> + <div id="pos-top-left" class="inner"></div> + <div id="pos-top-right" class="inner"></div> + </div> + <div class="outer"> + <div id="pos-top-left" class="inner"></div> + <div id="pos-bottom-left" class="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-repeat-2-ref.htm b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-repeat-2-ref.htm new file mode 100644 index 00000000000..172cf8da354 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-repeat-2-ref.htm @@ -0,0 +1,45 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-repeat: repeated mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <style type="text/css"> + div.outer { + width: 128px; + height: 128px; + position: relative; + border: 1px solid black; + } + + div.inner { + width: 50px; + height: 50px; + position: absolute; + background-color: purple; + } + + #pos-top-left { left: 0; top: 0; } + #pos-top-right { right: 0; top: 0; } + #pos-bottom-left { left: 0; bottom: 0; } + #pos-bottom-right { right: 0; bottom: 0; } + </style> + </head> + <body> + <div class="outer"> + <div id="pos-top-left" class="inner"></div> + <div id="pos-top-right" class="inner"></div> + <div id="pos-bottom-left" class="inner"></div> + <div id="pos-bottom-right" class="inner"></div> + </div> + <div class="outer"> + <div id="pos-top-left" class="inner"></div> + <div id="pos-top-right" class="inner"></div> + </div> + <div class="outer"> + <div id="pos-top-left" class="inner"></div> + <div id="pos-bottom-left" class="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-repeat-3-ref.htm b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-repeat-3-ref.htm new file mode 100644 index 00000000000..743a037683f --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-repeat-3-ref.htm @@ -0,0 +1,40 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-repeat: repeated mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <style type="text/css"> + div.outer { + width: 150px; + height: 150px; + border: 1px solid black; + } + + .color { + background-color: purple; + } + + #round { + width: 150px; + height: 150px; + } + + #round-x { + width: 150px; + height: 50px; + } + + #round-y { + width: 50px; + height: 150px; + } + </style> + </head> + <body> + <div class="outer"><div id="round" class="color"></div></div> + <div class="outer"><div id="round-x" class="color"></div></div> + <div class="outer"><div id="round-y" class="color"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-size-auto-length-ref.htm b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-size-auto-length-ref.htm new file mode 100644 index 00000000000..21776b80201 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-size-auto-length-ref.htm @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner { + width: 20px; + height: 20px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-size-auto-ref.htm b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-size-auto-ref.htm new file mode 100644 index 00000000000..cb4c36f85bd --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-size-auto-ref.htm @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner { + width: 50px; + height: 50px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-size-contain-clip-border-ref.htm b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-size-contain-clip-border-ref.htm new file mode 100644 index 00000000000..50a014d384c --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-size-contain-clip-border-ref.htm @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner { + width: 64px; + height: 64px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-size-contain-clip-padding-ref.htm b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-size-contain-clip-padding-ref.htm new file mode 100644 index 00000000000..40c9a28be39 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-size-contain-clip-padding-ref.htm @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner { + border: 20px solid white; + width: 24px; + height: 88px; + } + + #innermost { + width: 24px; + height: 24px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"> + <div id="innermost"></div> + </div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-size-contain-position-fifty-fifty-ref.htm b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-size-contain-position-fifty-fifty-ref.htm new file mode 100644 index 00000000000..1546c5c321f --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-size-contain-position-fifty-fifty-ref.htm @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner1 { + width: 64px; + height: 32px; + } + + #inner2 { + width: 64px; + height: 64px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner1"></div> + <div id="inner2"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-size-contain-ref.htm b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-size-contain-ref.htm new file mode 100644 index 00000000000..acb4de5f37e --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-size-contain-ref.htm @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <style type="text/css"> + #outer { + border: 10px solid black; + width: 64px; + height: 128px; + } + + #inner { + width: 64px; + height: 64px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-size-cover-ref.htm b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-size-cover-ref.htm new file mode 100644 index 00000000000..f2bdbc2718e --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-size-cover-ref.htm @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <style type="text/css"> + #outer { + border: 10px solid transparent; + width: 64px; + height: 128px; + background-clip: content-box; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-size-length-length-ref.htm b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-size-length-length-ref.htm new file mode 100644 index 00000000000..908f2b0b55a --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-size-length-length-ref.htm @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner { + width: 32px; + height: 64px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-size-length-percent-ref.htm b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-size-length-percent-ref.htm new file mode 100644 index 00000000000..8786d603e97 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-size-length-percent-ref.htm @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner { + width: 16px; + height: 32px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-size-percent-percent-ref.htm b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-size-percent-percent-ref.htm new file mode 100644 index 00000000000..a35a2a5f21f --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-size-percent-percent-ref.htm @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner { + width: 32px; + height: 32px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-size-percent-percent-stretch-ref.htm b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-size-percent-percent-stretch-ref.htm new file mode 100644 index 00000000000..c19c1822ab1 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/mask-size-percent-percent-stretch-ref.htm @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen"> + <link href="https://www.mozilla.org" rel="author" title="Mozilla"> + <style type="text/css"> + div { + width: 60px; + height: 120px; + } + + #outer { + border: 10px solid black; + } + + #inner { + height: 60px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/50x100-opaque-blue.svg b/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/50x100-opaque-blue.svg new file mode 100644 index 00000000000..0ce8f599731 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/50x100-opaque-blue.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="50" height="100"> + <rect x="0" y="0" width="50" height="100" fill="blue" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/50x50-opaque-blue.svg b/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/50x50-opaque-blue.svg new file mode 100644 index 00000000000..ac194ee3473 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/50x50-opaque-blue.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50"> + <rect x="0" y="0" width="50" height="50" fill="blue" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/blue-100x100.png b/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/blue-100x100.png Binary files differnew file mode 100644 index 00000000000..3b72d5ce53c --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/blue-100x100.png diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/blue-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/blue-100x100.svg new file mode 100644 index 00000000000..ebe8fa73aee --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/blue-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="blue" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/blue-100x50-transparent-100x50.svg b/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/blue-100x50-transparent-100x50.svg index a79d9685c94..2ed03935634 100644 --- a/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/blue-100x50-transparent-100x50.svg +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/blue-100x50-transparent-100x50.svg @@ -1,4 +1,4 @@ <svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <rect x="0" y="0" width="100%" height="50%" fill="blue" fill-opacity="0"/> - <rect x="0" y="50" width="100%" height="50%" fill="blue" fill-opacity="1"/> + <rect x="0" y="50%" width="100%" height="50%" fill="blue" fill-opacity="1"/> </svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/blue-luminance-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/blue-luminance-100x100.svg new file mode 100644 index 00000000000..3f8e0341e4a --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/blue-luminance-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="RGB(238,238,255)" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/green-100x100.png b/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/green-100x100.png Binary files differnew file mode 100644 index 00000000000..d65838b7f02 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/green-100x100.png diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/green-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/green-100x100.svg new file mode 100644 index 00000000000..d792713591e --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/green-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="lime" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/green-luminance-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/green-luminance-100x100.svg new file mode 100644 index 00000000000..c33436ed43c --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/green-luminance-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="RGB(73,73,255)" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/mask-half-transparent-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/mask-half-transparent-100x100.svg new file mode 100644 index 00000000000..2abd94deec4 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/mask-half-transparent-100x100.svg @@ -0,0 +1,8 @@ +<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> + <defs> + <mask id="mask" mask-type="alpha"> + <rect x="0" y="0" width="100" height="50" fill-opacity="1"/> + <rect x="0" y="50" width="100" height="50" fill-opacity="0"/> + </mask> + </defs> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/red-100x100.png b/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/red-100x100.png Binary files differnew file mode 100644 index 00000000000..43b8e542a92 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/red-100x100.png diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/red-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/red-100x100.svg new file mode 100644 index 00000000000..175c05f28f2 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/red-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="red" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/red-luminance-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/red-luminance-100x100.svg new file mode 100644 index 00000000000..274905d6b90 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/red-luminance-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="RGB(201,201,255)" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/transparent-100x50-blue-100x50.svg b/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/transparent-100x50-blue-100x50.svg index c4017557889..81d59b1bcf1 100644 --- a/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/transparent-100x50-blue-100x50.svg +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reference/support/transparent-100x50-blue-100x50.svg @@ -1,4 +1,4 @@ <svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <rect x="0" y="0" width="100%" height="50%" fill="blue" fill-opacity="1"/> - <rect x="0" y="50" width="100%" height="50%" fill="blue" fill-opacity="0"/> + <rect x="0" y="50%" width="100%" height="50%" fill="blue" fill-opacity="0"/> </svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reftest-toc.htm b/tests/wpt/css-tests/css-masking-1_dev/html/reftest-toc.htm index c326e12a340..11ba221d712 100644 --- a/tests/wpt/css-tests/css-masking-1_dev/html/reftest-toc.htm +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reftest-toc.htm @@ -480,6 +480,14 @@ <td rowspan="1"></td> </tr> </tbody> + <tbody id="mask-clip-1" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-clip: clip mask image"> + <a href="mask-clip-1.htm">mask-clip-1</a></td> + <td><a href="reference/mask-clip-1-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> <tbody id="mask-composite-1a" class=""> <tr> <td rowspan="1" title="CSS Masking: mask-composite: compose vector image"> @@ -512,6 +520,350 @@ <td rowspan="1"></td> </tr> </tbody> + <tbody id="mask-image-1a" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-image: mask layer image"> + <a href="mask-image-1a.htm">mask-image-1a</a></td> + <td><a href="reference/mask-image-1-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-image-1b" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-image: mask layer image"> + <a href="mask-image-1b.htm">mask-image-1b</a></td> + <td><a href="reference/mask-image-1-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-image-1c" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-image: mask layer image"> + <a href="mask-image-1c.htm">mask-image-1c</a></td> + <td><a href="reference/mask-image-1-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-image-2" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-image: mask layer image"> + <a href="mask-image-2.htm">mask-image-2</a></td> + <td><a href="reference/mask-image-2-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-mode-a" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-mode with vector image"> + <a href="mask-mode-a.htm">mask-mode-a</a></td> + <td><a href="reference/mask-mode-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-mode-b" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-mode with raster image"> + <a href="mask-mode-b.htm">mask-mode-b</a></td> + <td><a href="reference/mask-mode-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-origin-1" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-origin: mask positioning area"> + <a href="mask-origin-1.htm">mask-origin-1</a></td> + <td><a href="reference/mask-origin-1-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-origin-2" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-origin: mask positioning area"> + <a href="mask-origin-2.htm">mask-origin-2</a></td> + <td><a href="reference/mask-origin-2-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-1a" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-1a.htm">mask-position-1a</a></td> + <td><a href="reference/mask-position-1-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-1b" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-1b.htm">mask-position-1b</a></td> + <td><a href="reference/mask-position-1-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-1c" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-1c.htm">mask-position-1c</a></td> + <td><a href="reference/mask-position-1-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-2a" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-2a.htm">mask-position-2a</a></td> + <td><a href="reference/mask-position-2-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-2b" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-2b.htm">mask-position-2b</a></td> + <td><a href="reference/mask-position-2-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-3a" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-3a.htm">mask-position-3a</a></td> + <td><a href="reference/mask-position-3-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-3b" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-3b.htm">mask-position-3b</a></td> + <td><a href="reference/mask-position-3-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-4a" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-4a.htm">mask-position-4a</a></td> + <td><a href="reference/mask-position-4-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-4b" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-4b.htm">mask-position-4b</a></td> + <td><a href="reference/mask-position-4-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-4c" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-4c.htm">mask-position-4c</a></td> + <td><a href="reference/mask-position-4-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-4d" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-4d.htm">mask-position-4d</a></td> + <td><a href="reference/mask-position-4-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-5" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-5.htm">mask-position-5</a></td> + <td><a href="reference/mask-position-5-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-6" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-6.htm">mask-position-6</a></td> + <td><a href="reference/mask-position-6-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-7" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-7.htm">mask-position-7</a></td> + <td><a href="reference/mask-position-7-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-repeat-1" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-repeat: repeated mask layer image"> + <a href="mask-repeat-1.htm">mask-repeat-1</a></td> + <td><a href="reference/mask-repeat-1-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-repeat-2" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-repeat: repeated mask layer image"> + <a href="mask-repeat-2.htm">mask-repeat-2</a></td> + <td><a href="reference/mask-repeat-2-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-repeat-3" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-repeat: repeated mask layer image"> + <a href="mask-repeat-3.htm">mask-repeat-3</a></td> + <td><a href="reference/mask-repeat-3-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-auto" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-auto.htm">mask-size-auto</a></td> + <td><a href="reference/mask-size-auto-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-auto-auto" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-auto-auto.htm">mask-size-auto-auto</a></td> + <td><a href="reference/mask-size-auto-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-auto-length" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-auto-length.htm">mask-size-auto-length</a></td> + <td><a href="reference/mask-size-auto-length-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-auto-percent" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-auto-percent.htm">mask-size-auto-percent</a></td> + <td><a href="reference/mask-size-auto-length-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-contain" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-contain.htm">mask-size-contain</a></td> + <td><a href="reference/mask-size-contain-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-contain-clip-border" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-contain-clip-border.htm">mask-size-contain-clip-border</a></td> + <td><a href="reference/mask-size-contain-clip-border-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-contain-clip-padding" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-contain-clip-padding.htm">mask-size-contain-clip-padding</a></td> + <td><a href="reference/mask-size-contain-clip-padding-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-contain-position-fifty-fifty" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-contain-position-fifty-fifty.htm">mask-size-contain-position-fifty-fifty</a></td> + <td><a href="reference/mask-size-contain-position-fifty-fifty-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-cover" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-cover.htm">mask-size-cover</a></td> + <td><a href="reference/mask-size-cover-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-length" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-length.htm">mask-size-length</a></td> + <td><a href="reference/mask-size-length-length-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-length-auto" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-length-auto.htm">mask-size-length-auto</a></td> + <td><a href="reference/mask-size-length-length-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-length-length" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-length-length.htm">mask-size-length-length</a></td> + <td><a href="reference/mask-size-length-length-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-length-percent" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-length-percent.htm">mask-size-length-percent</a></td> + <td><a href="reference/mask-size-length-percent-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-percent" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-percent.htm">mask-size-percent</a></td> + <td><a href="reference/mask-size-percent-percent-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-percent-auto" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-percent-auto.htm">mask-size-percent-auto</a></td> + <td><a href="reference/mask-size-percent-percent-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-percent-length" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-percent-length.htm">mask-size-percent-length</a></td> + <td><a href="reference/mask-size-percent-percent-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-percent-percent" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-percent-percent.htm">mask-size-percent-percent</a></td> + <td><a href="reference/mask-size-percent-percent-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-percent-percent-stretch" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-percent-percent-stretch.htm">mask-size-percent-percent-stretch</a></td> + <td><a href="reference/mask-size-percent-percent-stretch-ref.htm">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> <tbody id="test-mask" class=""> <tr> <td rowspan="1" title="CSS Masking: mask-repeat:round repeat;"> diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/reftest.list b/tests/wpt/css-tests/css-masking-1_dev/html/reftest.list index 86dc2e4696c..d1f316697dd 100644 --- a/tests/wpt/css-tests/css-masking-1_dev/html/reftest.list +++ b/tests/wpt/css-tests/css-masking-1_dev/html/reftest.list @@ -56,8 +56,52 @@ clip-rect-comma-003.htm == reference/clip-no-clipping-ref.htm clip-rect-comma-004.htm == reference/clip-no-clipping-ref.htm clip-rule-001.htm == reference/clip-rule-rectangle-border-ref.htm clip-rule-002.htm == reference/clip-rule-rectangle-border-ref.htm +mask-clip-1.htm == reference/mask-clip-1-ref.htm mask-composite-1a.htm == reference/mask-composite-1-ref.htm mask-composite-1b.htm == reference/mask-composite-1-ref.htm mask-composite-2a.htm == reference/mask-composite-2-ref.htm mask-composite-2b.htm == reference/mask-composite-2-ref.htm +mask-image-1a.htm == reference/mask-image-1-ref.htm +mask-image-1b.htm == reference/mask-image-1-ref.htm +mask-image-1c.htm == reference/mask-image-1-ref.htm +mask-image-2.htm == reference/mask-image-2-ref.htm +mask-mode-a.htm == reference/mask-mode-ref.htm +mask-mode-b.htm == reference/mask-mode-ref.htm +mask-origin-1.htm == reference/mask-origin-1-ref.htm +mask-origin-2.htm == reference/mask-origin-2-ref.htm +mask-position-1a.htm == reference/mask-position-1-ref.htm +mask-position-1b.htm == reference/mask-position-1-ref.htm +mask-position-1c.htm == reference/mask-position-1-ref.htm +mask-position-2a.htm == reference/mask-position-2-ref.htm +mask-position-2b.htm == reference/mask-position-2-ref.htm +mask-position-3a.htm == reference/mask-position-3-ref.htm +mask-position-3b.htm == reference/mask-position-3-ref.htm +mask-position-4a.htm == reference/mask-position-4-ref.htm +mask-position-4b.htm == reference/mask-position-4-ref.htm +mask-position-4c.htm == reference/mask-position-4-ref.htm +mask-position-4d.htm == reference/mask-position-4-ref.htm +mask-position-5.htm == reference/mask-position-5-ref.htm +mask-position-6.htm == reference/mask-position-6-ref.htm +mask-position-7.htm == reference/mask-position-7-ref.htm +mask-repeat-1.htm == reference/mask-repeat-1-ref.htm +mask-repeat-2.htm == reference/mask-repeat-2-ref.htm +mask-repeat-3.htm == reference/mask-repeat-3-ref.htm +mask-size-auto.htm == reference/mask-size-auto-ref.htm +mask-size-auto-auto.htm == reference/mask-size-auto-ref.htm +mask-size-auto-length.htm == reference/mask-size-auto-length-ref.htm +mask-size-auto-percent.htm == reference/mask-size-auto-length-ref.htm +mask-size-contain.htm == reference/mask-size-contain-ref.htm +mask-size-contain-clip-border.htm == reference/mask-size-contain-clip-border-ref.htm +mask-size-contain-clip-padding.htm == reference/mask-size-contain-clip-padding-ref.htm +mask-size-contain-position-fifty-fifty.htm == reference/mask-size-contain-position-fifty-fifty-ref.htm +mask-size-cover.htm == reference/mask-size-cover-ref.htm +mask-size-length.htm == reference/mask-size-length-length-ref.htm +mask-size-length-auto.htm == reference/mask-size-length-length-ref.htm +mask-size-length-length.htm == reference/mask-size-length-length-ref.htm +mask-size-length-percent.htm == reference/mask-size-length-percent-ref.htm +mask-size-percent.htm == reference/mask-size-percent-percent-ref.htm +mask-size-percent-auto.htm == reference/mask-size-percent-percent-ref.htm +mask-size-percent-length.htm == reference/mask-size-percent-percent-ref.htm +mask-size-percent-percent.htm == reference/mask-size-percent-percent-ref.htm +mask-size-percent-percent-stretch.htm == reference/mask-size-percent-percent-stretch-ref.htm test-mask.htm == reference/test-mask-ref.htm diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/support/50x100-opaque-blue.svg b/tests/wpt/css-tests/css-masking-1_dev/html/support/50x100-opaque-blue.svg new file mode 100644 index 00000000000..0ce8f599731 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/support/50x100-opaque-blue.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="50" height="100"> + <rect x="0" y="0" width="50" height="100" fill="blue" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/support/50x50-opaque-blue.svg b/tests/wpt/css-tests/css-masking-1_dev/html/support/50x50-opaque-blue.svg new file mode 100644 index 00000000000..ac194ee3473 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/support/50x50-opaque-blue.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50"> + <rect x="0" y="0" width="50" height="50" fill="blue" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/support/blue-100x100.png b/tests/wpt/css-tests/css-masking-1_dev/html/support/blue-100x100.png Binary files differnew file mode 100644 index 00000000000..3b72d5ce53c --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/support/blue-100x100.png diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/support/blue-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/html/support/blue-100x100.svg new file mode 100644 index 00000000000..ebe8fa73aee --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/support/blue-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="blue" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/support/blue-100x50-transparent-100x50.svg b/tests/wpt/css-tests/css-masking-1_dev/html/support/blue-100x50-transparent-100x50.svg index a79d9685c94..2ed03935634 100644 --- a/tests/wpt/css-tests/css-masking-1_dev/html/support/blue-100x50-transparent-100x50.svg +++ b/tests/wpt/css-tests/css-masking-1_dev/html/support/blue-100x50-transparent-100x50.svg @@ -1,4 +1,4 @@ <svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <rect x="0" y="0" width="100%" height="50%" fill="blue" fill-opacity="0"/> - <rect x="0" y="50" width="100%" height="50%" fill="blue" fill-opacity="1"/> + <rect x="0" y="50%" width="100%" height="50%" fill="blue" fill-opacity="1"/> </svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/support/blue-luminance-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/html/support/blue-luminance-100x100.svg new file mode 100644 index 00000000000..3f8e0341e4a --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/support/blue-luminance-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="RGB(238,238,255)" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/support/green-100x100.png b/tests/wpt/css-tests/css-masking-1_dev/html/support/green-100x100.png Binary files differnew file mode 100644 index 00000000000..d65838b7f02 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/support/green-100x100.png diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/support/green-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/html/support/green-100x100.svg new file mode 100644 index 00000000000..d792713591e --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/support/green-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="lime" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/support/green-luminance-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/html/support/green-luminance-100x100.svg new file mode 100644 index 00000000000..c33436ed43c --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/support/green-luminance-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="RGB(73,73,255)" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/support/mask-half-transparent-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/html/support/mask-half-transparent-100x100.svg new file mode 100644 index 00000000000..2abd94deec4 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/support/mask-half-transparent-100x100.svg @@ -0,0 +1,8 @@ +<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> + <defs> + <mask id="mask" mask-type="alpha"> + <rect x="0" y="0" width="100" height="50" fill-opacity="1"/> + <rect x="0" y="50" width="100" height="50" fill-opacity="0"/> + </mask> + </defs> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/support/red-100x100.png b/tests/wpt/css-tests/css-masking-1_dev/html/support/red-100x100.png Binary files differnew file mode 100644 index 00000000000..43b8e542a92 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/support/red-100x100.png diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/support/red-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/html/support/red-100x100.svg new file mode 100644 index 00000000000..175c05f28f2 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/support/red-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="red" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/support/red-luminance-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/html/support/red-luminance-100x100.svg new file mode 100644 index 00000000000..274905d6b90 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/html/support/red-luminance-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="RGB(201,201,255)" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/support/transparent-100x50-blue-100x50.svg b/tests/wpt/css-tests/css-masking-1_dev/html/support/transparent-100x50-blue-100x50.svg index c4017557889..81d59b1bcf1 100644 --- a/tests/wpt/css-tests/css-masking-1_dev/html/support/transparent-100x50-blue-100x50.svg +++ b/tests/wpt/css-tests/css-masking-1_dev/html/support/transparent-100x50-blue-100x50.svg @@ -1,4 +1,4 @@ <svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <rect x="0" y="0" width="100%" height="50%" fill="blue" fill-opacity="1"/> - <rect x="0" y="50" width="100%" height="50%" fill="blue" fill-opacity="0"/> + <rect x="0" y="50%" width="100%" height="50%" fill="blue" fill-opacity="0"/> </svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/html/toc.htm b/tests/wpt/css-tests/css-masking-1_dev/html/toc.htm index 9774da095a2..89d50a306d2 100644 --- a/tests/wpt/css-tests/css-masking-1_dev/html/toc.htm +++ b/tests/wpt/css-tests/css-masking-1_dev/html/toc.htm @@ -52,7 +52,7 @@ <tbody id="s7"> <tr><th><a href="chapter-7.htm">Chapter 7 - Positioned Masks</a></th> - <td>(5 Tests)</td></tr> + <td>(49 Tests)</td></tr> </tbody> <tbody id="s8"> <tr><th><a href="chapter-8.htm">Chapter 8 - diff --git a/tests/wpt/css-tests/css-masking-1_dev/implementation-report-TEMPLATE.data b/tests/wpt/css-tests/css-masking-1_dev/implementation-report-TEMPLATE.data index 0820fd9d568..202d4bc404e 100644 --- a/tests/wpt/css-tests/css-masking-1_dev/implementation-report-TEMPLATE.data +++ b/tests/wpt/css-tests/css-masking-1_dev/implementation-report-TEMPLATE.data @@ -117,6 +117,8 @@ html/clip-rule-001.htm 685b1c6b98405699db11621e3739893d03bb287f ? xhtml1/clip-rule-001.xht 685b1c6b98405699db11621e3739893d03bb287f ? html/clip-rule-002.htm 060477805299dce5079f7940f4140876d0d2d33e ? xhtml1/clip-rule-002.xht 060477805299dce5079f7940f4140876d0d2d33e ? +html/mask-clip-1.htm ab17761a9fea47931e59ef59248f25abd6791108 ? +xhtml1/mask-clip-1.xht ab17761a9fea47931e59ef59248f25abd6791108 ? html/mask-composite-1a.htm 74dbc9500f92eb0a5a1bfe501a5a800f86ab65c3 ? xhtml1/mask-composite-1a.xht 74dbc9500f92eb0a5a1bfe501a5a800f86ab65c3 ? html/mask-composite-1b.htm eb991ca37e25232a0345ddc51d97205951f49ce6 ? @@ -125,5 +127,91 @@ html/mask-composite-2a.htm 26f6311f7ed2e3302adef9ef7918f2e88eaa2a3d ? xhtml1/mask-composite-2a.xht 26f6311f7ed2e3302adef9ef7918f2e88eaa2a3d ? html/mask-composite-2b.htm b9d66fde9152a2bda5f60db59a64b816f2f1b7ca ? xhtml1/mask-composite-2b.xht b9d66fde9152a2bda5f60db59a64b816f2f1b7ca ? +html/mask-image-1a.htm 9dcbd4b3ff1098164640ba8e6381243a6c165c68 ? +xhtml1/mask-image-1a.xht 9dcbd4b3ff1098164640ba8e6381243a6c165c68 ? +html/mask-image-1b.htm 5c3b7f570678ab052a9fb7cf5cb5ea2238d9ffa9 ? +xhtml1/mask-image-1b.xht 5c3b7f570678ab052a9fb7cf5cb5ea2238d9ffa9 ? +html/mask-image-1c.htm 67a05342df5dad237e53b40a181554db612da086 ? +xhtml1/mask-image-1c.xht 67a05342df5dad237e53b40a181554db612da086 ? +html/mask-image-2.htm 5369c24eb94bfe4899442f789cc0d988fe6d2aeb ? +xhtml1/mask-image-2.xht 5369c24eb94bfe4899442f789cc0d988fe6d2aeb ? +html/mask-mode-a.htm a64455fb83c162922ddfb6d45497b79f77b50ef3 ? +xhtml1/mask-mode-a.xht a64455fb83c162922ddfb6d45497b79f77b50ef3 ? +html/mask-mode-b.htm 61737e162df85c4362c54ffabd1f086f6d387506 ? +xhtml1/mask-mode-b.xht 61737e162df85c4362c54ffabd1f086f6d387506 ? +html/mask-origin-1.htm 5ba2e66ad99e92e67b9a3b9c04f249d41c16d517 ? +xhtml1/mask-origin-1.xht 5ba2e66ad99e92e67b9a3b9c04f249d41c16d517 ? +html/mask-origin-2.htm 66dea1e4283a718f62e2ea23616ebba929179c7e ? +xhtml1/mask-origin-2.xht 66dea1e4283a718f62e2ea23616ebba929179c7e ? +html/mask-position-1a.htm 2335ff1467039590c16bb12ebc78046fec611646 ? +xhtml1/mask-position-1a.xht 2335ff1467039590c16bb12ebc78046fec611646 ? +html/mask-position-1b.htm ae0e1a39aa966e45b66460a567690b4163f61a3b ? +xhtml1/mask-position-1b.xht ae0e1a39aa966e45b66460a567690b4163f61a3b ? +html/mask-position-1c.htm 8748ccea63d9e702eabc4ac653787d062b67baa4 ? +xhtml1/mask-position-1c.xht 8748ccea63d9e702eabc4ac653787d062b67baa4 ? +html/mask-position-2a.htm 8615cfc1c2f3027339c00b724ba18a1a32a95af6 ? +xhtml1/mask-position-2a.xht 8615cfc1c2f3027339c00b724ba18a1a32a95af6 ? +html/mask-position-2b.htm b439a79fc048d75a9986f059ff28c037989a2c4f ? +xhtml1/mask-position-2b.xht b439a79fc048d75a9986f059ff28c037989a2c4f ? +html/mask-position-3a.htm 0245963b690e1a69d2b038aefae8090f2360b26b ? +xhtml1/mask-position-3a.xht 0245963b690e1a69d2b038aefae8090f2360b26b ? +html/mask-position-3b.htm 57a1d58ad54660e0d9db408c84e7eb676dcca3de ? +xhtml1/mask-position-3b.xht 57a1d58ad54660e0d9db408c84e7eb676dcca3de ? +html/mask-position-4a.htm 8ba99a0b2997678a795ecb9448d32fda8c9a3438 ? +xhtml1/mask-position-4a.xht 8ba99a0b2997678a795ecb9448d32fda8c9a3438 ? +html/mask-position-4b.htm 896f34c0a24e2897d0ebd4f6e6b6d3ff0aedcd73 ? +xhtml1/mask-position-4b.xht 896f34c0a24e2897d0ebd4f6e6b6d3ff0aedcd73 ? +html/mask-position-4c.htm 2b46935b6c1872062ecd31a5f8d7ea3ef7bf12e5 ? +xhtml1/mask-position-4c.xht 2b46935b6c1872062ecd31a5f8d7ea3ef7bf12e5 ? +html/mask-position-4d.htm d03d65891d1024664353f14429801b0cbcf7b645 ? +xhtml1/mask-position-4d.xht d03d65891d1024664353f14429801b0cbcf7b645 ? +html/mask-position-5.htm 7dd089a99722b3c52e507713b4205d202c1d95bc ? +xhtml1/mask-position-5.xht 7dd089a99722b3c52e507713b4205d202c1d95bc ? +html/mask-position-6.htm cf0739b65e8cadf1b6584cdfd5d0d080eb5db37f ? +xhtml1/mask-position-6.xht cf0739b65e8cadf1b6584cdfd5d0d080eb5db37f ? +html/mask-position-7.htm 170b41b3839dd4eeef13317d5bc3abde0ac5fac5 ? +xhtml1/mask-position-7.xht 170b41b3839dd4eeef13317d5bc3abde0ac5fac5 ? +html/mask-repeat-1.htm 7aa5abafcb59758e49ed8c93eedc453352c4ecfa ? +xhtml1/mask-repeat-1.xht 7aa5abafcb59758e49ed8c93eedc453352c4ecfa ? +html/mask-repeat-2.htm 6f053417e4a91fe62f6f117d71ac7d3755a09731 ? +xhtml1/mask-repeat-2.xht 6f053417e4a91fe62f6f117d71ac7d3755a09731 ? +html/mask-repeat-3.htm 287d3b829e337e127ac50ce317d3dfa1ea70cf4c ? +xhtml1/mask-repeat-3.xht 287d3b829e337e127ac50ce317d3dfa1ea70cf4c ? +html/mask-size-auto-auto.htm e95cdc294474c9f816c0b484b67625970fa74404 ? +xhtml1/mask-size-auto-auto.xht e95cdc294474c9f816c0b484b67625970fa74404 ? +html/mask-size-auto-length.htm 1f052e9710dd860ce5682cdcd67a3def4c799eab ? +xhtml1/mask-size-auto-length.xht 1f052e9710dd860ce5682cdcd67a3def4c799eab ? +html/mask-size-auto-percent.htm 0a30cf915fa1b4c839e64804b80274d6eaf69a47 ? +xhtml1/mask-size-auto-percent.xht 0a30cf915fa1b4c839e64804b80274d6eaf69a47 ? +html/mask-size-auto.htm 0a2fa5214c192bd1a3ddb2d57ccde814470a8390 ? +xhtml1/mask-size-auto.xht 0a2fa5214c192bd1a3ddb2d57ccde814470a8390 ? +html/mask-size-contain-clip-border.htm aa4a17de4f0d7f5fd54382e359391b1b42663aba ? +xhtml1/mask-size-contain-clip-border.xht aa4a17de4f0d7f5fd54382e359391b1b42663aba ? +html/mask-size-contain-clip-padding.htm de2b62b736281554d3a1a572b7933a6bf3fb0261 ? +xhtml1/mask-size-contain-clip-padding.xht de2b62b736281554d3a1a572b7933a6bf3fb0261 ? +html/mask-size-contain-position-fifty-fifty.htm 18f4d823525760a32479bfdc1960a3f79848f05e ? +xhtml1/mask-size-contain-position-fifty-fifty.xht 18f4d823525760a32479bfdc1960a3f79848f05e ? +html/mask-size-contain.htm 986a82cf8b954a2f04c8f444e6bac443b7502ce2 ? +xhtml1/mask-size-contain.xht 986a82cf8b954a2f04c8f444e6bac443b7502ce2 ? +html/mask-size-cover.htm 45930d72d1b48cd5333465233c3970c459e75262 ? +xhtml1/mask-size-cover.xht 45930d72d1b48cd5333465233c3970c459e75262 ? +html/mask-size-length-auto.htm 28403cc5c4c8a6e58bd2ab0821ff78eac60cc058 ? +xhtml1/mask-size-length-auto.xht 28403cc5c4c8a6e58bd2ab0821ff78eac60cc058 ? +html/mask-size-length-length.htm aed9c4ca10b440457c970be7b6a4945508dc2d92 ? +xhtml1/mask-size-length-length.xht aed9c4ca10b440457c970be7b6a4945508dc2d92 ? +html/mask-size-length-percent.htm 65bb0e6875c0534743e6aeb4dfe43c1bf2146b17 ? +xhtml1/mask-size-length-percent.xht 65bb0e6875c0534743e6aeb4dfe43c1bf2146b17 ? +html/mask-size-length.htm 4defd24447eb46cfd5ad227c703996c885dd996a ? +xhtml1/mask-size-length.xht 4defd24447eb46cfd5ad227c703996c885dd996a ? +html/mask-size-percent-auto.htm 8baa71d4d2b7d41a425e827c92d5a2a078f18124 ? +xhtml1/mask-size-percent-auto.xht 8baa71d4d2b7d41a425e827c92d5a2a078f18124 ? +html/mask-size-percent-length.htm a8a7d1ef5b2b7d2e05730ff635da2e52febea06a ? +xhtml1/mask-size-percent-length.xht a8a7d1ef5b2b7d2e05730ff635da2e52febea06a ? +html/mask-size-percent-percent-stretch.htm 9df34563dc65ae4b0a1247137af3e5a7e2cae099 ? +xhtml1/mask-size-percent-percent-stretch.xht 9df34563dc65ae4b0a1247137af3e5a7e2cae099 ? +html/mask-size-percent-percent.htm 3af6f431c0ac9d53fd4194503030f5188753ad43 ? +xhtml1/mask-size-percent-percent.xht 3af6f431c0ac9d53fd4194503030f5188753ad43 ? +html/mask-size-percent.htm 222fd7b0d5f7e5a5fa1c9ce93838d7a768c47a76 ? +xhtml1/mask-size-percent.xht 222fd7b0d5f7e5a5fa1c9ce93838d7a768c47a76 ? html/test-mask.htm d958a4c5495e1038da67e6f0a88ada4dbb3f9c1d ? xhtml1/test-mask.xht d958a4c5495e1038da67e6f0a88ada4dbb3f9c1d ? diff --git a/tests/wpt/css-tests/css-masking-1_dev/index.htm b/tests/wpt/css-tests/css-masking-1_dev/index.htm index 72234767e0a..e54ce972b96 100644 --- a/tests/wpt/css-tests/css-masking-1_dev/index.htm +++ b/tests/wpt/css-tests/css-masking-1_dev/index.htm @@ -131,9 +131,11 @@ <p>Many thanks to the following for their contributions:</p> <ul> + <li>Astley Chen</li> <li>CJ Ku</li> <li>Denise White</li> <li>Dirk Schulze</li> + <li>Ethan Lin</li> <li>Laury Kenton</li> <li>Li Jun</li> <li>Mozilla</li> diff --git a/tests/wpt/css-tests/css-masking-1_dev/index.xht b/tests/wpt/css-tests/css-masking-1_dev/index.xht index 31207280394..4a75ec6ab19 100644 --- a/tests/wpt/css-tests/css-masking-1_dev/index.xht +++ b/tests/wpt/css-tests/css-masking-1_dev/index.xht @@ -131,9 +131,11 @@ <p>Many thanks to the following for their contributions:</p> <ul> + <li>Astley Chen</li> <li>CJ Ku</li> <li>Denise White</li> <li>Dirk Schulze</li> + <li>Ethan Lin</li> <li>Laury Kenton</li> <li>Li Jun</li> <li>Mozilla</li> diff --git a/tests/wpt/css-tests/css-masking-1_dev/testinfo.data b/tests/wpt/css-tests/css-masking-1_dev/testinfo.data index 683dc61d3f7..8c683b56782 100644 --- a/tests/wpt/css-tests/css-masking-1_dev/testinfo.data +++ b/tests/wpt/css-tests/css-masking-1_dev/testinfo.data @@ -56,8 +56,52 @@ clip-rect-comma-003 reference/clip-no-clipping-ref CSS Masking: Test comma separ clip-rect-comma-004 reference/clip-no-clipping-ref CSS Masking: Test comma separation of rect function on clip - no comma between 3rd and 4th value http://www.w3.org/TR/css-masking-1/#clip-property 38b542cefdad3a69bbb2c9161784112bfdbb0565 `Dirk Schulze`<mailto:dschulze@adobe.com> Values for rect function on clip can be white space or comma separated, but not both. Otherwise the property setting gets ignored. Testing rect function without comma separation between 3rd and 4th value. On pass you should see a green square with a blue border. clip-rule-001 reference/clip-rule-rectangle-border-ref CSS Masking: Test clip-rule property on polygon clip rule evenodd http://www.w3.org/TR/css-masking-1/#clipping-paths,http://www.w3.org/TR/css-masking-1/#propdef-clip-path,http://www.w3.org/TR/css-masking-1/#ClipPathElement 685b1c6b98405699db11621e3739893d03bb287f `Dirk Schulze`<mailto:dschulze@adobe.com> The clipPath element takes the basic shape 'polygon' for clipping. The point list for the polygon creates a 'whole' with the dimension of the background. With the clip rule 'evenodd', this whole is clipped out. The clipping makes the green background of the parent div box visible. On pass you should see a green box with a blue border. clip-rule-002 reference/clip-rule-rectangle-border-ref CSS Masking: Test clip-rule property on polygon clip rule nonzero http://www.w3.org/TR/css-masking-1/#clipping-paths,http://www.w3.org/TR/css-masking-1/#propdef-clip-path,http://www.w3.org/TR/css-masking-1/#ClipPathElement 060477805299dce5079f7940f4140876d0d2d33e `Dirk Schulze`<mailto:dschulze@adobe.com> The clipPath element takes the basic shape 'polygon' for clipping. The point list for the polygon creates a 'whole' with the dimension of the background. With the clip rule 'nonzero', this whole is clipped out. The clipping makes the green background of the parent div box visible. On pass you should see a green box with a blue border. +mask-clip-1 reference/mask-clip-1-ref CSS Masking: mask-clip: clip mask image http://www.w3.org/TR/css-masking-1/#the-mask-clip ab17761a9fea47931e59ef59248f25abd6791108 `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> border-box, padding-box, and content-box values of mask-clip should clip to the appropriate boxes. mask-composite-1a reference/mask-composite-1-ref CSS Masking: mask-composite: compose vector image http://www.w3.org/TR/css-masking-1/#the-mask-composite 74dbc9500f92eb0a5a1bfe501a5a800f86ab65c3 `CJ Ku`<mailto:cku@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks that vector-mask-image can be composed correctly by different mask-composite value. mask-composite-1b reference/mask-composite-1-ref CSS Masking: mask-composite: compose raster image http://www.w3.org/TR/css-masking-1/#the-mask-composite eb991ca37e25232a0345ddc51d97205951f49ce6 `CJ Ku`<mailto:cku@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks that raster-mask-image can be composed correctly by different mask-composite value. mask-composite-2a reference/mask-composite-2-ref CSS Masking: mask-composite: compose vector image http://www.w3.org/TR/css-masking-1/#the-mask-composite 26f6311f7ed2e3302adef9ef7918f2e88eaa2a3d `CJ Ku`<mailto:cku@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks that vector-mask-image can be composed correctly by different mask-composite value. mask-composite-2b reference/mask-composite-2-ref CSS Masking: mask-composite: compose raster image http://www.w3.org/TR/css-masking-1/#the-mask-composite b9d66fde9152a2bda5f60db59a64b816f2f1b7ca `CJ Ku`<mailto:cku@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks that raster-mask-image can be composed correctly by different mask-composite value. +mask-image-1a reference/mask-image-1-ref CSS Masking: mask-image: mask layer image https://www.w3.org/TR/css-masking-1/#the-mask-image 9dcbd4b3ff1098164640ba8e6381243a6c165c68 `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether image as mask layer works correctly or not. +mask-image-1b reference/mask-image-1-ref CSS Masking: mask-image: mask layer image https://www.w3.org/TR/css-masking-1/#the-mask-image 5c3b7f570678ab052a9fb7cf5cb5ea2238d9ffa9 `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether SVG image as mask layer works correctly or not. +mask-image-1c reference/mask-image-1-ref CSS Masking: mask-image: mask layer image https://www.w3.org/TR/css-masking-1/#the-mask-image 67a05342df5dad237e53b40a181554db612da086 `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether SVG mask element as mask layer works correctly or not. +mask-image-2 reference/mask-image-2-ref CSS Masking: mask-image: mask layer image https://www.w3.org/TR/css-masking-1/#the-mask-image 5369c24eb94bfe4899442f789cc0d988fe6d2aeb `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether gradient CSS image as mask layer works correctly or not. +mask-mode-a reference/mask-mode-ref CSS Masking: mask-mode with vector image https://www.w3.org/TR/css-masking-1/#propdef-mask-mode a64455fb83c162922ddfb6d45497b79f77b50ef3 `Ethan Lin`<mailto:ethlin@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks that mask an SVG image referenced by mask-image is correct with different mask mode. +mask-mode-b reference/mask-mode-ref CSS Masking: mask-mode with raster image https://www.w3.org/TR/css-masking-1/#propdef-mask-mode 61737e162df85c4362c54ffabd1f086f6d387506 `Ethan Lin`<mailto:ethlin@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks that mask a PNG image referenced by mask-image is correct with different mask mode. +mask-origin-1 reference/mask-origin-1-ref CSS Masking: mask-origin: mask positioning area https://www.w3.org/TR/css-masking-1/#the-mask-origin 5ba2e66ad99e92e67b9a3b9c04f249d41c16d517 `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether setting mask position area works correctly or not. +mask-origin-2 reference/mask-origin-2-ref CSS Masking: mask-origin: mask positioning area https://www.w3.org/TR/css-masking-1/#the-mask-origin 66dea1e4283a718f62e2ea23616ebba929179c7e `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether setting mask origin to margin-box works correctly or not. +mask-position-1a reference/mask-position-1-ref CSS Masking: mask-position: mask positioning https://www.w3.org/TR/css-masking-1/#the-mask-position 2335ff1467039590c16bb12ebc78046fec611646 `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether positioning mask layer works correctly or not. +mask-position-1b reference/mask-position-1-ref CSS Masking: mask-position: mask positioning https://www.w3.org/TR/css-masking-1/#the-mask-position ae0e1a39aa966e45b66460a567690b4163f61a3b `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether positioning mask layer works correctly or not. +mask-position-1c reference/mask-position-1-ref CSS Masking: mask-position: mask positioning https://www.w3.org/TR/css-masking-1/#the-mask-position 8748ccea63d9e702eabc4ac653787d062b67baa4 `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether positioning mask layer works correctly or not. +mask-position-2a reference/mask-position-2-ref CSS Masking: mask-position: mask positioning https://www.w3.org/TR/css-masking-1/#the-mask-position 8615cfc1c2f3027339c00b724ba18a1a32a95af6 `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether positioning mask layer works correctly or not. +mask-position-2b reference/mask-position-2-ref CSS Masking: mask-position: mask positioning https://www.w3.org/TR/css-masking-1/#the-mask-position b439a79fc048d75a9986f059ff28c037989a2c4f `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether positioning mask layer works correctly or not. +mask-position-3a reference/mask-position-3-ref CSS Masking: mask-position: mask positioning https://www.w3.org/TR/css-masking-1/#the-mask-position 0245963b690e1a69d2b038aefae8090f2360b26b `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether positioning mask layer works correctly or not. +mask-position-3b reference/mask-position-3-ref CSS Masking: mask-position: mask positioning https://www.w3.org/TR/css-masking-1/#the-mask-position 57a1d58ad54660e0d9db408c84e7eb676dcca3de `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether positioning mask layer works correctly or not. +mask-position-4a reference/mask-position-4-ref CSS Masking: mask-position: mask positioning https://www.w3.org/TR/css-masking-1/#the-mask-position 8ba99a0b2997678a795ecb9448d32fda8c9a3438 `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether positioning mask layer works correctly or not. +mask-position-4b reference/mask-position-4-ref CSS Masking: mask-position: mask positioning https://www.w3.org/TR/css-masking-1/#the-mask-position 896f34c0a24e2897d0ebd4f6e6b6d3ff0aedcd73 `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether positioning mask layer works correctly or not. +mask-position-4c reference/mask-position-4-ref CSS Masking: mask-position: mask positioning https://www.w3.org/TR/css-masking-1/#the-mask-position 2b46935b6c1872062ecd31a5f8d7ea3ef7bf12e5 `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether positioning mask layer works correctly or not. +mask-position-4d reference/mask-position-4-ref CSS Masking: mask-position: mask positioning https://www.w3.org/TR/css-masking-1/#the-mask-position d03d65891d1024664353f14429801b0cbcf7b645 `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether positioning mask layer works correctly or not. +mask-position-5 reference/mask-position-5-ref CSS Masking: mask-position: mask positioning https://www.w3.org/TR/css-masking-1/#the-mask-position 7dd089a99722b3c52e507713b4205d202c1d95bc `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether positioning mask layer works correctly or not. +mask-position-6 reference/mask-position-6-ref CSS Masking: mask-position: mask positioning https://www.w3.org/TR/css-masking-1/#the-mask-position cf0739b65e8cadf1b6584cdfd5d0d080eb5db37f `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether positioning mask layer works correctly or not. +mask-position-7 reference/mask-position-7-ref CSS Masking: mask-position: mask positioning https://www.w3.org/TR/css-masking-1/#the-mask-position 170b41b3839dd4eeef13317d5bc3abde0ac5fac5 `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether positioning mask layer works correctly or not. +mask-repeat-1 reference/mask-repeat-1-ref CSS Masking: mask-repeat: repeated mask layer image https://www.w3.org/TR/css-masking-1/#the-mask-repeat 7aa5abafcb59758e49ed8c93eedc453352c4ecfa `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether repeated mask layer works correctly or not. +mask-repeat-2 reference/mask-repeat-2-ref CSS Masking: mask-repeat: repeated mask layer image https://www.w3.org/TR/css-masking-1/#the-mask-repeat 6f053417e4a91fe62f6f117d71ac7d3755a09731 `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether repeated mask layer works correctly or not. +mask-repeat-3 reference/mask-repeat-3-ref CSS Masking: mask-repeat: repeated mask layer image https://www.w3.org/TR/css-masking-1/#the-mask-repeat 287d3b829e337e127ac50ce317d3dfa1ea70cf4c `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether repeated mask layer works correctly or not. +mask-size-auto reference/mask-size-auto-ref CSS Masking: mask-size: mask layer size https://www.w3.org/TR/css-masking-1/#the-mask-size 0a2fa5214c192bd1a3ddb2d57ccde814470a8390 `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether sizing mask layer works correctly or not. +mask-size-auto-auto reference/mask-size-auto-ref CSS Masking: mask-size: mask layer size https://www.w3.org/TR/css-masking-1/#the-mask-size e95cdc294474c9f816c0b484b67625970fa74404 `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether sizing mask layer works correctly or not. +mask-size-auto-length reference/mask-size-auto-length-ref CSS Masking: mask-size: mask layer size https://www.w3.org/TR/css-masking-1/#the-mask-size 1f052e9710dd860ce5682cdcd67a3def4c799eab `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether sizing mask layer works correctly or not. +mask-size-auto-percent reference/mask-size-auto-length-ref CSS Masking: mask-size: mask layer size https://www.w3.org/TR/css-masking-1/#the-mask-size 0a30cf915fa1b4c839e64804b80274d6eaf69a47 `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether sizing mask layer works correctly or not. +mask-size-contain reference/mask-size-contain-ref CSS Masking: mask-size: mask layer size https://www.w3.org/TR/css-masking-1/#the-mask-size 986a82cf8b954a2f04c8f444e6bac443b7502ce2 `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether sizing mask layer works correctly or not. +mask-size-contain-clip-border reference/mask-size-contain-clip-border-ref CSS Masking: mask-size: mask layer size https://www.w3.org/TR/css-masking-1/#the-mask-size aa4a17de4f0d7f5fd54382e359391b1b42663aba `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether sizing mask layer works correctly or not. +mask-size-contain-clip-padding reference/mask-size-contain-clip-padding-ref CSS Masking: mask-size: mask layer size https://www.w3.org/TR/css-masking-1/#the-mask-size de2b62b736281554d3a1a572b7933a6bf3fb0261 `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether sizing mask layer works correctly or not. +mask-size-contain-position-fifty-fifty reference/mask-size-contain-position-fifty-fifty-ref CSS Masking: mask-size: mask layer size https://www.w3.org/TR/css-masking-1/#the-mask-size 18f4d823525760a32479bfdc1960a3f79848f05e `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether sizing mask layer works correctly or not. +mask-size-cover reference/mask-size-cover-ref CSS Masking: mask-size: mask layer size https://www.w3.org/TR/css-masking-1/#the-mask-size 45930d72d1b48cd5333465233c3970c459e75262 `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether sizing mask layer works correctly or not. +mask-size-length reference/mask-size-length-length-ref CSS Masking: mask-size: mask layer size https://www.w3.org/TR/css-masking-1/#the-mask-size 4defd24447eb46cfd5ad227c703996c885dd996a `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether sizing mask layer works correctly or not. +mask-size-length-auto reference/mask-size-length-length-ref CSS Masking: mask-size: mask layer size https://www.w3.org/TR/css-masking-1/#the-mask-size 28403cc5c4c8a6e58bd2ab0821ff78eac60cc058 `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether sizing mask layer works correctly or not. +mask-size-length-length reference/mask-size-length-length-ref CSS Masking: mask-size: mask layer size https://www.w3.org/TR/css-masking-1/#the-mask-size aed9c4ca10b440457c970be7b6a4945508dc2d92 `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether sizing mask layer works correctly or not. +mask-size-length-percent reference/mask-size-length-percent-ref CSS Masking: mask-size: mask layer size https://www.w3.org/TR/css-masking-1/#the-mask-size 65bb0e6875c0534743e6aeb4dfe43c1bf2146b17 `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether sizing mask layer works correctly or not. +mask-size-percent reference/mask-size-percent-percent-ref CSS Masking: mask-size: mask layer size https://www.w3.org/TR/css-masking-1/#the-mask-size 222fd7b0d5f7e5a5fa1c9ce93838d7a768c47a76 `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether sizing mask layer works correctly or not. +mask-size-percent-auto reference/mask-size-percent-percent-ref CSS Masking: mask-size: mask layer size https://www.w3.org/TR/css-masking-1/#the-mask-size 8baa71d4d2b7d41a425e827c92d5a2a078f18124 `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether sizing mask layer works correctly or not. +mask-size-percent-length reference/mask-size-percent-percent-ref CSS Masking: mask-size: mask layer size https://www.w3.org/TR/css-masking-1/#the-mask-size a8a7d1ef5b2b7d2e05730ff635da2e52febea06a `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether sizing mask layer works correctly or not. +mask-size-percent-percent reference/mask-size-percent-percent-ref CSS Masking: mask-size: mask layer size https://www.w3.org/TR/css-masking-1/#the-mask-size 3af6f431c0ac9d53fd4194503030f5188753ad43 `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether sizing mask layer works correctly or not. +mask-size-percent-percent-stretch reference/mask-size-percent-percent-stretch-ref CSS Masking: mask-size: mask layer size https://www.w3.org/TR/css-masking-1/#the-mask-size 9df34563dc65ae4b0a1247137af3e5a7e2cae099 `Astley Chen`<mailto:aschen@mozilla.com>,`Mozilla`<https://www.mozilla.org> Test checks whether sizing mask layer works correctly or not. test-mask reference/test-mask-ref CSS Masking: mask-repeat:round repeat; http://www.w3.org/TR/css-masking-1/#the-mask-repeat d958a4c5495e1038da67e6f0a88ada4dbb3f9c1d `Li Jun`<mailto:64835173@qq.com> Test checks that the mask-repeart value diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/chapter-10.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/chapter-10.xht index 3add24715c0..45f9275258d 100644 --- a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/chapter-10.xht +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/chapter-10.xht @@ -39,72 +39,18 @@ <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-compositing-1"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-shapes"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css21"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-transforms"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3bg"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3color"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3val"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-filter-effects"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-html5"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-rfc2119"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-svg11"> - <!-- 0 tests --> - </tbody> <tbody id="s.#changes"> <!-- 0 tests --> </tbody> <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> - <!-- 0 tests --> - </tbody> <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#cr-exit-criteria"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#experimental"> - <!-- 0 tests --> - </tbody> <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#normative"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#partial"> - <!-- 0 tests --> - </tbody> <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> @@ -117,9 +63,6 @@ <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> - <!-- 0 tests --> - </tbody> <tbody id="s.#title"> <!-- 0 tests --> </tbody> diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/chapter-7.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/chapter-7.xht index 285ce9b05d2..939aed45faa 100644 --- a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/chapter-7.xht +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/chapter-7.xht @@ -13,7 +13,7 @@ <body> <h1>CSS Masking Level 1 CR Test Suite</h1> - <h2>Positioned Masks (5 tests)</h2> + <h2>Positioned Masks (49 tests)</h2> <table width="100%"> <col id="test-column"></col> <col id="refs-column"></col> @@ -37,7 +37,51 @@ <tr><th colspan="4" scope="rowgroup"> <a href="#s7.1">+</a> <a href="https://www.w3.org/TR/css-masking-1/#the-mask-image">7.1 Mask Image Source: the mask-image property</a></th></tr> - <!-- 0 tests --> + <!-- 4 tests --> + <tr id="mask-image-1a-7.1" class="primary"> + <td><strong> + <a href="mask-image-1a.xht">mask-image-1a</a></strong></td> + <td><a href="reference/mask-image-1-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-image: mask layer image + <ul class="assert"> + <li>Test checks whether image as mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-image-1b-7.1" class="primary"> + <td><strong> + <a href="mask-image-1b.xht">mask-image-1b</a></strong></td> + <td><a href="reference/mask-image-1-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-image: mask layer image + <ul class="assert"> + <li>Test checks whether SVG image as mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-image-1c-7.1" class="primary"> + <td><strong> + <a href="mask-image-1c.xht">mask-image-1c</a></strong></td> + <td><a href="reference/mask-image-1-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-image: mask layer image + <ul class="assert"> + <li>Test checks whether SVG mask element as mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-image-2-7.1" class="primary"> + <td><strong> + <a href="mask-image-2.xht">mask-image-2</a></strong></td> + <td><a href="reference/mask-image-2-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-image: mask layer image + <ul class="assert"> + <li>Test checks whether gradient CSS image as mask layer works correctly or not.</li> + </ul> + </td> + </tr> </tbody> <tbody id="s7.1.#mask-layer-image"> <!-- 0 tests --> @@ -61,7 +105,29 @@ <!-- 0 tests --> </tbody> <tbody id="s7.2.#propdef-mask-mode"> - <!-- 0 tests --> + <!-- 2 tests --> + <tr id="mask-mode-a-7.2.#propdef-mask-mode" class="primary"> + <td><strong> + <a href="mask-mode-a.xht">mask-mode-a</a></strong></td> + <td><a href="reference/mask-mode-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-mode with vector image + <ul class="assert"> + <li>Test checks that mask an SVG image referenced by mask-image is correct with different mask mode.</li> + </ul> + </td> + </tr> + <tr id="mask-mode-b-7.2.#propdef-mask-mode" class="primary"> + <td><strong> + <a href="mask-mode-b.xht">mask-mode-b</a></strong></td> + <td><a href="reference/mask-mode-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-mode with raster image + <ul class="assert"> + <li>Test checks that mask a PNG image referenced by mask-image is correct with different mask mode.</li> + </ul> + </td> + </tr> </tbody> <tbody id="s7.2.#typedef-masking-mode"> <!-- 0 tests --> @@ -79,7 +145,40 @@ <tr><th colspan="4" scope="rowgroup"> <a href="#s7.3">+</a> <a href="https://www.w3.org/TR/css-masking-1/#the-mask-repeat">7.3 Tiling Mask Images: The mask-repeat property</a></th></tr> - <!-- 1 tests --> + <!-- 4 tests --> + <tr id="mask-repeat-1-7.3" class="primary"> + <td><strong> + <a href="mask-repeat-1.xht">mask-repeat-1</a></strong></td> + <td><a href="reference/mask-repeat-1-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-repeat: repeated mask layer image + <ul class="assert"> + <li>Test checks whether repeated mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-repeat-2-7.3" class="primary"> + <td><strong> + <a href="mask-repeat-2.xht">mask-repeat-2</a></strong></td> + <td><a href="reference/mask-repeat-2-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-repeat: repeated mask layer image + <ul class="assert"> + <li>Test checks whether repeated mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-repeat-3-7.3" class="primary"> + <td><strong> + <a href="mask-repeat-3.xht">mask-repeat-3</a></strong></td> + <td><a href="reference/mask-repeat-3-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-repeat: repeated mask layer image + <ul class="assert"> + <li>Test checks whether repeated mask layer works correctly or not.</li> + </ul> + </td> + </tr> <tr id="test-mask-7.3" class=""> <td> <a href="test-mask.xht">test-mask</a></td> @@ -99,7 +198,161 @@ <tr><th colspan="4" scope="rowgroup"> <a href="#s7.4">+</a> <a href="https://www.w3.org/TR/css-masking-1/#the-mask-position">7.4 Positioning Mask Images: the mask-position property</a></th></tr> - <!-- 0 tests --> + <!-- 14 tests --> + <tr id="mask-position-1a-7.4" class="primary"> + <td><strong> + <a href="mask-position-1a.xht">mask-position-1a</a></strong></td> + <td><a href="reference/mask-position-1-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-1b-7.4" class="primary"> + <td><strong> + <a href="mask-position-1b.xht">mask-position-1b</a></strong></td> + <td><a href="reference/mask-position-1-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-1c-7.4" class="primary"> + <td><strong> + <a href="mask-position-1c.xht">mask-position-1c</a></strong></td> + <td><a href="reference/mask-position-1-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-2a-7.4" class="primary"> + <td><strong> + <a href="mask-position-2a.xht">mask-position-2a</a></strong></td> + <td><a href="reference/mask-position-2-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-2b-7.4" class="primary"> + <td><strong> + <a href="mask-position-2b.xht">mask-position-2b</a></strong></td> + <td><a href="reference/mask-position-2-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-3a-7.4" class="primary"> + <td><strong> + <a href="mask-position-3a.xht">mask-position-3a</a></strong></td> + <td><a href="reference/mask-position-3-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-3b-7.4" class="primary"> + <td><strong> + <a href="mask-position-3b.xht">mask-position-3b</a></strong></td> + <td><a href="reference/mask-position-3-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-4a-7.4" class="primary"> + <td><strong> + <a href="mask-position-4a.xht">mask-position-4a</a></strong></td> + <td><a href="reference/mask-position-4-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-4b-7.4" class="primary"> + <td><strong> + <a href="mask-position-4b.xht">mask-position-4b</a></strong></td> + <td><a href="reference/mask-position-4-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-4c-7.4" class="primary"> + <td><strong> + <a href="mask-position-4c.xht">mask-position-4c</a></strong></td> + <td><a href="reference/mask-position-4-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-4d-7.4" class="primary"> + <td><strong> + <a href="mask-position-4d.xht">mask-position-4d</a></strong></td> + <td><a href="reference/mask-position-4-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-5-7.4" class="primary"> + <td><strong> + <a href="mask-position-5.xht">mask-position-5</a></strong></td> + <td><a href="reference/mask-position-5-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-6-7.4" class="primary"> + <td><strong> + <a href="mask-position-6.xht">mask-position-6</a></strong></td> + <td><a href="reference/mask-position-6-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-7-7.4" class="primary"> + <td><strong> + <a href="mask-position-7.xht">mask-position-7</a></strong></td> + <td><a href="reference/mask-position-7-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> </tbody> <tbody id="s7.4.#propdef-mask-position"> <!-- 0 tests --> @@ -108,7 +361,18 @@ <tr><th colspan="4" scope="rowgroup"> <a href="#s7.5">+</a> <a href="https://www.w3.org/TR/css-masking-1/#the-mask-clip">7.5 Masking Area: the mask-clip property</a></th></tr> - <!-- 0 tests --> + <!-- 1 tests --> + <tr id="mask-clip-1-7.5" class=""> + <td> + <a href="mask-clip-1.xht">mask-clip-1</a></td> + <td><a href="reference/mask-clip-1-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-clip: clip mask image + <ul class="assert"> + <li>border-box, padding-box, and content-box values of mask-clip should clip to the appropriate boxes.</li> + </ul> + </td> + </tr> </tbody> <tbody id="s7.5.#mask-painting-area"> <!-- 0 tests --> @@ -144,7 +408,29 @@ <tr><th colspan="4" scope="rowgroup"> <a href="#s7.6">+</a> <a href="https://www.w3.org/TR/css-masking-1/#the-mask-origin">7.6 Positioning Area: the mask-origin property</a></th></tr> - <!-- 0 tests --> + <!-- 2 tests --> + <tr id="mask-origin-1-7.6" class="primary"> + <td><strong> + <a href="mask-origin-1.xht">mask-origin-1</a></strong></td> + <td><a href="reference/mask-origin-1-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-origin: mask positioning area + <ul class="assert"> + <li>Test checks whether setting mask position area works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-origin-2-7.6" class="primary"> + <td><strong> + <a href="mask-origin-2.xht">mask-origin-2</a></strong></td> + <td><a href="reference/mask-origin-2-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-origin: mask positioning area + <ul class="assert"> + <li>Test checks whether setting mask origin to margin-box works correctly or not.</li> + </ul> + </td> + </tr> </tbody> <tbody id="s7.6.#mask-positioning-area"> <!-- 0 tests --> @@ -177,7 +463,205 @@ <tr><th colspan="4" scope="rowgroup"> <a href="#s7.7">+</a> <a href="https://www.w3.org/TR/css-masking-1/#the-mask-size">7.7 Sizing Mask Images: the mask-size property</a></th></tr> - <!-- 0 tests --> + <!-- 18 tests --> + <tr id="mask-size-auto-7.7" class="primary"> + <td><strong> + <a href="mask-size-auto.xht">mask-size-auto</a></strong></td> + <td><a href="reference/mask-size-auto-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-auto-auto-7.7" class="primary"> + <td><strong> + <a href="mask-size-auto-auto.xht">mask-size-auto-auto</a></strong></td> + <td><a href="reference/mask-size-auto-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-auto-length-7.7" class="primary"> + <td><strong> + <a href="mask-size-auto-length.xht">mask-size-auto-length</a></strong></td> + <td><a href="reference/mask-size-auto-length-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-auto-percent-7.7" class="primary"> + <td><strong> + <a href="mask-size-auto-percent.xht">mask-size-auto-percent</a></strong></td> + <td><a href="reference/mask-size-auto-length-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-contain-7.7" class="primary"> + <td><strong> + <a href="mask-size-contain.xht">mask-size-contain</a></strong></td> + <td><a href="reference/mask-size-contain-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-contain-clip-border-7.7" class="primary"> + <td><strong> + <a href="mask-size-contain-clip-border.xht">mask-size-contain-clip-border</a></strong></td> + <td><a href="reference/mask-size-contain-clip-border-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-contain-clip-padding-7.7" class="primary"> + <td><strong> + <a href="mask-size-contain-clip-padding.xht">mask-size-contain-clip-padding</a></strong></td> + <td><a href="reference/mask-size-contain-clip-padding-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-contain-position-fifty-fifty-7.7" class="primary"> + <td><strong> + <a href="mask-size-contain-position-fifty-fifty.xht">mask-size-contain-position-fifty-fifty</a></strong></td> + <td><a href="reference/mask-size-contain-position-fifty-fifty-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-cover-7.7" class="primary"> + <td><strong> + <a href="mask-size-cover.xht">mask-size-cover</a></strong></td> + <td><a href="reference/mask-size-cover-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-length-7.7" class="primary"> + <td><strong> + <a href="mask-size-length.xht">mask-size-length</a></strong></td> + <td><a href="reference/mask-size-length-length-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-length-auto-7.7" class="primary"> + <td><strong> + <a href="mask-size-length-auto.xht">mask-size-length-auto</a></strong></td> + <td><a href="reference/mask-size-length-length-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-length-length-7.7" class="primary"> + <td><strong> + <a href="mask-size-length-length.xht">mask-size-length-length</a></strong></td> + <td><a href="reference/mask-size-length-length-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-length-percent-7.7" class="primary"> + <td><strong> + <a href="mask-size-length-percent.xht">mask-size-length-percent</a></strong></td> + <td><a href="reference/mask-size-length-percent-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-percent-7.7" class="primary"> + <td><strong> + <a href="mask-size-percent.xht">mask-size-percent</a></strong></td> + <td><a href="reference/mask-size-percent-percent-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-percent-auto-7.7" class="primary"> + <td><strong> + <a href="mask-size-percent-auto.xht">mask-size-percent-auto</a></strong></td> + <td><a href="reference/mask-size-percent-percent-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-percent-length-7.7" class="primary"> + <td><strong> + <a href="mask-size-percent-length.xht">mask-size-percent-length</a></strong></td> + <td><a href="reference/mask-size-percent-percent-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-percent-percent-7.7" class="primary"> + <td><strong> + <a href="mask-size-percent-percent.xht">mask-size-percent-percent</a></strong></td> + <td><a href="reference/mask-size-percent-percent-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-percent-percent-stretch-7.7" class="primary"> + <td><strong> + <a href="mask-size-percent-percent-stretch.xht">mask-size-percent-percent-stretch</a></strong></td> + <td><a href="reference/mask-size-percent-percent-stretch-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> </tbody> <tbody id="s7.7.#propdef-mask-size"> <!-- 0 tests --> diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/chapter-C.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/chapter-C.xht index ba55e00503d..6794f80981c 100644 --- a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/chapter-C.xht +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/chapter-C.xht @@ -39,28 +39,85 @@ <tbody id="sC.#InterfaceSVGMaskElement"> <!-- 0 tests --> </tbody> - <tbody id="sC.#SVGClipPathElement__clipPathUnits"> + <tbody id="sInterfaceSVGClipPathElement.#SVGClipPathElement__clipPathUnits"> <!-- 0 tests --> </tbody> - <tbody id="sC.#SVGClipPathElement__transform"> + <tbody id="sInterfaceSVGClipPathElement.#SVGClipPathElement__transform"> <!-- 0 tests --> </tbody> - <tbody id="sC.#SVGMaskElement__height"> + <tbody id="sInterfaceSVGMaskElement.#SVGMaskElement__height"> <!-- 0 tests --> </tbody> - <tbody id="sC.#SVGMaskElement__maskContentUnits"> + <tbody id="sInterfaceSVGMaskElement.#SVGMaskElement__maskContentUnits"> <!-- 0 tests --> </tbody> - <tbody id="sC.#SVGMaskElement__maskUnits"> + <tbody id="sInterfaceSVGMaskElement.#SVGMaskElement__maskUnits"> <!-- 0 tests --> </tbody> - <tbody id="sC.#SVGMaskElement__width"> + <tbody id="sInterfaceSVGMaskElement.#SVGMaskElement__width"> <!-- 0 tests --> </tbody> - <tbody id="sC.#SVGMaskElement__x"> + <tbody id="sInterfaceSVGMaskElement.#SVGMaskElement__x"> <!-- 0 tests --> </tbody> - <tbody id="sC.#SVGMaskElement__y"> + <tbody id="sInterfaceSVGMaskElement.#SVGMaskElement__y"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conformance-classes"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conventions"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#cr-exit-criteria"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#experimental"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#partial"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#testing"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css3color"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-filter-effects"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-compositing-1"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-shapes"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css21"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-transforms"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3bg"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3val"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-html5"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-rfc2119"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-svg11"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#informative"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-clip-1.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-clip-1.xht new file mode 100644 index 00000000000..0da39f934cb --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-clip-1.xht @@ -0,0 +1,57 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-clip: clip mask image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="http://www.w3.org/TR/css-masking-1/#the-mask-clip" rel="help" /> + <link href="reference/mask-clip-1-ref.xht" rel="match" /> + <meta content="border-box, padding-box, and content-box values of mask-clip should clip to the appropriate boxes." name="assert" /> + <style type="text/css"> + div { + /* + * content box: 40 x 20 + * padding box: 52 x 38 + * border box: 60 x 50 + * margin box: 66 x 54 + */ + background-color: purple; + position: absolute; + top: 10px; + margin: 1px 2px 3px 4px; + border: solid transparent; + border-width: 8px 2px 4px 6px; + padding: 6px 9px 12px 3px; + width: 40px; + height: 20px; + } + + div.mask { + mask-size: 100% 100%; + mask-origin: border-box; + mask-image: url(support/transparent-100x50-blue-100x50.svg); + } + + div.border { + left: 10px; + mask-clip: border-box; + } + + div.padding { + left: 110px; + mask-clip: padding-box; + } + + div.content { + left: 210px; + mask-clip: content-box; + } + </style> + </head> + <body> + <div class="outer mask border"></div> + <div class="outer mask padding"></div> + <div class="outer mask content"></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-image-1a.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-image-1a.xht new file mode 100644 index 00000000000..0082ca892c6 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-image-1a.xht @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-image: mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-image" rel="help" /> + <link href="reference/mask-image-1-ref.xht" rel="match" /> + <meta content="Test checks whether image as mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + background-color: purple; + width: 100px; + height: 100px; + } + + div.mask-by-png { + mask-image: url(support/transparent-100x50-blue-100x50.png); + } + </style> + </head> + <body> + <div class="mask-by-png"></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-image-1b.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-image-1b.xht new file mode 100644 index 00000000000..765c3763427 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-image-1b.xht @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-image: mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-image" rel="help" /> + <link href="reference/mask-image-1-ref.xht" rel="match" /> + <meta content="Test checks whether SVG image as mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + background-color: purple; + width: 100px; + height: 100px; + } + + div.mask-by-svg { + mask-image: url(support/transparent-100x50-blue-100x50.svg); + } + </style> + </head> + <body> + <div class="mask-by-svg"></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-image-1c.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-image-1c.xht new file mode 100644 index 00000000000..be78f931867 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-image-1c.xht @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-image: mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-image" rel="help" /> + <link href="reference/mask-image-1-ref.xht" rel="match" /> + <meta content="Test checks whether SVG mask element as mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + background-color: purple; + width: 100px; + height: 100px; + } + + div.mask-by-svg-mask { + mask-image: url(support/mask-half-transparent-100x100.svg#mask); + } + </style> + </head> + <body> + <div class="mask-by-svg-mask"></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-image-2.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-image-2.xht new file mode 100644 index 00000000000..7ce0fcb930c --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-image-2.xht @@ -0,0 +1,31 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-image: mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-image" rel="help" /> + <link href="reference/mask-image-2-ref.xht" rel="match" /> + <meta content="Test checks whether gradient CSS image as mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + background-color: purple; + width: 100px; + height: 100px; + } + + div.mask-by-gradient-1 { + mask-image: linear-gradient(rgba(0,0,255,0), rgba(0,0,255,1)); /* blue gradient mask */ + } + + div.mask-by-gradient-2 { + mask-image: linear-gradient(rgba(255,0,0,0), rgba(255,0,0,1)); /* red gradient mask */ + } + </style> + </head> + <body> + <div class="mask-by-gradient-1"></div> + <div class="mask-by-gradient-2"></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-mode-a.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-mode-a.xht new file mode 100644 index 00000000000..30ebf8d051e --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-mode-a.xht @@ -0,0 +1,60 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-mode with vector image</title> + <link href="mailto:ethlin@mozilla.com" rel="author" title="Ethan Lin" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#propdef-mask-mode" rel="help" /> + <link href="reference/mask-mode-ref.xht" rel="match" /> + <meta content="Test checks that mask an SVG image referenced by mask-image is correct with different mask mode." name="assert" /> + <style type="text/css"> + div { + background-color: blue; + position: absolute; + margin: 0px; + padding: 0px; + width: 100px; + height: 100px; + top: 10px; + } + + div.auto { + left: 10px; + mask-mode: match-source; + mask-image: url(support/blue-100x100.svg); + } + + div.alpha { + left: 120px; + mask-mode: alpha; + mask-image: url(support/blue-100x100.svg); + } + + div.luminance1 { + left: 230px; + mask-mode: luminance; + mask-image: url(support/blue-100x100.svg); + } + + div.luminance2 { + left: 340px; + mask-mode: luminance; + mask-image: url(support/red-100x100.svg); + } + + div.luminance3 { + left: 450px; + mask-mode: luminance; + mask-image: url(support/green-100x100.svg); + } + </style> + </head> + <body> + <div class="auto"></div> + <div class="alpha"></div> + <div class="luminance1"></div> + <div class="luminance2"></div> + <div class="luminance3"></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-mode-b.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-mode-b.xht new file mode 100644 index 00000000000..6e68991fab6 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-mode-b.xht @@ -0,0 +1,61 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-mode with raster image</title> + <link href="mailto:ethlin@mozilla.com" rel="author" title="Ethan Lin" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#propdef-mask-mode" rel="help" /> + <link href="reference/mask-mode-ref.xht" rel="match" /> + <meta content="Test checks that mask a PNG image referenced by mask-image is correct with different mask mode." name="assert" /> + <style type="text/css"> + div { + background-color: blue; + position: absolute; + margin: 0px; + padding: 0px; + width: 100px; + height: 100px; + top: 10px; + } + + div.auto { + left: 10px; + mask-mode: match-source; + mask-image: url(support/blue-100x100.png); + } + + div.alpha { + left: 120px; + mask-mode: alpha; + mask-image: url(support/blue-100x100.png); + } + + div.luminance1 { + left: 230px; + mask-mode: luminance; + mask-image: url(support/blue-100x100.png); + } + + div.luminance2 { + left: 340px; + mask-mode: luminance; + mask-image: url(support/red-100x100.png); + } + + div.luminance3 { + left: 450px; + mask-mode: luminance; + mask-image: url(support/green-100x100.png); + } + </style> + </head> + <body> + <div class="auto"></div> + <div class="alpha"></div> + <div class="luminance1"></div> + <div class="luminance2"></div> + <div class="luminance3"></div> + + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-origin-1.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-origin-1.xht new file mode 100644 index 00000000000..de38c342d61 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-origin-1.xht @@ -0,0 +1,48 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-origin: mask positioning area</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-origin" rel="help" /> + <link href="reference/mask-origin-1-ref.xht" rel="match" /> + <meta content="Test checks whether setting mask position area works correctly or not." name="assert" /> + <style type="text/css"> + div.outer { + border: 1px solid black; + width: 100px; + height: 100px; + } + + div.inner { + /* + * content box: 60 x 60 + * padding box: 72 x 78 + * border box: 80 x 90 + * margin box: 86 x 94 + */ + margin: 1px 2px 3px 4px; + border: solid transparent; + border-width: 8px 2px 4px 6px; + padding: 6px 9px 12px 3px; + width: 60px; + height: 60px; + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-position: left top; + } + + #border { mask-origin: border-box; } + #padding { mask-origin: padding-box; } + #content { mask-origin: content-box; } + </style> + </head> + <body> + <div class="outer"><div class="inner"></div></div> + <div class="outer"><div id="border" class="inner"></div></div> + <div class="outer"><div id="padding" class="inner"></div></div> + <div class="outer"><div id="content" class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-origin-2.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-origin-2.xht new file mode 100644 index 00000000000..720b3ecbd48 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-origin-2.xht @@ -0,0 +1,77 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-origin: mask positioning area</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-origin" rel="help" /> + <link href="reference/mask-origin-2-ref.xht" rel="match" /> + <meta content="Test checks whether setting mask origin to margin-box works correctly or not." name="assert" /> + <style type="text/css"> + div.outer { + border: 1px solid black; + width: 125px; + height: 125px; + } + + div.inner { + /* + * content box: 60 x 60 + * padding box: 72 x 78 + * border box: 80 x 90 + * margin box: 86 x 94 + */ + margin: 1px 2px 3px 4px; + border: solid red; + border-width: 8px 2px 4px 6px; + padding: 6px 9px 12px 3px; + width: 60px; + height: 60px; + position: relative; + background-color: blue; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-origin: margin-box; + } + + div.overflow { + position: absolute; + left: -10px; + top: -9px; + border: solid transparent; + border-width: 15px 13px 19px 13px; + width: 60px; + height: 60px; + background-color: purple; + } + + #pos-left-auto { mask-position: left; } + #pos-left-bottom { mask-position: left bottom; } + #pos-right-top { mask-position: right top; } + #pos-right-bottom { mask-position: right bottom; } + </style> + </head> + <body> + <div class="outer"> + <div id="pos-left-auto" class="inner"> + <div class="overflow"></div> + </div> + </div> + <div class="outer"> + <div id="pos-left-bottom" class="inner"> + <div class="overflow"></div> + </div> + </div> + <div class="outer"> + <div id="pos-right-top" class="inner"> + <div class="overflow"></div> + </div> + </div> + <div class="outer"> + <div id="pos-right-bottom" class="inner"> + <div class="overflow"></div> + </div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-1a.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-1a.xht new file mode 100644 index 00000000000..6650890fbcc --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-1a.xht @@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help" /> + <link href="reference/mask-position-1-ref.xht" rel="match" /> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + div.outer { + border: 1px solid black; + } + + div.inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + + #inner1 { mask-position: right 20% bottom 70%; } + #inner2 { mask-position: bottom 70% right 20%; } + #inner3 { mask-position: right 30px bottom 25px; } + #inner4 { mask-position: bottom 25px right 30px; } + </style> + </head> + <body> + <div class="outer"><div id="inner1" class="inner"></div></div> + <div class="outer"><div id="inner2" class="inner"></div></div> + <div class="outer"><div id="inner3" class="inner"></div></div> + <div class="outer"><div id="inner4" class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-1b.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-1b.xht new file mode 100644 index 00000000000..ac31c5a6d7d --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-1b.xht @@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help" /> + <link href="reference/mask-position-1-ref.xht" rel="match" /> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + div.outer { + border: 1px solid black; + } + + div.inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + + #inner1 { mask-position: left 40px top 15px; } + #inner2 { mask-position: top 30% left 80%; } + #inner3 { mask-position: left 20px top 25px } + #inner4 { mask-position: top 25px left 20px; } + </style> + </head> + <body> + <div class="outer"><div id="inner1" class="inner"></div></div> + <div class="outer"><div id="inner2" class="inner"></div></div> + <div class="outer"><div id="inner3" class="inner"></div></div> + <div class="outer"><div id="inner4" class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-1c.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-1c.xht new file mode 100644 index 00000000000..b236ba8078e --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-1c.xht @@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help" /> + <link href="reference/mask-position-1-ref.xht" rel="match" /> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + div.outer { + border: 1px solid black; + } + + div.inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + + #inner1 { mask-position: left 80% bottom 70%; } + #inner2 { mask-position: right 20% top 30%; } + #inner3 { mask-position: bottom 50% left 40%; } + #inner4 { mask-position: right 60% top 50%; } + </style> + </head> + <body> + <div class="outer"><div id="inner1" class="inner"></div></div> + <div class="outer"><div id="inner2" class="inner"></div></div> + <div class="outer"><div id="inner3" class="inner"></div></div> + <div class="outer"><div id="inner4" class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-2a.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-2a.xht new file mode 100644 index 00000000000..737788278d3 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-2a.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help" /> + <link href="reference/mask-position-2-ref.xht" rel="match" /> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-position: left 40% bottom 60%; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-2b.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-2b.xht new file mode 100644 index 00000000000..321407a4149 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-2b.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help" /> + <link href="reference/mask-position-2-ref.xht" rel="match" /> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-position: 40% 40%; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-3a.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-3a.xht new file mode 100644 index 00000000000..08ca0c86104 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-3a.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help" /> + <link href="reference/mask-position-3-ref.xht" rel="match" /> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-position: center bottom 80%; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-3b.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-3b.xht new file mode 100644 index 00000000000..81fc85d65a5 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-3b.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help" /> + <link href="reference/mask-position-3-ref.xht" rel="match" /> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-position: center 20%; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-4a.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-4a.xht new file mode 100644 index 00000000000..6a9e515e330 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-4a.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help" /> + <link href="reference/mask-position-4-ref.xht" rel="match" /> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-position: left center; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-4b.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-4b.xht new file mode 100644 index 00000000000..b03ce213f53 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-4b.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help" /> + <link href="reference/mask-position-4-ref.xht" rel="match" /> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-position: left; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-4c.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-4c.xht new file mode 100644 index 00000000000..6fb849974d0 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-4c.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help" /> + <link href="reference/mask-position-4-ref.xht" rel="match" /> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-position: left bottom 50%; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-4d.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-4d.xht new file mode 100644 index 00000000000..9cd8a9e7e24 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-4d.xht @@ -0,0 +1,32 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help" /> + <link href="reference/mask-position-4-ref.xht" rel="match" /> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask: url(support/50x50-opaque-blue.svg) left no-repeat; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-5.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-5.xht new file mode 100644 index 00000000000..3ed9ab50ac1 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-5.xht @@ -0,0 +1,35 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help" /> + <link href="reference/mask-position-5-ref.xht" rel="match" /> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 120px; + height: 120px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-position: top, bottom; + mask-repeat: no-repeat, no-repeat; + mask-image: url(support/50x50-opaque-blue.svg), + url(support/50x50-opaque-blue.svg); + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-6.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-6.xht new file mode 100644 index 00000000000..91f12558659 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-6.xht @@ -0,0 +1,50 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help" /> + <link href="reference/mask-position-6-ref.xht" rel="match" /> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + .outer { + border: 1px solid black; + } + + .outer > div { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + + #inner1 { + mask-position: left 20px bottom; + } + + #inner2 { + mask-position: left 40% bottom; + } + + #inner3 { + mask-position: right 60% bottom; + } + + #inner4 { + mask-position: right 30px bottom; + } + </style> + </head> + <body> + <div class="outer"><div id="inner1"></div></div> + <div class="outer"><div id="inner2"></div></div> + <div class="outer"><div id="inner3"></div></div> + <div class="outer"><div id="inner4"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-7.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-7.xht new file mode 100644 index 00000000000..fabd6f954d9 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-position-7.xht @@ -0,0 +1,50 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help" /> + <link href="reference/mask-position-7-ref.xht" rel="match" /> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + .outer { + border: 1px solid black; + } + + .outer > div { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + + #inner1 { + mask-position: right top 40%; + } + + #inner2 { + mask-position: right top 20px; + } + + #inner3 { + mask-position: right bottom 60%; + } + + #inner4 { + mask-position: right bottom 30px; + } + </style> + </head> + <body> + <div class="outer"><div id="inner1"></div></div> + <div class="outer"><div id="inner2"></div></div> + <div class="outer"><div id="inner3"></div></div> + <div class="outer"><div id="inner4"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-repeat-1.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-repeat-1.xht new file mode 100644 index 00000000000..8b55894dfe8 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-repeat-1.xht @@ -0,0 +1,47 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-repeat: repeated mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-repeat" rel="help" /> + <link href="reference/mask-repeat-1-ref.xht" rel="match" /> + <meta content="Test checks whether repeated mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 128px; + height: 128px; + } + + div.outer { + border: 1px solid black; + } + + div.inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + } + + #no-repeat { + mask-repeat: no-repeat no-repeat; + } + #repeat { + mask-repeat: repeat repeat; + } + #repeat-x { + mask-repeat: repeat no-repeat; + } + #repeat-y { + mask-repeat: no-repeat repeat; + } + </style> + </head> + <body> + <div class="outer"><div class="inner"></div></div> + <div class="outer"><div id="no-repeat" class="inner"></div></div> + <div class="outer"><div id="repeat" class="inner"></div></div> + <div class="outer"><div id="repeat-x" class="inner"></div></div> + <div class="outer"><div id="repeat-y" class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-repeat-2.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-repeat-2.xht new file mode 100644 index 00000000000..c448eaba2f8 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-repeat-2.xht @@ -0,0 +1,42 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-repeat: repeated mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-repeat" rel="help" /> + <link href="reference/mask-repeat-2-ref.xht" rel="match" /> + <meta content="Test checks whether repeated mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 128px; + height: 128px; + } + + div.outer { + border: 1px solid black; + } + + div.inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + } + + #space { + mask-repeat: space; + } + #space-x { + mask-repeat: space no-repeat; + } + #space-y { + mask-repeat: no-repeat space; + } + </style> + </head> + <body> + <div class="outer"><div id="space" class="inner"></div></div> + <div class="outer"><div id="space-x" class="inner"></div></div> + <div class="outer"><div id="space-y" class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-repeat-3.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-repeat-3.xht new file mode 100644 index 00000000000..66bff9aa5dc --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-repeat-3.xht @@ -0,0 +1,42 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-repeat: repeated mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-repeat" rel="help" /> + <link href="reference/mask-repeat-3-ref.xht" rel="match" /> + <meta content="Test checks whether repeated mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 150px; + height: 150px; + } + + div.outer { + border: 1px solid black; + } + + div.inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + } + + #round { + mask-repeat: round; + } + #round-x { + mask-repeat: round no-repeat; + } + #round-y { + mask-repeat: no-repeat round; + } + </style> + </head> + <body> + <div class="outer"><div id="round" class="inner"></div></div> + <div class="outer"><div id="round-x" class="inner"></div></div> + <div class="outer"><div id="round-y" class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-auto-auto.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-auto-auto.xht new file mode 100644 index 00000000000..fff86b75147 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-auto-auto.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-auto-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: auto auto; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-auto-length.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-auto-length.xht new file mode 100644 index 00000000000..dc565b5324c --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-auto-length.xht @@ -0,0 +1,33 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-auto-length-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner { + width: 64px; + height: 128px; + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: auto 20px; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-auto-percent.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-auto-percent.xht new file mode 100644 index 00000000000..800a2ead05e --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-auto-percent.xht @@ -0,0 +1,33 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-auto-length-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner { + width: 64px; + height: 128px; + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: auto 15.625%; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-auto.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-auto.xht new file mode 100644 index 00000000000..4abc69fcb28 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-auto.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-auto-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: auto; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-contain-clip-border.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-contain-clip-border.xht new file mode 100644 index 00000000000..0818e89efa7 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-contain-clip-border.xht @@ -0,0 +1,36 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-contain-clip-border-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner { + border: 20px solid transparent; + width: 24px; + height: 88px; + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-clip: border-box; + mask-origin: border-box; + mask-size: contain; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-contain-clip-padding.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-contain-clip-padding.xht new file mode 100644 index 00000000000..f36f7885bd5 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-contain-clip-padding.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-contain-clip-padding-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner { + background-color: purple; + border: 20px solid transparent; + width: 24px; + height: 88px; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-clip: padding-box; + mask-origin: padding-box; + mask-size: contain; + } + </style> + </head> + <body> + <div id="outer"><div id="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-contain-position-fifty-fifty.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-contain-position-fifty-fifty.xht new file mode 100644 index 00000000000..0bda2a2381a --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-contain-position-fifty-fifty.xht @@ -0,0 +1,35 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-contain-position-fifty-fifty-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: contain; + mask-position: 50% 50%; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-contain.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-contain.xht new file mode 100644 index 00000000000..da3de2e3c30 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-contain.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-contain-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 10px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: contain; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-cover.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-cover.xht new file mode 100644 index 00000000000..a40fd410167 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-cover.xht @@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-cover-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + #outer { + border: 10px solid black; + width: 64px; + height: 128px; + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-origin: content-box; + mask-clip: content-box; + mask-size: cover; + } + </style> + </head> + <body> + <div id="outer"></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-length-auto.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-length-auto.xht new file mode 100644 index 00000000000..7ffa4a86732 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-length-auto.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-length-length-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x100-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: 32px auto; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-length-length.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-length-length.xht new file mode 100644 index 00000000000..1f57211cb4c --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-length-length.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-length-length-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x100-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: 32px 64px; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-length-percent.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-length-percent.xht new file mode 100644 index 00000000000..c5e564e08c0 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-length-percent.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-length-percent-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x100-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: 16px 25%; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-length.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-length.xht new file mode 100644 index 00000000000..cbdbdcc4d4f --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-length.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-length-length-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x100-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: 32px; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-percent-auto.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-percent-auto.xht new file mode 100644 index 00000000000..731af666789 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-percent-auto.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-percent-percent-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: 50% auto; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-percent-length.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-percent-length.xht new file mode 100644 index 00000000000..f120707ecaa --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-percent-length.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-percent-percent-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: 50% 32px; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-percent-percent-stretch.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-percent-percent-stretch.xht new file mode 100644 index 00000000000..e2e89244e67 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-percent-percent-stretch.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-percent-percent-stretch-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 60px; + height: 120px; + } + + #outer { + border: 10px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/transparent-100x50-blue-100x50.svg); + mask-repeat: no-repeat; + mask-size: 100% 100%; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-percent-percent.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-percent-percent.xht new file mode 100644 index 00000000000..8dcd3fdb533 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-percent-percent.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-percent-percent-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: 50% 25%; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-percent.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-percent.xht new file mode 100644 index 00000000000..3d3a2ec1e01 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/mask-size-percent.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-percent-percent-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: 50%; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-clip-1-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-clip-1-ref.xht new file mode 100644 index 00000000000..6f6ddb057b6 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-clip-1-ref.xht @@ -0,0 +1,42 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS mask-clip reference</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + div { + position: absolute; + top: 10px; + background-color: purple; + } + + div.border { + left: 10px; + margin: 1px 4px; + width: 60px; + height: 25px; + } + + div.padding { + left: 110px; + margin: 9px 10px; + width: 52px; + height: 17px; + } + + div.content { + left: 210px; + margin: 15px 13px; + width: 40px; + height: 11px; + } + </style> + </head> + <body> + <div class="color border"></div> + <div class="color padding"></div> + <div class="color content"></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-image-1-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-image-1-ref.xht new file mode 100644 index 00000000000..c70223c52a5 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-image-1-ref.xht @@ -0,0 +1,19 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-image: mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + div { + background-color: purple; + width: 100px; + height: 50px; + } + </style> + </head> + <body> + <div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-image-2-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-image-2-ref.xht new file mode 100644 index 00000000000..56fc08e7e61 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-image-2-ref.xht @@ -0,0 +1,20 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-image: mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + div { + background-image: linear-gradient(rgba(128,0,128,0), rgba(128,0,128,1)); + width: 100px; + height: 100px; + } + </style> + </head> + <body> + <div></div> + <div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-mode-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-mode-ref.xht new file mode 100644 index 00000000000..11f13f56ac6 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-mode-ref.xht @@ -0,0 +1,52 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS mask-mode reference</title> + <link href="mailto:ethlin@mozilla.com" rel="author" title="Ethan Lin" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + div { + background-color: white; + position: absolute; + margin: 0px; + padding: 0px; + width: 100px; + height: 100px; + top: 10px; + } + + div.auto { + left: 10px; + background-image: url(support/blue-100x100.svg); + } + + div.alpha { + left: 120px; + background-image: url(support/blue-100x100.svg); + } + + div.luminance1 { + left: 230px; + background-image: url(support/blue-luminance-100x100.svg); + } + + div.luminance2 { + left: 340px; + background-image: url(support/red-luminance-100x100.svg); + } + + div.luminance3 { + left: 450px; + background-image: url(support/green-luminance-100x100.svg); + } + </style> + </head> + <body> + <div class="auto"></div> + <div class="alpha"></div> + <div class="luminance1"></div> + <div class="luminance2"></div> + <div class="luminance3"></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-origin-1-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-origin-1-ref.xht new file mode 100644 index 00000000000..49786aafa02 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-origin-1-ref.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-origin: mask positioning area</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + div.outer { + border: 1px solid black; + width: 100px; + height: 100px; + position: relative; + } + + div.inner { + width: 50px; + height: 50px; + background-color: purple; + position: absolute; + } + + #border { left: 4px; top: 1px; } + #padding { left: 10px; top: 9px; } + #content { left: 13px; top: 15px; } + </style> + </head> + <body> + <div class="outer"><div id="border" class="inner"></div></div> + <div class="outer"><div id="border" class="inner"></div></div> + <div class="outer"><div id="padding" class="inner"></div></div> + <div class="outer"><div id="content" class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-origin-2-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-origin-2-ref.xht new file mode 100644 index 00000000000..adbc9aaa411 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-origin-2-ref.xht @@ -0,0 +1,35 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-origin: mask positioning area</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + div.outer { + border: 1px solid black; + width: 125px; + height: 125px; + position: relative; + } + + div.inner { + width: 50px; + height: 50px; + background-color: purple; + position: absolute; + } + + #pos-left-auto { left: 0px; top: 22px; } + #pos-left-bottom { left: 0px; top: 44px; } + #pos-right-top { left: 36px; top: 0px; } + #pos-right-bottom { left: 36px; top: 44px; } + </style> + </head> + <body> + <div class="outer"><div id="pos-left-auto" class="inner"></div></div> + <div class="outer"><div id="pos-left-bottom" class="inner"></div></div> + <div class="outer"><div id="pos-right-top" class="inner"></div></div> + <div class="outer"><div id="pos-right-bottom" class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-position-1-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-position-1-ref.xht new file mode 100644 index 00000000000..b0959531e00 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-position-1-ref.xht @@ -0,0 +1,33 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: position mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + div.outer { + position: relative; + width: 100px; + height: 100px; + border: 1px solid black; + } + + div.inner { + position: absolute; + width: 50px; + height: 50px; + background-color: purple; + } + + #inner1 { right: 10px; bottom: 35px; } + #inner2 { right: 30px; bottom: 25px; } + </style> + </head> + <body> + <div class="outer"><div id="inner1" class="inner"></div></div> + <div class="outer"><div id="inner1" class="inner"></div></div> + <div class="outer"><div id="inner2" class="inner"></div></div> + <div class="outer"><div id="inner2" class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-position-2-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-position-2-ref.xht new file mode 100644 index 00000000000..dbdd94e0352 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-position-2-ref.xht @@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: position mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 100px; + height: 100px; + } + + #inner { + margin-left: 20px; + margin-top: 20px; + width: 50px; + height: 50px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-position-3-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-position-3-ref.xht new file mode 100644 index 00000000000..429b39f8343 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-position-3-ref.xht @@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: position mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 100px; + height: 100px; + } + + #inner { + margin-left: 25px; + margin-top: 10px; + width: 50px; + height: 50px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-position-4-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-position-4-ref.xht new file mode 100644 index 00000000000..e83d824ba36 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-position-4-ref.xht @@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: position mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 100px; + height: 100px; + } + + #inner { + margin-left: 0px; + margin-top: 25px; + width: 50px; + height: 50px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-position-5-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-position-5-ref.xht new file mode 100644 index 00000000000..2c8799c0f19 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-position-5-ref.xht @@ -0,0 +1,38 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: position mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 120px; + height: 120px; + } + + #inner1 { + margin-left: 35px; + margin-top: 0px; + width: 50px; + height: 50px; + background-color: purple; + } + + #inner2 { + margin-left: 35px; + margin-top: 20px; + width: 50px; + height: 50px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner1"></div> + <div id="inner2"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-position-6-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-position-6-ref.xht new file mode 100644 index 00000000000..2f089bcf2bf --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-position-6-ref.xht @@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: position mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + .outer { + border: 1px solid black; + width: 100px; + height: 100px; + } + + .inner { + margin-left: 20px; + margin-top: 50px; + width: 50px; + height: 50px; + background-color: purple; + } + </style> + </head> + <body> + <div class="outer"><div class="inner"></div></div> + <div class="outer"><div class="inner"></div></div> + <div class="outer"><div class="inner"></div></div> + <div class="outer"><div class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-position-7-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-position-7-ref.xht new file mode 100644 index 00000000000..e1479789d4b --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-position-7-ref.xht @@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: position mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + .outer { + border: 1px solid black; + width: 100px; + height: 100px; + } + + .inner { + margin-left: 50px; + margin-top: 20px; + width: 50px; + height: 50px; + background-color: purple; + } + </style> + </head> + <body> + <div class="outer"><div class="inner"></div></div> + <div class="outer"><div class="inner"></div></div> + <div class="outer"><div class="inner"></div></div> + <div class="outer"><div class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-repeat-1-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-repeat-1-ref.xht new file mode 100644 index 00000000000..2ad4cff79d3 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-repeat-1-ref.xht @@ -0,0 +1,45 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-repeat: repeated mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + div.outer { + width: 128px; + height: 128px; + position: relative; + border: 1px solid black; + } + + div.inner { + width: 50px; + height: 50px; + position: absolute; + background-color: purple; + } + + #pos-top-left { left: 0; top: 0; } + #pos-top-right { right: 0; top: 0; } + #pos-bottom-left { left: 0; bottom: 0; } + #pos-bottom-right { right: 0; bottom: 0; } + </style> + </head> + <body> + <div class="outer"> + <div id="pos-top-left" class="inner"></div> + <div id="pos-top-right" class="inner"></div> + <div id="pos-bottom-left" class="inner"></div> + <div id="pos-bottom-right" class="inner"></div> + </div> + <div class="outer"> + <div id="pos-top-left" class="inner"></div> + <div id="pos-top-right" class="inner"></div> + </div> + <div class="outer"> + <div id="pos-top-left" class="inner"></div> + <div id="pos-bottom-left" class="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-repeat-2-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-repeat-2-ref.xht new file mode 100644 index 00000000000..2ad4cff79d3 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-repeat-2-ref.xht @@ -0,0 +1,45 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-repeat: repeated mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + div.outer { + width: 128px; + height: 128px; + position: relative; + border: 1px solid black; + } + + div.inner { + width: 50px; + height: 50px; + position: absolute; + background-color: purple; + } + + #pos-top-left { left: 0; top: 0; } + #pos-top-right { right: 0; top: 0; } + #pos-bottom-left { left: 0; bottom: 0; } + #pos-bottom-right { right: 0; bottom: 0; } + </style> + </head> + <body> + <div class="outer"> + <div id="pos-top-left" class="inner"></div> + <div id="pos-top-right" class="inner"></div> + <div id="pos-bottom-left" class="inner"></div> + <div id="pos-bottom-right" class="inner"></div> + </div> + <div class="outer"> + <div id="pos-top-left" class="inner"></div> + <div id="pos-top-right" class="inner"></div> + </div> + <div class="outer"> + <div id="pos-top-left" class="inner"></div> + <div id="pos-bottom-left" class="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-repeat-3-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-repeat-3-ref.xht new file mode 100644 index 00000000000..16e88e3792e --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-repeat-3-ref.xht @@ -0,0 +1,40 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-repeat: repeated mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + div.outer { + width: 150px; + height: 150px; + border: 1px solid black; + } + + .color { + background-color: purple; + } + + #round { + width: 150px; + height: 150px; + } + + #round-x { + width: 150px; + height: 50px; + } + + #round-y { + width: 50px; + height: 150px; + } + </style> + </head> + <body> + <div class="outer"><div id="round" class="color"></div></div> + <div class="outer"><div id="round-x" class="color"></div></div> + <div class="outer"><div id="round-y" class="color"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-size-auto-length-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-size-auto-length-ref.xht new file mode 100644 index 00000000000..f1e26917112 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-size-auto-length-ref.xht @@ -0,0 +1,27 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner { + width: 20px; + height: 20px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-size-auto-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-size-auto-ref.xht new file mode 100644 index 00000000000..33ee1a3064f --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-size-auto-ref.xht @@ -0,0 +1,27 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner { + width: 50px; + height: 50px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-size-contain-clip-border-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-size-contain-clip-border-ref.xht new file mode 100644 index 00000000000..45aa0b2ff9b --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-size-contain-clip-border-ref.xht @@ -0,0 +1,27 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner { + width: 64px; + height: 64px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-size-contain-clip-padding-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-size-contain-clip-padding-ref.xht new file mode 100644 index 00000000000..c55229a8464 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-size-contain-clip-padding-ref.xht @@ -0,0 +1,35 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner { + border: 20px solid white; + width: 24px; + height: 88px; + } + + #innermost { + width: 24px; + height: 24px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"> + <div id="innermost"></div> + </div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-size-contain-position-fifty-fifty-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-size-contain-position-fifty-fifty-ref.xht new file mode 100644 index 00000000000..ff52b22d438 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-size-contain-position-fifty-fifty-ref.xht @@ -0,0 +1,33 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner1 { + width: 64px; + height: 32px; + } + + #inner2 { + width: 64px; + height: 64px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner1"></div> + <div id="inner2"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-size-contain-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-size-contain-ref.xht new file mode 100644 index 00000000000..90104654696 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-size-contain-ref.xht @@ -0,0 +1,27 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + #outer { + border: 10px solid black; + width: 64px; + height: 128px; + } + + #inner { + width: 64px; + height: 64px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-size-cover-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-size-cover-ref.xht new file mode 100644 index 00000000000..e869b34f7a6 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-size-cover-ref.xht @@ -0,0 +1,21 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + #outer { + border: 10px solid transparent; + width: 64px; + height: 128px; + background-clip: content-box; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-size-length-length-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-size-length-length-ref.xht new file mode 100644 index 00000000000..63e175601db --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-size-length-length-ref.xht @@ -0,0 +1,27 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner { + width: 32px; + height: 64px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-size-length-percent-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-size-length-percent-ref.xht new file mode 100644 index 00000000000..e2c20794d3e --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-size-length-percent-ref.xht @@ -0,0 +1,27 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner { + width: 16px; + height: 32px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-size-percent-percent-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-size-percent-percent-ref.xht new file mode 100644 index 00000000000..a8e19318904 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-size-percent-percent-ref.xht @@ -0,0 +1,27 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner { + width: 32px; + height: 32px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-size-percent-percent-stretch-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-size-percent-percent-stretch-ref.xht new file mode 100644 index 00000000000..049a065b979 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/mask-size-percent-percent-stretch-ref.xht @@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + div { + width: 60px; + height: 120px; + } + + #outer { + border: 10px solid black; + } + + #inner { + height: 60px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/50x100-opaque-blue.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/50x100-opaque-blue.svg new file mode 100644 index 00000000000..0ce8f599731 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/50x100-opaque-blue.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="50" height="100"> + <rect x="0" y="0" width="50" height="100" fill="blue" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/50x50-opaque-blue.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/50x50-opaque-blue.svg new file mode 100644 index 00000000000..ac194ee3473 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/50x50-opaque-blue.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50"> + <rect x="0" y="0" width="50" height="50" fill="blue" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/blue-100x100.png b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/blue-100x100.png Binary files differnew file mode 100644 index 00000000000..3b72d5ce53c --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/blue-100x100.png diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/blue-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/blue-100x100.svg new file mode 100644 index 00000000000..ebe8fa73aee --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/blue-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="blue" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/blue-100x50-transparent-100x50.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/blue-100x50-transparent-100x50.svg index a79d9685c94..2ed03935634 100644 --- a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/blue-100x50-transparent-100x50.svg +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/blue-100x50-transparent-100x50.svg @@ -1,4 +1,4 @@ <svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <rect x="0" y="0" width="100%" height="50%" fill="blue" fill-opacity="0"/> - <rect x="0" y="50" width="100%" height="50%" fill="blue" fill-opacity="1"/> + <rect x="0" y="50%" width="100%" height="50%" fill="blue" fill-opacity="1"/> </svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/blue-luminance-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/blue-luminance-100x100.svg new file mode 100644 index 00000000000..3f8e0341e4a --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/blue-luminance-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="RGB(238,238,255)" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/green-100x100.png b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/green-100x100.png Binary files differnew file mode 100644 index 00000000000..d65838b7f02 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/green-100x100.png diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/green-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/green-100x100.svg new file mode 100644 index 00000000000..d792713591e --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/green-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="lime" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/green-luminance-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/green-luminance-100x100.svg new file mode 100644 index 00000000000..c33436ed43c --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/green-luminance-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="RGB(73,73,255)" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/mask-half-transparent-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/mask-half-transparent-100x100.svg new file mode 100644 index 00000000000..2abd94deec4 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/mask-half-transparent-100x100.svg @@ -0,0 +1,8 @@ +<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> + <defs> + <mask id="mask" mask-type="alpha"> + <rect x="0" y="0" width="100" height="50" fill-opacity="1"/> + <rect x="0" y="50" width="100" height="50" fill-opacity="0"/> + </mask> + </defs> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/red-100x100.png b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/red-100x100.png Binary files differnew file mode 100644 index 00000000000..43b8e542a92 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/red-100x100.png diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/red-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/red-100x100.svg new file mode 100644 index 00000000000..175c05f28f2 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/red-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="red" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/red-luminance-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/red-luminance-100x100.svg new file mode 100644 index 00000000000..274905d6b90 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/red-luminance-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="RGB(201,201,255)" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/transparent-100x50-blue-100x50.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/transparent-100x50-blue-100x50.svg index c4017557889..81d59b1bcf1 100644 --- a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/transparent-100x50-blue-100x50.svg +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reference/support/transparent-100x50-blue-100x50.svg @@ -1,4 +1,4 @@ <svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <rect x="0" y="0" width="100%" height="50%" fill="blue" fill-opacity="1"/> - <rect x="0" y="50" width="100%" height="50%" fill="blue" fill-opacity="0"/> + <rect x="0" y="50%" width="100%" height="50%" fill="blue" fill-opacity="0"/> </svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reftest-toc.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reftest-toc.xht index 4cb744babb6..3745e30d477 100644 --- a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reftest-toc.xht +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reftest-toc.xht @@ -480,6 +480,14 @@ <td rowspan="1"></td> </tr> </tbody> + <tbody id="mask-clip-1" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-clip: clip mask image"> + <a href="mask-clip-1.xht">mask-clip-1</a></td> + <td><a href="reference/mask-clip-1-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> <tbody id="mask-composite-1a" class=""> <tr> <td rowspan="1" title="CSS Masking: mask-composite: compose vector image"> @@ -512,6 +520,350 @@ <td rowspan="1"></td> </tr> </tbody> + <tbody id="mask-image-1a" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-image: mask layer image"> + <a href="mask-image-1a.xht">mask-image-1a</a></td> + <td><a href="reference/mask-image-1-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-image-1b" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-image: mask layer image"> + <a href="mask-image-1b.xht">mask-image-1b</a></td> + <td><a href="reference/mask-image-1-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-image-1c" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-image: mask layer image"> + <a href="mask-image-1c.xht">mask-image-1c</a></td> + <td><a href="reference/mask-image-1-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-image-2" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-image: mask layer image"> + <a href="mask-image-2.xht">mask-image-2</a></td> + <td><a href="reference/mask-image-2-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-mode-a" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-mode with vector image"> + <a href="mask-mode-a.xht">mask-mode-a</a></td> + <td><a href="reference/mask-mode-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-mode-b" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-mode with raster image"> + <a href="mask-mode-b.xht">mask-mode-b</a></td> + <td><a href="reference/mask-mode-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-origin-1" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-origin: mask positioning area"> + <a href="mask-origin-1.xht">mask-origin-1</a></td> + <td><a href="reference/mask-origin-1-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-origin-2" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-origin: mask positioning area"> + <a href="mask-origin-2.xht">mask-origin-2</a></td> + <td><a href="reference/mask-origin-2-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-1a" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-1a.xht">mask-position-1a</a></td> + <td><a href="reference/mask-position-1-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-1b" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-1b.xht">mask-position-1b</a></td> + <td><a href="reference/mask-position-1-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-1c" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-1c.xht">mask-position-1c</a></td> + <td><a href="reference/mask-position-1-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-2a" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-2a.xht">mask-position-2a</a></td> + <td><a href="reference/mask-position-2-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-2b" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-2b.xht">mask-position-2b</a></td> + <td><a href="reference/mask-position-2-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-3a" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-3a.xht">mask-position-3a</a></td> + <td><a href="reference/mask-position-3-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-3b" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-3b.xht">mask-position-3b</a></td> + <td><a href="reference/mask-position-3-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-4a" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-4a.xht">mask-position-4a</a></td> + <td><a href="reference/mask-position-4-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-4b" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-4b.xht">mask-position-4b</a></td> + <td><a href="reference/mask-position-4-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-4c" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-4c.xht">mask-position-4c</a></td> + <td><a href="reference/mask-position-4-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-4d" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-4d.xht">mask-position-4d</a></td> + <td><a href="reference/mask-position-4-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-5" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-5.xht">mask-position-5</a></td> + <td><a href="reference/mask-position-5-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-6" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-6.xht">mask-position-6</a></td> + <td><a href="reference/mask-position-6-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-7" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-7.xht">mask-position-7</a></td> + <td><a href="reference/mask-position-7-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-repeat-1" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-repeat: repeated mask layer image"> + <a href="mask-repeat-1.xht">mask-repeat-1</a></td> + <td><a href="reference/mask-repeat-1-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-repeat-2" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-repeat: repeated mask layer image"> + <a href="mask-repeat-2.xht">mask-repeat-2</a></td> + <td><a href="reference/mask-repeat-2-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-repeat-3" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-repeat: repeated mask layer image"> + <a href="mask-repeat-3.xht">mask-repeat-3</a></td> + <td><a href="reference/mask-repeat-3-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-auto" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-auto.xht">mask-size-auto</a></td> + <td><a href="reference/mask-size-auto-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-auto-auto" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-auto-auto.xht">mask-size-auto-auto</a></td> + <td><a href="reference/mask-size-auto-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-auto-length" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-auto-length.xht">mask-size-auto-length</a></td> + <td><a href="reference/mask-size-auto-length-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-auto-percent" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-auto-percent.xht">mask-size-auto-percent</a></td> + <td><a href="reference/mask-size-auto-length-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-contain" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-contain.xht">mask-size-contain</a></td> + <td><a href="reference/mask-size-contain-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-contain-clip-border" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-contain-clip-border.xht">mask-size-contain-clip-border</a></td> + <td><a href="reference/mask-size-contain-clip-border-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-contain-clip-padding" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-contain-clip-padding.xht">mask-size-contain-clip-padding</a></td> + <td><a href="reference/mask-size-contain-clip-padding-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-contain-position-fifty-fifty" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-contain-position-fifty-fifty.xht">mask-size-contain-position-fifty-fifty</a></td> + <td><a href="reference/mask-size-contain-position-fifty-fifty-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-cover" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-cover.xht">mask-size-cover</a></td> + <td><a href="reference/mask-size-cover-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-length" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-length.xht">mask-size-length</a></td> + <td><a href="reference/mask-size-length-length-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-length-auto" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-length-auto.xht">mask-size-length-auto</a></td> + <td><a href="reference/mask-size-length-length-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-length-length" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-length-length.xht">mask-size-length-length</a></td> + <td><a href="reference/mask-size-length-length-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-length-percent" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-length-percent.xht">mask-size-length-percent</a></td> + <td><a href="reference/mask-size-length-percent-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-percent" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-percent.xht">mask-size-percent</a></td> + <td><a href="reference/mask-size-percent-percent-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-percent-auto" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-percent-auto.xht">mask-size-percent-auto</a></td> + <td><a href="reference/mask-size-percent-percent-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-percent-length" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-percent-length.xht">mask-size-percent-length</a></td> + <td><a href="reference/mask-size-percent-percent-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-percent-percent" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-percent-percent.xht">mask-size-percent-percent</a></td> + <td><a href="reference/mask-size-percent-percent-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-percent-percent-stretch" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-percent-percent-stretch.xht">mask-size-percent-percent-stretch</a></td> + <td><a href="reference/mask-size-percent-percent-stretch-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> <tbody id="test-mask" class=""> <tr> <td rowspan="1" title="CSS Masking: mask-repeat:round repeat;"> diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reftest.list b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reftest.list index b07ea246fcb..6160e0edaf9 100644 --- a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reftest.list +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/reftest.list @@ -56,8 +56,52 @@ clip-rect-comma-003.xht == reference/clip-no-clipping-ref.xht clip-rect-comma-004.xht == reference/clip-no-clipping-ref.xht clip-rule-001.xht == reference/clip-rule-rectangle-border-ref.xht clip-rule-002.xht == reference/clip-rule-rectangle-border-ref.xht +mask-clip-1.xht == reference/mask-clip-1-ref.xht mask-composite-1a.xht == reference/mask-composite-1-ref.xht mask-composite-1b.xht == reference/mask-composite-1-ref.xht mask-composite-2a.xht == reference/mask-composite-2-ref.xht mask-composite-2b.xht == reference/mask-composite-2-ref.xht +mask-image-1a.xht == reference/mask-image-1-ref.xht +mask-image-1b.xht == reference/mask-image-1-ref.xht +mask-image-1c.xht == reference/mask-image-1-ref.xht +mask-image-2.xht == reference/mask-image-2-ref.xht +mask-mode-a.xht == reference/mask-mode-ref.xht +mask-mode-b.xht == reference/mask-mode-ref.xht +mask-origin-1.xht == reference/mask-origin-1-ref.xht +mask-origin-2.xht == reference/mask-origin-2-ref.xht +mask-position-1a.xht == reference/mask-position-1-ref.xht +mask-position-1b.xht == reference/mask-position-1-ref.xht +mask-position-1c.xht == reference/mask-position-1-ref.xht +mask-position-2a.xht == reference/mask-position-2-ref.xht +mask-position-2b.xht == reference/mask-position-2-ref.xht +mask-position-3a.xht == reference/mask-position-3-ref.xht +mask-position-3b.xht == reference/mask-position-3-ref.xht +mask-position-4a.xht == reference/mask-position-4-ref.xht +mask-position-4b.xht == reference/mask-position-4-ref.xht +mask-position-4c.xht == reference/mask-position-4-ref.xht +mask-position-4d.xht == reference/mask-position-4-ref.xht +mask-position-5.xht == reference/mask-position-5-ref.xht +mask-position-6.xht == reference/mask-position-6-ref.xht +mask-position-7.xht == reference/mask-position-7-ref.xht +mask-repeat-1.xht == reference/mask-repeat-1-ref.xht +mask-repeat-2.xht == reference/mask-repeat-2-ref.xht +mask-repeat-3.xht == reference/mask-repeat-3-ref.xht +mask-size-auto.xht == reference/mask-size-auto-ref.xht +mask-size-auto-auto.xht == reference/mask-size-auto-ref.xht +mask-size-auto-length.xht == reference/mask-size-auto-length-ref.xht +mask-size-auto-percent.xht == reference/mask-size-auto-length-ref.xht +mask-size-contain.xht == reference/mask-size-contain-ref.xht +mask-size-contain-clip-border.xht == reference/mask-size-contain-clip-border-ref.xht +mask-size-contain-clip-padding.xht == reference/mask-size-contain-clip-padding-ref.xht +mask-size-contain-position-fifty-fifty.xht == reference/mask-size-contain-position-fifty-fifty-ref.xht +mask-size-cover.xht == reference/mask-size-cover-ref.xht +mask-size-length.xht == reference/mask-size-length-length-ref.xht +mask-size-length-auto.xht == reference/mask-size-length-length-ref.xht +mask-size-length-length.xht == reference/mask-size-length-length-ref.xht +mask-size-length-percent.xht == reference/mask-size-length-percent-ref.xht +mask-size-percent.xht == reference/mask-size-percent-percent-ref.xht +mask-size-percent-auto.xht == reference/mask-size-percent-percent-ref.xht +mask-size-percent-length.xht == reference/mask-size-percent-percent-ref.xht +mask-size-percent-percent.xht == reference/mask-size-percent-percent-ref.xht +mask-size-percent-percent-stretch.xht == reference/mask-size-percent-percent-stretch-ref.xht test-mask.xht == reference/test-mask-ref.xht diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/50x100-opaque-blue.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/50x100-opaque-blue.svg new file mode 100644 index 00000000000..0ce8f599731 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/50x100-opaque-blue.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="50" height="100"> + <rect x="0" y="0" width="50" height="100" fill="blue" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/50x50-opaque-blue.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/50x50-opaque-blue.svg new file mode 100644 index 00000000000..ac194ee3473 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/50x50-opaque-blue.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50"> + <rect x="0" y="0" width="50" height="50" fill="blue" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/blue-100x100.png b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/blue-100x100.png Binary files differnew file mode 100644 index 00000000000..3b72d5ce53c --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/blue-100x100.png diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/blue-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/blue-100x100.svg new file mode 100644 index 00000000000..ebe8fa73aee --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/blue-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="blue" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/blue-100x50-transparent-100x50.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/blue-100x50-transparent-100x50.svg index a79d9685c94..2ed03935634 100644 --- a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/blue-100x50-transparent-100x50.svg +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/blue-100x50-transparent-100x50.svg @@ -1,4 +1,4 @@ <svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <rect x="0" y="0" width="100%" height="50%" fill="blue" fill-opacity="0"/> - <rect x="0" y="50" width="100%" height="50%" fill="blue" fill-opacity="1"/> + <rect x="0" y="50%" width="100%" height="50%" fill="blue" fill-opacity="1"/> </svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/blue-luminance-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/blue-luminance-100x100.svg new file mode 100644 index 00000000000..3f8e0341e4a --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/blue-luminance-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="RGB(238,238,255)" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/green-100x100.png b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/green-100x100.png Binary files differnew file mode 100644 index 00000000000..d65838b7f02 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/green-100x100.png diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/green-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/green-100x100.svg new file mode 100644 index 00000000000..d792713591e --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/green-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="lime" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/green-luminance-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/green-luminance-100x100.svg new file mode 100644 index 00000000000..c33436ed43c --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/green-luminance-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="RGB(73,73,255)" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/mask-half-transparent-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/mask-half-transparent-100x100.svg new file mode 100644 index 00000000000..2abd94deec4 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/mask-half-transparent-100x100.svg @@ -0,0 +1,8 @@ +<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> + <defs> + <mask id="mask" mask-type="alpha"> + <rect x="0" y="0" width="100" height="50" fill-opacity="1"/> + <rect x="0" y="50" width="100" height="50" fill-opacity="0"/> + </mask> + </defs> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/red-100x100.png b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/red-100x100.png Binary files differnew file mode 100644 index 00000000000..43b8e542a92 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/red-100x100.png diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/red-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/red-100x100.svg new file mode 100644 index 00000000000..175c05f28f2 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/red-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="red" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/red-luminance-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/red-luminance-100x100.svg new file mode 100644 index 00000000000..274905d6b90 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/red-luminance-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="RGB(201,201,255)" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/transparent-100x50-blue-100x50.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/transparent-100x50-blue-100x50.svg index c4017557889..81d59b1bcf1 100644 --- a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/transparent-100x50-blue-100x50.svg +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/support/transparent-100x50-blue-100x50.svg @@ -1,4 +1,4 @@ <svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <rect x="0" y="0" width="100%" height="50%" fill="blue" fill-opacity="1"/> - <rect x="0" y="50" width="100%" height="50%" fill="blue" fill-opacity="0"/> + <rect x="0" y="50%" width="100%" height="50%" fill="blue" fill-opacity="0"/> </svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/toc.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/toc.xht index 3fed4050d31..3eb5110a3ec 100644 --- a/tests/wpt/css-tests/css-masking-1_dev/xhtml1/toc.xht +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1/toc.xht @@ -52,7 +52,7 @@ <tbody id="s7"> <tr><th><a href="chapter-7.xht">Chapter 7 - Positioned Masks</a></th> - <td>(5 Tests)</td></tr> + <td>(49 Tests)</td></tr> </tbody> <tbody id="s8"> <tr><th><a href="chapter-8.xht">Chapter 8 - diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/chapter-10.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/chapter-10.xht index 3add24715c0..45f9275258d 100644 --- a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/chapter-10.xht +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/chapter-10.xht @@ -39,72 +39,18 @@ <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-compositing-1"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-shapes"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css21"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-transforms"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3bg"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3color"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3val"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-filter-effects"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-html5"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-rfc2119"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-svg11"> - <!-- 0 tests --> - </tbody> <tbody id="s.#changes"> <!-- 0 tests --> </tbody> <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> - <!-- 0 tests --> - </tbody> <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#cr-exit-criteria"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#experimental"> - <!-- 0 tests --> - </tbody> <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#normative"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#partial"> - <!-- 0 tests --> - </tbody> <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> @@ -117,9 +63,6 @@ <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> - <!-- 0 tests --> - </tbody> <tbody id="s.#title"> <!-- 0 tests --> </tbody> diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/chapter-7.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/chapter-7.xht index 285ce9b05d2..939aed45faa 100644 --- a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/chapter-7.xht +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/chapter-7.xht @@ -13,7 +13,7 @@ <body> <h1>CSS Masking Level 1 CR Test Suite</h1> - <h2>Positioned Masks (5 tests)</h2> + <h2>Positioned Masks (49 tests)</h2> <table width="100%"> <col id="test-column"></col> <col id="refs-column"></col> @@ -37,7 +37,51 @@ <tr><th colspan="4" scope="rowgroup"> <a href="#s7.1">+</a> <a href="https://www.w3.org/TR/css-masking-1/#the-mask-image">7.1 Mask Image Source: the mask-image property</a></th></tr> - <!-- 0 tests --> + <!-- 4 tests --> + <tr id="mask-image-1a-7.1" class="primary"> + <td><strong> + <a href="mask-image-1a.xht">mask-image-1a</a></strong></td> + <td><a href="reference/mask-image-1-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-image: mask layer image + <ul class="assert"> + <li>Test checks whether image as mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-image-1b-7.1" class="primary"> + <td><strong> + <a href="mask-image-1b.xht">mask-image-1b</a></strong></td> + <td><a href="reference/mask-image-1-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-image: mask layer image + <ul class="assert"> + <li>Test checks whether SVG image as mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-image-1c-7.1" class="primary"> + <td><strong> + <a href="mask-image-1c.xht">mask-image-1c</a></strong></td> + <td><a href="reference/mask-image-1-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-image: mask layer image + <ul class="assert"> + <li>Test checks whether SVG mask element as mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-image-2-7.1" class="primary"> + <td><strong> + <a href="mask-image-2.xht">mask-image-2</a></strong></td> + <td><a href="reference/mask-image-2-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-image: mask layer image + <ul class="assert"> + <li>Test checks whether gradient CSS image as mask layer works correctly or not.</li> + </ul> + </td> + </tr> </tbody> <tbody id="s7.1.#mask-layer-image"> <!-- 0 tests --> @@ -61,7 +105,29 @@ <!-- 0 tests --> </tbody> <tbody id="s7.2.#propdef-mask-mode"> - <!-- 0 tests --> + <!-- 2 tests --> + <tr id="mask-mode-a-7.2.#propdef-mask-mode" class="primary"> + <td><strong> + <a href="mask-mode-a.xht">mask-mode-a</a></strong></td> + <td><a href="reference/mask-mode-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-mode with vector image + <ul class="assert"> + <li>Test checks that mask an SVG image referenced by mask-image is correct with different mask mode.</li> + </ul> + </td> + </tr> + <tr id="mask-mode-b-7.2.#propdef-mask-mode" class="primary"> + <td><strong> + <a href="mask-mode-b.xht">mask-mode-b</a></strong></td> + <td><a href="reference/mask-mode-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-mode with raster image + <ul class="assert"> + <li>Test checks that mask a PNG image referenced by mask-image is correct with different mask mode.</li> + </ul> + </td> + </tr> </tbody> <tbody id="s7.2.#typedef-masking-mode"> <!-- 0 tests --> @@ -79,7 +145,40 @@ <tr><th colspan="4" scope="rowgroup"> <a href="#s7.3">+</a> <a href="https://www.w3.org/TR/css-masking-1/#the-mask-repeat">7.3 Tiling Mask Images: The mask-repeat property</a></th></tr> - <!-- 1 tests --> + <!-- 4 tests --> + <tr id="mask-repeat-1-7.3" class="primary"> + <td><strong> + <a href="mask-repeat-1.xht">mask-repeat-1</a></strong></td> + <td><a href="reference/mask-repeat-1-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-repeat: repeated mask layer image + <ul class="assert"> + <li>Test checks whether repeated mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-repeat-2-7.3" class="primary"> + <td><strong> + <a href="mask-repeat-2.xht">mask-repeat-2</a></strong></td> + <td><a href="reference/mask-repeat-2-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-repeat: repeated mask layer image + <ul class="assert"> + <li>Test checks whether repeated mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-repeat-3-7.3" class="primary"> + <td><strong> + <a href="mask-repeat-3.xht">mask-repeat-3</a></strong></td> + <td><a href="reference/mask-repeat-3-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-repeat: repeated mask layer image + <ul class="assert"> + <li>Test checks whether repeated mask layer works correctly or not.</li> + </ul> + </td> + </tr> <tr id="test-mask-7.3" class=""> <td> <a href="test-mask.xht">test-mask</a></td> @@ -99,7 +198,161 @@ <tr><th colspan="4" scope="rowgroup"> <a href="#s7.4">+</a> <a href="https://www.w3.org/TR/css-masking-1/#the-mask-position">7.4 Positioning Mask Images: the mask-position property</a></th></tr> - <!-- 0 tests --> + <!-- 14 tests --> + <tr id="mask-position-1a-7.4" class="primary"> + <td><strong> + <a href="mask-position-1a.xht">mask-position-1a</a></strong></td> + <td><a href="reference/mask-position-1-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-1b-7.4" class="primary"> + <td><strong> + <a href="mask-position-1b.xht">mask-position-1b</a></strong></td> + <td><a href="reference/mask-position-1-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-1c-7.4" class="primary"> + <td><strong> + <a href="mask-position-1c.xht">mask-position-1c</a></strong></td> + <td><a href="reference/mask-position-1-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-2a-7.4" class="primary"> + <td><strong> + <a href="mask-position-2a.xht">mask-position-2a</a></strong></td> + <td><a href="reference/mask-position-2-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-2b-7.4" class="primary"> + <td><strong> + <a href="mask-position-2b.xht">mask-position-2b</a></strong></td> + <td><a href="reference/mask-position-2-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-3a-7.4" class="primary"> + <td><strong> + <a href="mask-position-3a.xht">mask-position-3a</a></strong></td> + <td><a href="reference/mask-position-3-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-3b-7.4" class="primary"> + <td><strong> + <a href="mask-position-3b.xht">mask-position-3b</a></strong></td> + <td><a href="reference/mask-position-3-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-4a-7.4" class="primary"> + <td><strong> + <a href="mask-position-4a.xht">mask-position-4a</a></strong></td> + <td><a href="reference/mask-position-4-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-4b-7.4" class="primary"> + <td><strong> + <a href="mask-position-4b.xht">mask-position-4b</a></strong></td> + <td><a href="reference/mask-position-4-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-4c-7.4" class="primary"> + <td><strong> + <a href="mask-position-4c.xht">mask-position-4c</a></strong></td> + <td><a href="reference/mask-position-4-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-4d-7.4" class="primary"> + <td><strong> + <a href="mask-position-4d.xht">mask-position-4d</a></strong></td> + <td><a href="reference/mask-position-4-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-5-7.4" class="primary"> + <td><strong> + <a href="mask-position-5.xht">mask-position-5</a></strong></td> + <td><a href="reference/mask-position-5-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-6-7.4" class="primary"> + <td><strong> + <a href="mask-position-6.xht">mask-position-6</a></strong></td> + <td><a href="reference/mask-position-6-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-position-7-7.4" class="primary"> + <td><strong> + <a href="mask-position-7.xht">mask-position-7</a></strong></td> + <td><a href="reference/mask-position-7-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-position: mask positioning + <ul class="assert"> + <li>Test checks whether positioning mask layer works correctly or not.</li> + </ul> + </td> + </tr> </tbody> <tbody id="s7.4.#propdef-mask-position"> <!-- 0 tests --> @@ -108,7 +361,18 @@ <tr><th colspan="4" scope="rowgroup"> <a href="#s7.5">+</a> <a href="https://www.w3.org/TR/css-masking-1/#the-mask-clip">7.5 Masking Area: the mask-clip property</a></th></tr> - <!-- 0 tests --> + <!-- 1 tests --> + <tr id="mask-clip-1-7.5" class=""> + <td> + <a href="mask-clip-1.xht">mask-clip-1</a></td> + <td><a href="reference/mask-clip-1-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-clip: clip mask image + <ul class="assert"> + <li>border-box, padding-box, and content-box values of mask-clip should clip to the appropriate boxes.</li> + </ul> + </td> + </tr> </tbody> <tbody id="s7.5.#mask-painting-area"> <!-- 0 tests --> @@ -144,7 +408,29 @@ <tr><th colspan="4" scope="rowgroup"> <a href="#s7.6">+</a> <a href="https://www.w3.org/TR/css-masking-1/#the-mask-origin">7.6 Positioning Area: the mask-origin property</a></th></tr> - <!-- 0 tests --> + <!-- 2 tests --> + <tr id="mask-origin-1-7.6" class="primary"> + <td><strong> + <a href="mask-origin-1.xht">mask-origin-1</a></strong></td> + <td><a href="reference/mask-origin-1-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-origin: mask positioning area + <ul class="assert"> + <li>Test checks whether setting mask position area works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-origin-2-7.6" class="primary"> + <td><strong> + <a href="mask-origin-2.xht">mask-origin-2</a></strong></td> + <td><a href="reference/mask-origin-2-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-origin: mask positioning area + <ul class="assert"> + <li>Test checks whether setting mask origin to margin-box works correctly or not.</li> + </ul> + </td> + </tr> </tbody> <tbody id="s7.6.#mask-positioning-area"> <!-- 0 tests --> @@ -177,7 +463,205 @@ <tr><th colspan="4" scope="rowgroup"> <a href="#s7.7">+</a> <a href="https://www.w3.org/TR/css-masking-1/#the-mask-size">7.7 Sizing Mask Images: the mask-size property</a></th></tr> - <!-- 0 tests --> + <!-- 18 tests --> + <tr id="mask-size-auto-7.7" class="primary"> + <td><strong> + <a href="mask-size-auto.xht">mask-size-auto</a></strong></td> + <td><a href="reference/mask-size-auto-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-auto-auto-7.7" class="primary"> + <td><strong> + <a href="mask-size-auto-auto.xht">mask-size-auto-auto</a></strong></td> + <td><a href="reference/mask-size-auto-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-auto-length-7.7" class="primary"> + <td><strong> + <a href="mask-size-auto-length.xht">mask-size-auto-length</a></strong></td> + <td><a href="reference/mask-size-auto-length-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-auto-percent-7.7" class="primary"> + <td><strong> + <a href="mask-size-auto-percent.xht">mask-size-auto-percent</a></strong></td> + <td><a href="reference/mask-size-auto-length-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-contain-7.7" class="primary"> + <td><strong> + <a href="mask-size-contain.xht">mask-size-contain</a></strong></td> + <td><a href="reference/mask-size-contain-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-contain-clip-border-7.7" class="primary"> + <td><strong> + <a href="mask-size-contain-clip-border.xht">mask-size-contain-clip-border</a></strong></td> + <td><a href="reference/mask-size-contain-clip-border-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-contain-clip-padding-7.7" class="primary"> + <td><strong> + <a href="mask-size-contain-clip-padding.xht">mask-size-contain-clip-padding</a></strong></td> + <td><a href="reference/mask-size-contain-clip-padding-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-contain-position-fifty-fifty-7.7" class="primary"> + <td><strong> + <a href="mask-size-contain-position-fifty-fifty.xht">mask-size-contain-position-fifty-fifty</a></strong></td> + <td><a href="reference/mask-size-contain-position-fifty-fifty-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-cover-7.7" class="primary"> + <td><strong> + <a href="mask-size-cover.xht">mask-size-cover</a></strong></td> + <td><a href="reference/mask-size-cover-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-length-7.7" class="primary"> + <td><strong> + <a href="mask-size-length.xht">mask-size-length</a></strong></td> + <td><a href="reference/mask-size-length-length-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-length-auto-7.7" class="primary"> + <td><strong> + <a href="mask-size-length-auto.xht">mask-size-length-auto</a></strong></td> + <td><a href="reference/mask-size-length-length-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-length-length-7.7" class="primary"> + <td><strong> + <a href="mask-size-length-length.xht">mask-size-length-length</a></strong></td> + <td><a href="reference/mask-size-length-length-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-length-percent-7.7" class="primary"> + <td><strong> + <a href="mask-size-length-percent.xht">mask-size-length-percent</a></strong></td> + <td><a href="reference/mask-size-length-percent-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-percent-7.7" class="primary"> + <td><strong> + <a href="mask-size-percent.xht">mask-size-percent</a></strong></td> + <td><a href="reference/mask-size-percent-percent-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-percent-auto-7.7" class="primary"> + <td><strong> + <a href="mask-size-percent-auto.xht">mask-size-percent-auto</a></strong></td> + <td><a href="reference/mask-size-percent-percent-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-percent-length-7.7" class="primary"> + <td><strong> + <a href="mask-size-percent-length.xht">mask-size-percent-length</a></strong></td> + <td><a href="reference/mask-size-percent-percent-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-percent-percent-7.7" class="primary"> + <td><strong> + <a href="mask-size-percent-percent.xht">mask-size-percent-percent</a></strong></td> + <td><a href="reference/mask-size-percent-percent-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> + <tr id="mask-size-percent-percent-stretch-7.7" class="primary"> + <td><strong> + <a href="mask-size-percent-percent-stretch.xht">mask-size-percent-percent-stretch</a></strong></td> + <td><a href="reference/mask-size-percent-percent-stretch-ref.xht">=</a> </td> + <td></td> + <td>CSS Masking: mask-size: mask layer size + <ul class="assert"> + <li>Test checks whether sizing mask layer works correctly or not.</li> + </ul> + </td> + </tr> </tbody> <tbody id="s7.7.#propdef-mask-size"> <!-- 0 tests --> diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/chapter-C.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/chapter-C.xht index ba55e00503d..6794f80981c 100644 --- a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/chapter-C.xht +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/chapter-C.xht @@ -39,28 +39,85 @@ <tbody id="sC.#InterfaceSVGMaskElement"> <!-- 0 tests --> </tbody> - <tbody id="sC.#SVGClipPathElement__clipPathUnits"> + <tbody id="sInterfaceSVGClipPathElement.#SVGClipPathElement__clipPathUnits"> <!-- 0 tests --> </tbody> - <tbody id="sC.#SVGClipPathElement__transform"> + <tbody id="sInterfaceSVGClipPathElement.#SVGClipPathElement__transform"> <!-- 0 tests --> </tbody> - <tbody id="sC.#SVGMaskElement__height"> + <tbody id="sInterfaceSVGMaskElement.#SVGMaskElement__height"> <!-- 0 tests --> </tbody> - <tbody id="sC.#SVGMaskElement__maskContentUnits"> + <tbody id="sInterfaceSVGMaskElement.#SVGMaskElement__maskContentUnits"> <!-- 0 tests --> </tbody> - <tbody id="sC.#SVGMaskElement__maskUnits"> + <tbody id="sInterfaceSVGMaskElement.#SVGMaskElement__maskUnits"> <!-- 0 tests --> </tbody> - <tbody id="sC.#SVGMaskElement__width"> + <tbody id="sInterfaceSVGMaskElement.#SVGMaskElement__width"> <!-- 0 tests --> </tbody> - <tbody id="sC.#SVGMaskElement__x"> + <tbody id="sInterfaceSVGMaskElement.#SVGMaskElement__x"> <!-- 0 tests --> </tbody> - <tbody id="sC.#SVGMaskElement__y"> + <tbody id="sInterfaceSVGMaskElement.#SVGMaskElement__y"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conformance-classes"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conventions"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#cr-exit-criteria"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#experimental"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#partial"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#testing"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css3color"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-filter-effects"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-compositing-1"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-shapes"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css21"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-transforms"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3bg"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3val"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-html5"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-rfc2119"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-svg11"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#informative"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-clip-1.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-clip-1.xht new file mode 100644 index 00000000000..0da39f934cb --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-clip-1.xht @@ -0,0 +1,57 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-clip: clip mask image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="http://www.w3.org/TR/css-masking-1/#the-mask-clip" rel="help" /> + <link href="reference/mask-clip-1-ref.xht" rel="match" /> + <meta content="border-box, padding-box, and content-box values of mask-clip should clip to the appropriate boxes." name="assert" /> + <style type="text/css"> + div { + /* + * content box: 40 x 20 + * padding box: 52 x 38 + * border box: 60 x 50 + * margin box: 66 x 54 + */ + background-color: purple; + position: absolute; + top: 10px; + margin: 1px 2px 3px 4px; + border: solid transparent; + border-width: 8px 2px 4px 6px; + padding: 6px 9px 12px 3px; + width: 40px; + height: 20px; + } + + div.mask { + mask-size: 100% 100%; + mask-origin: border-box; + mask-image: url(support/transparent-100x50-blue-100x50.svg); + } + + div.border { + left: 10px; + mask-clip: border-box; + } + + div.padding { + left: 110px; + mask-clip: padding-box; + } + + div.content { + left: 210px; + mask-clip: content-box; + } + </style> + </head> + <body> + <div class="outer mask border"></div> + <div class="outer mask padding"></div> + <div class="outer mask content"></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-image-1a.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-image-1a.xht new file mode 100644 index 00000000000..0082ca892c6 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-image-1a.xht @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-image: mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-image" rel="help" /> + <link href="reference/mask-image-1-ref.xht" rel="match" /> + <meta content="Test checks whether image as mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + background-color: purple; + width: 100px; + height: 100px; + } + + div.mask-by-png { + mask-image: url(support/transparent-100x50-blue-100x50.png); + } + </style> + </head> + <body> + <div class="mask-by-png"></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-image-1b.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-image-1b.xht new file mode 100644 index 00000000000..765c3763427 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-image-1b.xht @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-image: mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-image" rel="help" /> + <link href="reference/mask-image-1-ref.xht" rel="match" /> + <meta content="Test checks whether SVG image as mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + background-color: purple; + width: 100px; + height: 100px; + } + + div.mask-by-svg { + mask-image: url(support/transparent-100x50-blue-100x50.svg); + } + </style> + </head> + <body> + <div class="mask-by-svg"></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-image-1c.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-image-1c.xht new file mode 100644 index 00000000000..be78f931867 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-image-1c.xht @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-image: mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-image" rel="help" /> + <link href="reference/mask-image-1-ref.xht" rel="match" /> + <meta content="Test checks whether SVG mask element as mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + background-color: purple; + width: 100px; + height: 100px; + } + + div.mask-by-svg-mask { + mask-image: url(support/mask-half-transparent-100x100.svg#mask); + } + </style> + </head> + <body> + <div class="mask-by-svg-mask"></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-image-2.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-image-2.xht new file mode 100644 index 00000000000..7ce0fcb930c --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-image-2.xht @@ -0,0 +1,31 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-image: mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-image" rel="help" /> + <link href="reference/mask-image-2-ref.xht" rel="match" /> + <meta content="Test checks whether gradient CSS image as mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + background-color: purple; + width: 100px; + height: 100px; + } + + div.mask-by-gradient-1 { + mask-image: linear-gradient(rgba(0,0,255,0), rgba(0,0,255,1)); /* blue gradient mask */ + } + + div.mask-by-gradient-2 { + mask-image: linear-gradient(rgba(255,0,0,0), rgba(255,0,0,1)); /* red gradient mask */ + } + </style> + </head> + <body> + <div class="mask-by-gradient-1"></div> + <div class="mask-by-gradient-2"></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-mode-a.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-mode-a.xht new file mode 100644 index 00000000000..30ebf8d051e --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-mode-a.xht @@ -0,0 +1,60 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-mode with vector image</title> + <link href="mailto:ethlin@mozilla.com" rel="author" title="Ethan Lin" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#propdef-mask-mode" rel="help" /> + <link href="reference/mask-mode-ref.xht" rel="match" /> + <meta content="Test checks that mask an SVG image referenced by mask-image is correct with different mask mode." name="assert" /> + <style type="text/css"> + div { + background-color: blue; + position: absolute; + margin: 0px; + padding: 0px; + width: 100px; + height: 100px; + top: 10px; + } + + div.auto { + left: 10px; + mask-mode: match-source; + mask-image: url(support/blue-100x100.svg); + } + + div.alpha { + left: 120px; + mask-mode: alpha; + mask-image: url(support/blue-100x100.svg); + } + + div.luminance1 { + left: 230px; + mask-mode: luminance; + mask-image: url(support/blue-100x100.svg); + } + + div.luminance2 { + left: 340px; + mask-mode: luminance; + mask-image: url(support/red-100x100.svg); + } + + div.luminance3 { + left: 450px; + mask-mode: luminance; + mask-image: url(support/green-100x100.svg); + } + </style> + </head> + <body> + <div class="auto"></div> + <div class="alpha"></div> + <div class="luminance1"></div> + <div class="luminance2"></div> + <div class="luminance3"></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-mode-b.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-mode-b.xht new file mode 100644 index 00000000000..6e68991fab6 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-mode-b.xht @@ -0,0 +1,61 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-mode with raster image</title> + <link href="mailto:ethlin@mozilla.com" rel="author" title="Ethan Lin" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#propdef-mask-mode" rel="help" /> + <link href="reference/mask-mode-ref.xht" rel="match" /> + <meta content="Test checks that mask a PNG image referenced by mask-image is correct with different mask mode." name="assert" /> + <style type="text/css"> + div { + background-color: blue; + position: absolute; + margin: 0px; + padding: 0px; + width: 100px; + height: 100px; + top: 10px; + } + + div.auto { + left: 10px; + mask-mode: match-source; + mask-image: url(support/blue-100x100.png); + } + + div.alpha { + left: 120px; + mask-mode: alpha; + mask-image: url(support/blue-100x100.png); + } + + div.luminance1 { + left: 230px; + mask-mode: luminance; + mask-image: url(support/blue-100x100.png); + } + + div.luminance2 { + left: 340px; + mask-mode: luminance; + mask-image: url(support/red-100x100.png); + } + + div.luminance3 { + left: 450px; + mask-mode: luminance; + mask-image: url(support/green-100x100.png); + } + </style> + </head> + <body> + <div class="auto"></div> + <div class="alpha"></div> + <div class="luminance1"></div> + <div class="luminance2"></div> + <div class="luminance3"></div> + + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-origin-1.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-origin-1.xht new file mode 100644 index 00000000000..de38c342d61 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-origin-1.xht @@ -0,0 +1,48 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-origin: mask positioning area</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-origin" rel="help" /> + <link href="reference/mask-origin-1-ref.xht" rel="match" /> + <meta content="Test checks whether setting mask position area works correctly or not." name="assert" /> + <style type="text/css"> + div.outer { + border: 1px solid black; + width: 100px; + height: 100px; + } + + div.inner { + /* + * content box: 60 x 60 + * padding box: 72 x 78 + * border box: 80 x 90 + * margin box: 86 x 94 + */ + margin: 1px 2px 3px 4px; + border: solid transparent; + border-width: 8px 2px 4px 6px; + padding: 6px 9px 12px 3px; + width: 60px; + height: 60px; + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-position: left top; + } + + #border { mask-origin: border-box; } + #padding { mask-origin: padding-box; } + #content { mask-origin: content-box; } + </style> + </head> + <body> + <div class="outer"><div class="inner"></div></div> + <div class="outer"><div id="border" class="inner"></div></div> + <div class="outer"><div id="padding" class="inner"></div></div> + <div class="outer"><div id="content" class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-origin-2.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-origin-2.xht new file mode 100644 index 00000000000..720b3ecbd48 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-origin-2.xht @@ -0,0 +1,77 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-origin: mask positioning area</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-origin" rel="help" /> + <link href="reference/mask-origin-2-ref.xht" rel="match" /> + <meta content="Test checks whether setting mask origin to margin-box works correctly or not." name="assert" /> + <style type="text/css"> + div.outer { + border: 1px solid black; + width: 125px; + height: 125px; + } + + div.inner { + /* + * content box: 60 x 60 + * padding box: 72 x 78 + * border box: 80 x 90 + * margin box: 86 x 94 + */ + margin: 1px 2px 3px 4px; + border: solid red; + border-width: 8px 2px 4px 6px; + padding: 6px 9px 12px 3px; + width: 60px; + height: 60px; + position: relative; + background-color: blue; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-origin: margin-box; + } + + div.overflow { + position: absolute; + left: -10px; + top: -9px; + border: solid transparent; + border-width: 15px 13px 19px 13px; + width: 60px; + height: 60px; + background-color: purple; + } + + #pos-left-auto { mask-position: left; } + #pos-left-bottom { mask-position: left bottom; } + #pos-right-top { mask-position: right top; } + #pos-right-bottom { mask-position: right bottom; } + </style> + </head> + <body> + <div class="outer"> + <div id="pos-left-auto" class="inner"> + <div class="overflow"></div> + </div> + </div> + <div class="outer"> + <div id="pos-left-bottom" class="inner"> + <div class="overflow"></div> + </div> + </div> + <div class="outer"> + <div id="pos-right-top" class="inner"> + <div class="overflow"></div> + </div> + </div> + <div class="outer"> + <div id="pos-right-bottom" class="inner"> + <div class="overflow"></div> + </div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-1a.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-1a.xht new file mode 100644 index 00000000000..6650890fbcc --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-1a.xht @@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help" /> + <link href="reference/mask-position-1-ref.xht" rel="match" /> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + div.outer { + border: 1px solid black; + } + + div.inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + + #inner1 { mask-position: right 20% bottom 70%; } + #inner2 { mask-position: bottom 70% right 20%; } + #inner3 { mask-position: right 30px bottom 25px; } + #inner4 { mask-position: bottom 25px right 30px; } + </style> + </head> + <body> + <div class="outer"><div id="inner1" class="inner"></div></div> + <div class="outer"><div id="inner2" class="inner"></div></div> + <div class="outer"><div id="inner3" class="inner"></div></div> + <div class="outer"><div id="inner4" class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-1b.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-1b.xht new file mode 100644 index 00000000000..ac31c5a6d7d --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-1b.xht @@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help" /> + <link href="reference/mask-position-1-ref.xht" rel="match" /> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + div.outer { + border: 1px solid black; + } + + div.inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + + #inner1 { mask-position: left 40px top 15px; } + #inner2 { mask-position: top 30% left 80%; } + #inner3 { mask-position: left 20px top 25px } + #inner4 { mask-position: top 25px left 20px; } + </style> + </head> + <body> + <div class="outer"><div id="inner1" class="inner"></div></div> + <div class="outer"><div id="inner2" class="inner"></div></div> + <div class="outer"><div id="inner3" class="inner"></div></div> + <div class="outer"><div id="inner4" class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-1c.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-1c.xht new file mode 100644 index 00000000000..b236ba8078e --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-1c.xht @@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help" /> + <link href="reference/mask-position-1-ref.xht" rel="match" /> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + div.outer { + border: 1px solid black; + } + + div.inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + + #inner1 { mask-position: left 80% bottom 70%; } + #inner2 { mask-position: right 20% top 30%; } + #inner3 { mask-position: bottom 50% left 40%; } + #inner4 { mask-position: right 60% top 50%; } + </style> + </head> + <body> + <div class="outer"><div id="inner1" class="inner"></div></div> + <div class="outer"><div id="inner2" class="inner"></div></div> + <div class="outer"><div id="inner3" class="inner"></div></div> + <div class="outer"><div id="inner4" class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-2a.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-2a.xht new file mode 100644 index 00000000000..737788278d3 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-2a.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help" /> + <link href="reference/mask-position-2-ref.xht" rel="match" /> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-position: left 40% bottom 60%; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-2b.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-2b.xht new file mode 100644 index 00000000000..321407a4149 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-2b.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help" /> + <link href="reference/mask-position-2-ref.xht" rel="match" /> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-position: 40% 40%; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-3a.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-3a.xht new file mode 100644 index 00000000000..08ca0c86104 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-3a.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help" /> + <link href="reference/mask-position-3-ref.xht" rel="match" /> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-position: center bottom 80%; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-3b.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-3b.xht new file mode 100644 index 00000000000..81fc85d65a5 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-3b.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help" /> + <link href="reference/mask-position-3-ref.xht" rel="match" /> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-position: center 20%; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-4a.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-4a.xht new file mode 100644 index 00000000000..6a9e515e330 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-4a.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help" /> + <link href="reference/mask-position-4-ref.xht" rel="match" /> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-position: left center; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-4b.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-4b.xht new file mode 100644 index 00000000000..b03ce213f53 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-4b.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help" /> + <link href="reference/mask-position-4-ref.xht" rel="match" /> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-position: left; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-4c.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-4c.xht new file mode 100644 index 00000000000..6fb849974d0 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-4c.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help" /> + <link href="reference/mask-position-4-ref.xht" rel="match" /> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-position: left bottom 50%; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-4d.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-4d.xht new file mode 100644 index 00000000000..9cd8a9e7e24 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-4d.xht @@ -0,0 +1,32 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help" /> + <link href="reference/mask-position-4-ref.xht" rel="match" /> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask: url(support/50x50-opaque-blue.svg) left no-repeat; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-5.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-5.xht new file mode 100644 index 00000000000..3ed9ab50ac1 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-5.xht @@ -0,0 +1,35 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help" /> + <link href="reference/mask-position-5-ref.xht" rel="match" /> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 120px; + height: 120px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-position: top, bottom; + mask-repeat: no-repeat, no-repeat; + mask-image: url(support/50x50-opaque-blue.svg), + url(support/50x50-opaque-blue.svg); + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-6.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-6.xht new file mode 100644 index 00000000000..91f12558659 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-6.xht @@ -0,0 +1,50 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help" /> + <link href="reference/mask-position-6-ref.xht" rel="match" /> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + .outer { + border: 1px solid black; + } + + .outer > div { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + + #inner1 { + mask-position: left 20px bottom; + } + + #inner2 { + mask-position: left 40% bottom; + } + + #inner3 { + mask-position: right 60% bottom; + } + + #inner4 { + mask-position: right 30px bottom; + } + </style> + </head> + <body> + <div class="outer"><div id="inner1"></div></div> + <div class="outer"><div id="inner2"></div></div> + <div class="outer"><div id="inner3"></div></div> + <div class="outer"><div id="inner4"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-7.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-7.xht new file mode 100644 index 00000000000..fabd6f954d9 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-position-7.xht @@ -0,0 +1,50 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: mask positioning</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-position" rel="help" /> + <link href="reference/mask-position-7-ref.xht" rel="match" /> + <meta content="Test checks whether positioning mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 100px; + height: 100px; + } + + .outer { + border: 1px solid black; + } + + .outer > div { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + } + + #inner1 { + mask-position: right top 40%; + } + + #inner2 { + mask-position: right top 20px; + } + + #inner3 { + mask-position: right bottom 60%; + } + + #inner4 { + mask-position: right bottom 30px; + } + </style> + </head> + <body> + <div class="outer"><div id="inner1"></div></div> + <div class="outer"><div id="inner2"></div></div> + <div class="outer"><div id="inner3"></div></div> + <div class="outer"><div id="inner4"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-repeat-1.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-repeat-1.xht new file mode 100644 index 00000000000..8b55894dfe8 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-repeat-1.xht @@ -0,0 +1,47 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-repeat: repeated mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-repeat" rel="help" /> + <link href="reference/mask-repeat-1-ref.xht" rel="match" /> + <meta content="Test checks whether repeated mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 128px; + height: 128px; + } + + div.outer { + border: 1px solid black; + } + + div.inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + } + + #no-repeat { + mask-repeat: no-repeat no-repeat; + } + #repeat { + mask-repeat: repeat repeat; + } + #repeat-x { + mask-repeat: repeat no-repeat; + } + #repeat-y { + mask-repeat: no-repeat repeat; + } + </style> + </head> + <body> + <div class="outer"><div class="inner"></div></div> + <div class="outer"><div id="no-repeat" class="inner"></div></div> + <div class="outer"><div id="repeat" class="inner"></div></div> + <div class="outer"><div id="repeat-x" class="inner"></div></div> + <div class="outer"><div id="repeat-y" class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-repeat-2.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-repeat-2.xht new file mode 100644 index 00000000000..c448eaba2f8 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-repeat-2.xht @@ -0,0 +1,42 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-repeat: repeated mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-repeat" rel="help" /> + <link href="reference/mask-repeat-2-ref.xht" rel="match" /> + <meta content="Test checks whether repeated mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 128px; + height: 128px; + } + + div.outer { + border: 1px solid black; + } + + div.inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + } + + #space { + mask-repeat: space; + } + #space-x { + mask-repeat: space no-repeat; + } + #space-y { + mask-repeat: no-repeat space; + } + </style> + </head> + <body> + <div class="outer"><div id="space" class="inner"></div></div> + <div class="outer"><div id="space-x" class="inner"></div></div> + <div class="outer"><div id="space-y" class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-repeat-3.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-repeat-3.xht new file mode 100644 index 00000000000..66bff9aa5dc --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-repeat-3.xht @@ -0,0 +1,42 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-repeat: repeated mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-repeat" rel="help" /> + <link href="reference/mask-repeat-3-ref.xht" rel="match" /> + <meta content="Test checks whether repeated mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 150px; + height: 150px; + } + + div.outer { + border: 1px solid black; + } + + div.inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + } + + #round { + mask-repeat: round; + } + #round-x { + mask-repeat: round no-repeat; + } + #round-y { + mask-repeat: no-repeat round; + } + </style> + </head> + <body> + <div class="outer"><div id="round" class="inner"></div></div> + <div class="outer"><div id="round-x" class="inner"></div></div> + <div class="outer"><div id="round-y" class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-auto-auto.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-auto-auto.xht new file mode 100644 index 00000000000..fff86b75147 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-auto-auto.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-auto-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: auto auto; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-auto-length.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-auto-length.xht new file mode 100644 index 00000000000..dc565b5324c --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-auto-length.xht @@ -0,0 +1,33 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-auto-length-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner { + width: 64px; + height: 128px; + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: auto 20px; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-auto-percent.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-auto-percent.xht new file mode 100644 index 00000000000..800a2ead05e --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-auto-percent.xht @@ -0,0 +1,33 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-auto-length-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner { + width: 64px; + height: 128px; + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: auto 15.625%; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-auto.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-auto.xht new file mode 100644 index 00000000000..4abc69fcb28 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-auto.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-auto-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: auto; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-contain-clip-border.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-contain-clip-border.xht new file mode 100644 index 00000000000..0818e89efa7 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-contain-clip-border.xht @@ -0,0 +1,36 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-contain-clip-border-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner { + border: 20px solid transparent; + width: 24px; + height: 88px; + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-clip: border-box; + mask-origin: border-box; + mask-size: contain; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-contain-clip-padding.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-contain-clip-padding.xht new file mode 100644 index 00000000000..f36f7885bd5 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-contain-clip-padding.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-contain-clip-padding-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner { + background-color: purple; + border: 20px solid transparent; + width: 24px; + height: 88px; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-clip: padding-box; + mask-origin: padding-box; + mask-size: contain; + } + </style> + </head> + <body> + <div id="outer"><div id="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-contain-position-fifty-fifty.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-contain-position-fifty-fifty.xht new file mode 100644 index 00000000000..0bda2a2381a --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-contain-position-fifty-fifty.xht @@ -0,0 +1,35 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-contain-position-fifty-fifty-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: contain; + mask-position: 50% 50%; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-contain.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-contain.xht new file mode 100644 index 00000000000..da3de2e3c30 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-contain.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-contain-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 10px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: contain; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-cover.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-cover.xht new file mode 100644 index 00000000000..a40fd410167 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-cover.xht @@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-cover-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + #outer { + border: 10px solid black; + width: 64px; + height: 128px; + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-origin: content-box; + mask-clip: content-box; + mask-size: cover; + } + </style> + </head> + <body> + <div id="outer"></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-length-auto.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-length-auto.xht new file mode 100644 index 00000000000..7ffa4a86732 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-length-auto.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-length-length-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x100-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: 32px auto; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-length-length.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-length-length.xht new file mode 100644 index 00000000000..1f57211cb4c --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-length-length.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-length-length-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x100-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: 32px 64px; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-length-percent.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-length-percent.xht new file mode 100644 index 00000000000..c5e564e08c0 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-length-percent.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-length-percent-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x100-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: 16px 25%; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-length.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-length.xht new file mode 100644 index 00000000000..cbdbdcc4d4f --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-length.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-length-length-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x100-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: 32px; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-percent-auto.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-percent-auto.xht new file mode 100644 index 00000000000..731af666789 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-percent-auto.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-percent-percent-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: 50% auto; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-percent-length.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-percent-length.xht new file mode 100644 index 00000000000..f120707ecaa --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-percent-length.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-percent-percent-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: 50% 32px; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-percent-percent-stretch.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-percent-percent-stretch.xht new file mode 100644 index 00000000000..e2e89244e67 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-percent-percent-stretch.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-percent-percent-stretch-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 60px; + height: 120px; + } + + #outer { + border: 10px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/transparent-100x50-blue-100x50.svg); + mask-repeat: no-repeat; + mask-size: 100% 100%; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-percent-percent.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-percent-percent.xht new file mode 100644 index 00000000000..8dcd3fdb533 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-percent-percent.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-percent-percent-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: 50% 25%; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-percent.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-percent.xht new file mode 100644 index 00000000000..3d3a2ec1e01 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/mask-size-percent.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <link href="https://www.w3.org/TR/css-masking-1/#the-mask-size" rel="help" /> + <link href="reference/mask-size-percent-percent-ref.xht" rel="match" /> + <meta content="Test checks whether sizing mask layer works correctly or not." name="assert" /> + <style type="text/css"> + div { + width: 64px; + height: 128px; + } + + #outer { + border: 1px solid black; + } + + #inner { + background-color: purple; + mask-image: url(support/50x50-opaque-blue.svg); + mask-repeat: no-repeat; + mask-size: 50%; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-clip-1-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-clip-1-ref.xht new file mode 100644 index 00000000000..6f6ddb057b6 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-clip-1-ref.xht @@ -0,0 +1,42 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS mask-clip reference</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + div { + position: absolute; + top: 10px; + background-color: purple; + } + + div.border { + left: 10px; + margin: 1px 4px; + width: 60px; + height: 25px; + } + + div.padding { + left: 110px; + margin: 9px 10px; + width: 52px; + height: 17px; + } + + div.content { + left: 210px; + margin: 15px 13px; + width: 40px; + height: 11px; + } + </style> + </head> + <body> + <div class="color border"></div> + <div class="color padding"></div> + <div class="color content"></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-image-1-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-image-1-ref.xht new file mode 100644 index 00000000000..c70223c52a5 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-image-1-ref.xht @@ -0,0 +1,19 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-image: mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + div { + background-color: purple; + width: 100px; + height: 50px; + } + </style> + </head> + <body> + <div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-image-2-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-image-2-ref.xht new file mode 100644 index 00000000000..56fc08e7e61 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-image-2-ref.xht @@ -0,0 +1,20 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-image: mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + div { + background-image: linear-gradient(rgba(128,0,128,0), rgba(128,0,128,1)); + width: 100px; + height: 100px; + } + </style> + </head> + <body> + <div></div> + <div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-mode-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-mode-ref.xht new file mode 100644 index 00000000000..11f13f56ac6 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-mode-ref.xht @@ -0,0 +1,52 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS mask-mode reference</title> + <link href="mailto:ethlin@mozilla.com" rel="author" title="Ethan Lin" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + div { + background-color: white; + position: absolute; + margin: 0px; + padding: 0px; + width: 100px; + height: 100px; + top: 10px; + } + + div.auto { + left: 10px; + background-image: url(support/blue-100x100.svg); + } + + div.alpha { + left: 120px; + background-image: url(support/blue-100x100.svg); + } + + div.luminance1 { + left: 230px; + background-image: url(support/blue-luminance-100x100.svg); + } + + div.luminance2 { + left: 340px; + background-image: url(support/red-luminance-100x100.svg); + } + + div.luminance3 { + left: 450px; + background-image: url(support/green-luminance-100x100.svg); + } + </style> + </head> + <body> + <div class="auto"></div> + <div class="alpha"></div> + <div class="luminance1"></div> + <div class="luminance2"></div> + <div class="luminance3"></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-origin-1-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-origin-1-ref.xht new file mode 100644 index 00000000000..49786aafa02 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-origin-1-ref.xht @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-origin: mask positioning area</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + div.outer { + border: 1px solid black; + width: 100px; + height: 100px; + position: relative; + } + + div.inner { + width: 50px; + height: 50px; + background-color: purple; + position: absolute; + } + + #border { left: 4px; top: 1px; } + #padding { left: 10px; top: 9px; } + #content { left: 13px; top: 15px; } + </style> + </head> + <body> + <div class="outer"><div id="border" class="inner"></div></div> + <div class="outer"><div id="border" class="inner"></div></div> + <div class="outer"><div id="padding" class="inner"></div></div> + <div class="outer"><div id="content" class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-origin-2-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-origin-2-ref.xht new file mode 100644 index 00000000000..adbc9aaa411 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-origin-2-ref.xht @@ -0,0 +1,35 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-origin: mask positioning area</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + div.outer { + border: 1px solid black; + width: 125px; + height: 125px; + position: relative; + } + + div.inner { + width: 50px; + height: 50px; + background-color: purple; + position: absolute; + } + + #pos-left-auto { left: 0px; top: 22px; } + #pos-left-bottom { left: 0px; top: 44px; } + #pos-right-top { left: 36px; top: 0px; } + #pos-right-bottom { left: 36px; top: 44px; } + </style> + </head> + <body> + <div class="outer"><div id="pos-left-auto" class="inner"></div></div> + <div class="outer"><div id="pos-left-bottom" class="inner"></div></div> + <div class="outer"><div id="pos-right-top" class="inner"></div></div> + <div class="outer"><div id="pos-right-bottom" class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-position-1-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-position-1-ref.xht new file mode 100644 index 00000000000..b0959531e00 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-position-1-ref.xht @@ -0,0 +1,33 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: position mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + div.outer { + position: relative; + width: 100px; + height: 100px; + border: 1px solid black; + } + + div.inner { + position: absolute; + width: 50px; + height: 50px; + background-color: purple; + } + + #inner1 { right: 10px; bottom: 35px; } + #inner2 { right: 30px; bottom: 25px; } + </style> + </head> + <body> + <div class="outer"><div id="inner1" class="inner"></div></div> + <div class="outer"><div id="inner1" class="inner"></div></div> + <div class="outer"><div id="inner2" class="inner"></div></div> + <div class="outer"><div id="inner2" class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-position-2-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-position-2-ref.xht new file mode 100644 index 00000000000..dbdd94e0352 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-position-2-ref.xht @@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: position mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 100px; + height: 100px; + } + + #inner { + margin-left: 20px; + margin-top: 20px; + width: 50px; + height: 50px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-position-3-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-position-3-ref.xht new file mode 100644 index 00000000000..429b39f8343 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-position-3-ref.xht @@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: position mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 100px; + height: 100px; + } + + #inner { + margin-left: 25px; + margin-top: 10px; + width: 50px; + height: 50px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-position-4-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-position-4-ref.xht new file mode 100644 index 00000000000..e83d824ba36 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-position-4-ref.xht @@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: position mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 100px; + height: 100px; + } + + #inner { + margin-left: 0px; + margin-top: 25px; + width: 50px; + height: 50px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-position-5-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-position-5-ref.xht new file mode 100644 index 00000000000..2c8799c0f19 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-position-5-ref.xht @@ -0,0 +1,38 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: position mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 120px; + height: 120px; + } + + #inner1 { + margin-left: 35px; + margin-top: 0px; + width: 50px; + height: 50px; + background-color: purple; + } + + #inner2 { + margin-left: 35px; + margin-top: 20px; + width: 50px; + height: 50px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner1"></div> + <div id="inner2"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-position-6-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-position-6-ref.xht new file mode 100644 index 00000000000..2f089bcf2bf --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-position-6-ref.xht @@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: position mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + .outer { + border: 1px solid black; + width: 100px; + height: 100px; + } + + .inner { + margin-left: 20px; + margin-top: 50px; + width: 50px; + height: 50px; + background-color: purple; + } + </style> + </head> + <body> + <div class="outer"><div class="inner"></div></div> + <div class="outer"><div class="inner"></div></div> + <div class="outer"><div class="inner"></div></div> + <div class="outer"><div class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-position-7-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-position-7-ref.xht new file mode 100644 index 00000000000..e1479789d4b --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-position-7-ref.xht @@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-position: position mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + .outer { + border: 1px solid black; + width: 100px; + height: 100px; + } + + .inner { + margin-left: 50px; + margin-top: 20px; + width: 50px; + height: 50px; + background-color: purple; + } + </style> + </head> + <body> + <div class="outer"><div class="inner"></div></div> + <div class="outer"><div class="inner"></div></div> + <div class="outer"><div class="inner"></div></div> + <div class="outer"><div class="inner"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-repeat-1-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-repeat-1-ref.xht new file mode 100644 index 00000000000..2ad4cff79d3 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-repeat-1-ref.xht @@ -0,0 +1,45 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-repeat: repeated mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + div.outer { + width: 128px; + height: 128px; + position: relative; + border: 1px solid black; + } + + div.inner { + width: 50px; + height: 50px; + position: absolute; + background-color: purple; + } + + #pos-top-left { left: 0; top: 0; } + #pos-top-right { right: 0; top: 0; } + #pos-bottom-left { left: 0; bottom: 0; } + #pos-bottom-right { right: 0; bottom: 0; } + </style> + </head> + <body> + <div class="outer"> + <div id="pos-top-left" class="inner"></div> + <div id="pos-top-right" class="inner"></div> + <div id="pos-bottom-left" class="inner"></div> + <div id="pos-bottom-right" class="inner"></div> + </div> + <div class="outer"> + <div id="pos-top-left" class="inner"></div> + <div id="pos-top-right" class="inner"></div> + </div> + <div class="outer"> + <div id="pos-top-left" class="inner"></div> + <div id="pos-bottom-left" class="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-repeat-2-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-repeat-2-ref.xht new file mode 100644 index 00000000000..2ad4cff79d3 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-repeat-2-ref.xht @@ -0,0 +1,45 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-repeat: repeated mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + div.outer { + width: 128px; + height: 128px; + position: relative; + border: 1px solid black; + } + + div.inner { + width: 50px; + height: 50px; + position: absolute; + background-color: purple; + } + + #pos-top-left { left: 0; top: 0; } + #pos-top-right { right: 0; top: 0; } + #pos-bottom-left { left: 0; bottom: 0; } + #pos-bottom-right { right: 0; bottom: 0; } + </style> + </head> + <body> + <div class="outer"> + <div id="pos-top-left" class="inner"></div> + <div id="pos-top-right" class="inner"></div> + <div id="pos-bottom-left" class="inner"></div> + <div id="pos-bottom-right" class="inner"></div> + </div> + <div class="outer"> + <div id="pos-top-left" class="inner"></div> + <div id="pos-top-right" class="inner"></div> + </div> + <div class="outer"> + <div id="pos-top-left" class="inner"></div> + <div id="pos-bottom-left" class="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-repeat-3-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-repeat-3-ref.xht new file mode 100644 index 00000000000..16e88e3792e --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-repeat-3-ref.xht @@ -0,0 +1,40 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-repeat: repeated mask layer image</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + div.outer { + width: 150px; + height: 150px; + border: 1px solid black; + } + + .color { + background-color: purple; + } + + #round { + width: 150px; + height: 150px; + } + + #round-x { + width: 150px; + height: 50px; + } + + #round-y { + width: 50px; + height: 150px; + } + </style> + </head> + <body> + <div class="outer"><div id="round" class="color"></div></div> + <div class="outer"><div id="round-x" class="color"></div></div> + <div class="outer"><div id="round-y" class="color"></div></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-size-auto-length-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-size-auto-length-ref.xht new file mode 100644 index 00000000000..f1e26917112 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-size-auto-length-ref.xht @@ -0,0 +1,27 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner { + width: 20px; + height: 20px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-size-auto-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-size-auto-ref.xht new file mode 100644 index 00000000000..33ee1a3064f --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-size-auto-ref.xht @@ -0,0 +1,27 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner { + width: 50px; + height: 50px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-size-contain-clip-border-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-size-contain-clip-border-ref.xht new file mode 100644 index 00000000000..45aa0b2ff9b --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-size-contain-clip-border-ref.xht @@ -0,0 +1,27 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner { + width: 64px; + height: 64px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-size-contain-clip-padding-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-size-contain-clip-padding-ref.xht new file mode 100644 index 00000000000..c55229a8464 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-size-contain-clip-padding-ref.xht @@ -0,0 +1,35 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner { + border: 20px solid white; + width: 24px; + height: 88px; + } + + #innermost { + width: 24px; + height: 24px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"> + <div id="innermost"></div> + </div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-size-contain-position-fifty-fifty-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-size-contain-position-fifty-fifty-ref.xht new file mode 100644 index 00000000000..ff52b22d438 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-size-contain-position-fifty-fifty-ref.xht @@ -0,0 +1,33 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner1 { + width: 64px; + height: 32px; + } + + #inner2 { + width: 64px; + height: 64px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner1"></div> + <div id="inner2"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-size-contain-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-size-contain-ref.xht new file mode 100644 index 00000000000..90104654696 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-size-contain-ref.xht @@ -0,0 +1,27 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + #outer { + border: 10px solid black; + width: 64px; + height: 128px; + } + + #inner { + width: 64px; + height: 64px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-size-cover-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-size-cover-ref.xht new file mode 100644 index 00000000000..e869b34f7a6 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-size-cover-ref.xht @@ -0,0 +1,21 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + #outer { + border: 10px solid transparent; + width: 64px; + height: 128px; + background-clip: content-box; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"></div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-size-length-length-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-size-length-length-ref.xht new file mode 100644 index 00000000000..63e175601db --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-size-length-length-ref.xht @@ -0,0 +1,27 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner { + width: 32px; + height: 64px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-size-length-percent-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-size-length-percent-ref.xht new file mode 100644 index 00000000000..e2c20794d3e --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-size-length-percent-ref.xht @@ -0,0 +1,27 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner { + width: 16px; + height: 32px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-size-percent-percent-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-size-percent-percent-ref.xht new file mode 100644 index 00000000000..a8e19318904 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-size-percent-percent-ref.xht @@ -0,0 +1,27 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + #outer { + border: 1px solid black; + width: 64px; + height: 128px; + } + + #inner { + width: 32px; + height: 32px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-size-percent-percent-stretch-ref.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-size-percent-percent-stretch-ref.xht new file mode 100644 index 00000000000..049a065b979 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/mask-size-percent-percent-stretch-ref.xht @@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title>CSS Masking: mask-size: mask layer size</title> + <link href="mailto:aschen@mozilla.com" rel="author" title="Astley Chen" /> + <link href="https://www.mozilla.org" rel="author" title="Mozilla" /> + <style type="text/css"> + div { + width: 60px; + height: 120px; + } + + #outer { + border: 10px solid black; + } + + #inner { + height: 60px; + background-color: purple; + } + </style> + </head> + <body> + <div id="outer"> + <div id="inner"></div> + </div> + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/50x100-opaque-blue.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/50x100-opaque-blue.svg new file mode 100644 index 00000000000..0ce8f599731 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/50x100-opaque-blue.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="50" height="100"> + <rect x="0" y="0" width="50" height="100" fill="blue" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/50x50-opaque-blue.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/50x50-opaque-blue.svg new file mode 100644 index 00000000000..ac194ee3473 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/50x50-opaque-blue.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50"> + <rect x="0" y="0" width="50" height="50" fill="blue" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/blue-100x100.png b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/blue-100x100.png Binary files differnew file mode 100644 index 00000000000..3b72d5ce53c --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/blue-100x100.png diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/blue-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/blue-100x100.svg new file mode 100644 index 00000000000..ebe8fa73aee --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/blue-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="blue" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/blue-100x50-transparent-100x50.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/blue-100x50-transparent-100x50.svg index a79d9685c94..2ed03935634 100644 --- a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/blue-100x50-transparent-100x50.svg +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/blue-100x50-transparent-100x50.svg @@ -1,4 +1,4 @@ <svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <rect x="0" y="0" width="100%" height="50%" fill="blue" fill-opacity="0"/> - <rect x="0" y="50" width="100%" height="50%" fill="blue" fill-opacity="1"/> + <rect x="0" y="50%" width="100%" height="50%" fill="blue" fill-opacity="1"/> </svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/blue-luminance-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/blue-luminance-100x100.svg new file mode 100644 index 00000000000..3f8e0341e4a --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/blue-luminance-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="RGB(238,238,255)" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/green-100x100.png b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/green-100x100.png Binary files differnew file mode 100644 index 00000000000..d65838b7f02 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/green-100x100.png diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/green-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/green-100x100.svg new file mode 100644 index 00000000000..d792713591e --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/green-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="lime" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/green-luminance-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/green-luminance-100x100.svg new file mode 100644 index 00000000000..c33436ed43c --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/green-luminance-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="RGB(73,73,255)" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/mask-half-transparent-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/mask-half-transparent-100x100.svg new file mode 100644 index 00000000000..2abd94deec4 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/mask-half-transparent-100x100.svg @@ -0,0 +1,8 @@ +<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> + <defs> + <mask id="mask" mask-type="alpha"> + <rect x="0" y="0" width="100" height="50" fill-opacity="1"/> + <rect x="0" y="50" width="100" height="50" fill-opacity="0"/> + </mask> + </defs> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/red-100x100.png b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/red-100x100.png Binary files differnew file mode 100644 index 00000000000..43b8e542a92 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/red-100x100.png diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/red-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/red-100x100.svg new file mode 100644 index 00000000000..175c05f28f2 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/red-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="red" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/red-luminance-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/red-luminance-100x100.svg new file mode 100644 index 00000000000..274905d6b90 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/red-luminance-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="RGB(201,201,255)" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/transparent-100x50-blue-100x50.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/transparent-100x50-blue-100x50.svg index c4017557889..81d59b1bcf1 100644 --- a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/transparent-100x50-blue-100x50.svg +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reference/support/transparent-100x50-blue-100x50.svg @@ -1,4 +1,4 @@ <svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <rect x="0" y="0" width="100%" height="50%" fill="blue" fill-opacity="1"/> - <rect x="0" y="50" width="100%" height="50%" fill="blue" fill-opacity="0"/> + <rect x="0" y="50%" width="100%" height="50%" fill="blue" fill-opacity="0"/> </svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reftest-toc.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reftest-toc.xht index 4cb744babb6..3745e30d477 100644 --- a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reftest-toc.xht +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reftest-toc.xht @@ -480,6 +480,14 @@ <td rowspan="1"></td> </tr> </tbody> + <tbody id="mask-clip-1" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-clip: clip mask image"> + <a href="mask-clip-1.xht">mask-clip-1</a></td> + <td><a href="reference/mask-clip-1-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> <tbody id="mask-composite-1a" class=""> <tr> <td rowspan="1" title="CSS Masking: mask-composite: compose vector image"> @@ -512,6 +520,350 @@ <td rowspan="1"></td> </tr> </tbody> + <tbody id="mask-image-1a" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-image: mask layer image"> + <a href="mask-image-1a.xht">mask-image-1a</a></td> + <td><a href="reference/mask-image-1-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-image-1b" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-image: mask layer image"> + <a href="mask-image-1b.xht">mask-image-1b</a></td> + <td><a href="reference/mask-image-1-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-image-1c" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-image: mask layer image"> + <a href="mask-image-1c.xht">mask-image-1c</a></td> + <td><a href="reference/mask-image-1-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-image-2" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-image: mask layer image"> + <a href="mask-image-2.xht">mask-image-2</a></td> + <td><a href="reference/mask-image-2-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-mode-a" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-mode with vector image"> + <a href="mask-mode-a.xht">mask-mode-a</a></td> + <td><a href="reference/mask-mode-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-mode-b" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-mode with raster image"> + <a href="mask-mode-b.xht">mask-mode-b</a></td> + <td><a href="reference/mask-mode-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-origin-1" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-origin: mask positioning area"> + <a href="mask-origin-1.xht">mask-origin-1</a></td> + <td><a href="reference/mask-origin-1-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-origin-2" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-origin: mask positioning area"> + <a href="mask-origin-2.xht">mask-origin-2</a></td> + <td><a href="reference/mask-origin-2-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-1a" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-1a.xht">mask-position-1a</a></td> + <td><a href="reference/mask-position-1-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-1b" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-1b.xht">mask-position-1b</a></td> + <td><a href="reference/mask-position-1-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-1c" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-1c.xht">mask-position-1c</a></td> + <td><a href="reference/mask-position-1-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-2a" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-2a.xht">mask-position-2a</a></td> + <td><a href="reference/mask-position-2-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-2b" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-2b.xht">mask-position-2b</a></td> + <td><a href="reference/mask-position-2-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-3a" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-3a.xht">mask-position-3a</a></td> + <td><a href="reference/mask-position-3-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-3b" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-3b.xht">mask-position-3b</a></td> + <td><a href="reference/mask-position-3-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-4a" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-4a.xht">mask-position-4a</a></td> + <td><a href="reference/mask-position-4-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-4b" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-4b.xht">mask-position-4b</a></td> + <td><a href="reference/mask-position-4-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-4c" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-4c.xht">mask-position-4c</a></td> + <td><a href="reference/mask-position-4-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-4d" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-4d.xht">mask-position-4d</a></td> + <td><a href="reference/mask-position-4-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-5" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-5.xht">mask-position-5</a></td> + <td><a href="reference/mask-position-5-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-6" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-6.xht">mask-position-6</a></td> + <td><a href="reference/mask-position-6-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-position-7" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-position: mask positioning"> + <a href="mask-position-7.xht">mask-position-7</a></td> + <td><a href="reference/mask-position-7-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-repeat-1" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-repeat: repeated mask layer image"> + <a href="mask-repeat-1.xht">mask-repeat-1</a></td> + <td><a href="reference/mask-repeat-1-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-repeat-2" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-repeat: repeated mask layer image"> + <a href="mask-repeat-2.xht">mask-repeat-2</a></td> + <td><a href="reference/mask-repeat-2-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-repeat-3" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-repeat: repeated mask layer image"> + <a href="mask-repeat-3.xht">mask-repeat-3</a></td> + <td><a href="reference/mask-repeat-3-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-auto" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-auto.xht">mask-size-auto</a></td> + <td><a href="reference/mask-size-auto-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-auto-auto" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-auto-auto.xht">mask-size-auto-auto</a></td> + <td><a href="reference/mask-size-auto-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-auto-length" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-auto-length.xht">mask-size-auto-length</a></td> + <td><a href="reference/mask-size-auto-length-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-auto-percent" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-auto-percent.xht">mask-size-auto-percent</a></td> + <td><a href="reference/mask-size-auto-length-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-contain" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-contain.xht">mask-size-contain</a></td> + <td><a href="reference/mask-size-contain-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-contain-clip-border" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-contain-clip-border.xht">mask-size-contain-clip-border</a></td> + <td><a href="reference/mask-size-contain-clip-border-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-contain-clip-padding" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-contain-clip-padding.xht">mask-size-contain-clip-padding</a></td> + <td><a href="reference/mask-size-contain-clip-padding-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-contain-position-fifty-fifty" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-contain-position-fifty-fifty.xht">mask-size-contain-position-fifty-fifty</a></td> + <td><a href="reference/mask-size-contain-position-fifty-fifty-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-cover" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-cover.xht">mask-size-cover</a></td> + <td><a href="reference/mask-size-cover-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-length" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-length.xht">mask-size-length</a></td> + <td><a href="reference/mask-size-length-length-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-length-auto" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-length-auto.xht">mask-size-length-auto</a></td> + <td><a href="reference/mask-size-length-length-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-length-length" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-length-length.xht">mask-size-length-length</a></td> + <td><a href="reference/mask-size-length-length-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-length-percent" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-length-percent.xht">mask-size-length-percent</a></td> + <td><a href="reference/mask-size-length-percent-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-percent" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-percent.xht">mask-size-percent</a></td> + <td><a href="reference/mask-size-percent-percent-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-percent-auto" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-percent-auto.xht">mask-size-percent-auto</a></td> + <td><a href="reference/mask-size-percent-percent-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-percent-length" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-percent-length.xht">mask-size-percent-length</a></td> + <td><a href="reference/mask-size-percent-percent-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-percent-percent" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-percent-percent.xht">mask-size-percent-percent</a></td> + <td><a href="reference/mask-size-percent-percent-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> + <tbody id="mask-size-percent-percent-stretch" class=""> + <tr> + <td rowspan="1" title="CSS Masking: mask-size: mask layer size"> + <a href="mask-size-percent-percent-stretch.xht">mask-size-percent-percent-stretch</a></td> + <td><a href="reference/mask-size-percent-percent-stretch-ref.xht">=</a> </td> + <td rowspan="1"></td> + </tr> + </tbody> <tbody id="test-mask" class=""> <tr> <td rowspan="1" title="CSS Masking: mask-repeat:round repeat;"> diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reftest.list b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reftest.list index b07ea246fcb..6160e0edaf9 100644 --- a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reftest.list +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/reftest.list @@ -56,8 +56,52 @@ clip-rect-comma-003.xht == reference/clip-no-clipping-ref.xht clip-rect-comma-004.xht == reference/clip-no-clipping-ref.xht clip-rule-001.xht == reference/clip-rule-rectangle-border-ref.xht clip-rule-002.xht == reference/clip-rule-rectangle-border-ref.xht +mask-clip-1.xht == reference/mask-clip-1-ref.xht mask-composite-1a.xht == reference/mask-composite-1-ref.xht mask-composite-1b.xht == reference/mask-composite-1-ref.xht mask-composite-2a.xht == reference/mask-composite-2-ref.xht mask-composite-2b.xht == reference/mask-composite-2-ref.xht +mask-image-1a.xht == reference/mask-image-1-ref.xht +mask-image-1b.xht == reference/mask-image-1-ref.xht +mask-image-1c.xht == reference/mask-image-1-ref.xht +mask-image-2.xht == reference/mask-image-2-ref.xht +mask-mode-a.xht == reference/mask-mode-ref.xht +mask-mode-b.xht == reference/mask-mode-ref.xht +mask-origin-1.xht == reference/mask-origin-1-ref.xht +mask-origin-2.xht == reference/mask-origin-2-ref.xht +mask-position-1a.xht == reference/mask-position-1-ref.xht +mask-position-1b.xht == reference/mask-position-1-ref.xht +mask-position-1c.xht == reference/mask-position-1-ref.xht +mask-position-2a.xht == reference/mask-position-2-ref.xht +mask-position-2b.xht == reference/mask-position-2-ref.xht +mask-position-3a.xht == reference/mask-position-3-ref.xht +mask-position-3b.xht == reference/mask-position-3-ref.xht +mask-position-4a.xht == reference/mask-position-4-ref.xht +mask-position-4b.xht == reference/mask-position-4-ref.xht +mask-position-4c.xht == reference/mask-position-4-ref.xht +mask-position-4d.xht == reference/mask-position-4-ref.xht +mask-position-5.xht == reference/mask-position-5-ref.xht +mask-position-6.xht == reference/mask-position-6-ref.xht +mask-position-7.xht == reference/mask-position-7-ref.xht +mask-repeat-1.xht == reference/mask-repeat-1-ref.xht +mask-repeat-2.xht == reference/mask-repeat-2-ref.xht +mask-repeat-3.xht == reference/mask-repeat-3-ref.xht +mask-size-auto.xht == reference/mask-size-auto-ref.xht +mask-size-auto-auto.xht == reference/mask-size-auto-ref.xht +mask-size-auto-length.xht == reference/mask-size-auto-length-ref.xht +mask-size-auto-percent.xht == reference/mask-size-auto-length-ref.xht +mask-size-contain.xht == reference/mask-size-contain-ref.xht +mask-size-contain-clip-border.xht == reference/mask-size-contain-clip-border-ref.xht +mask-size-contain-clip-padding.xht == reference/mask-size-contain-clip-padding-ref.xht +mask-size-contain-position-fifty-fifty.xht == reference/mask-size-contain-position-fifty-fifty-ref.xht +mask-size-cover.xht == reference/mask-size-cover-ref.xht +mask-size-length.xht == reference/mask-size-length-length-ref.xht +mask-size-length-auto.xht == reference/mask-size-length-length-ref.xht +mask-size-length-length.xht == reference/mask-size-length-length-ref.xht +mask-size-length-percent.xht == reference/mask-size-length-percent-ref.xht +mask-size-percent.xht == reference/mask-size-percent-percent-ref.xht +mask-size-percent-auto.xht == reference/mask-size-percent-percent-ref.xht +mask-size-percent-length.xht == reference/mask-size-percent-percent-ref.xht +mask-size-percent-percent.xht == reference/mask-size-percent-percent-ref.xht +mask-size-percent-percent-stretch.xht == reference/mask-size-percent-percent-stretch-ref.xht test-mask.xht == reference/test-mask-ref.xht diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/50x100-opaque-blue.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/50x100-opaque-blue.svg new file mode 100644 index 00000000000..0ce8f599731 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/50x100-opaque-blue.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="50" height="100"> + <rect x="0" y="0" width="50" height="100" fill="blue" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/50x50-opaque-blue.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/50x50-opaque-blue.svg new file mode 100644 index 00000000000..ac194ee3473 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/50x50-opaque-blue.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50"> + <rect x="0" y="0" width="50" height="50" fill="blue" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/blue-100x100.png b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/blue-100x100.png Binary files differnew file mode 100644 index 00000000000..3b72d5ce53c --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/blue-100x100.png diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/blue-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/blue-100x100.svg new file mode 100644 index 00000000000..ebe8fa73aee --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/blue-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="blue" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/blue-100x50-transparent-100x50.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/blue-100x50-transparent-100x50.svg index a79d9685c94..2ed03935634 100644 --- a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/blue-100x50-transparent-100x50.svg +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/blue-100x50-transparent-100x50.svg @@ -1,4 +1,4 @@ <svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <rect x="0" y="0" width="100%" height="50%" fill="blue" fill-opacity="0"/> - <rect x="0" y="50" width="100%" height="50%" fill="blue" fill-opacity="1"/> + <rect x="0" y="50%" width="100%" height="50%" fill="blue" fill-opacity="1"/> </svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/blue-luminance-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/blue-luminance-100x100.svg new file mode 100644 index 00000000000..3f8e0341e4a --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/blue-luminance-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="RGB(238,238,255)" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/green-100x100.png b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/green-100x100.png Binary files differnew file mode 100644 index 00000000000..d65838b7f02 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/green-100x100.png diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/green-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/green-100x100.svg new file mode 100644 index 00000000000..d792713591e --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/green-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="lime" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/green-luminance-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/green-luminance-100x100.svg new file mode 100644 index 00000000000..c33436ed43c --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/green-luminance-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="RGB(73,73,255)" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/mask-half-transparent-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/mask-half-transparent-100x100.svg new file mode 100644 index 00000000000..2abd94deec4 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/mask-half-transparent-100x100.svg @@ -0,0 +1,8 @@ +<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> + <defs> + <mask id="mask" mask-type="alpha"> + <rect x="0" y="0" width="100" height="50" fill-opacity="1"/> + <rect x="0" y="50" width="100" height="50" fill-opacity="0"/> + </mask> + </defs> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/red-100x100.png b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/red-100x100.png Binary files differnew file mode 100644 index 00000000000..43b8e542a92 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/red-100x100.png diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/red-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/red-100x100.svg new file mode 100644 index 00000000000..175c05f28f2 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/red-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="red" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/red-luminance-100x100.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/red-luminance-100x100.svg new file mode 100644 index 00000000000..274905d6b90 --- /dev/null +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/red-luminance-100x100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100%" height="100%" fill="RGB(201,201,255)" fill-opacity="1"/> +</svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/transparent-100x50-blue-100x50.svg b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/transparent-100x50-blue-100x50.svg index c4017557889..81d59b1bcf1 100644 --- a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/transparent-100x50-blue-100x50.svg +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/support/transparent-100x50-blue-100x50.svg @@ -1,4 +1,4 @@ <svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <rect x="0" y="0" width="100%" height="50%" fill="blue" fill-opacity="1"/> - <rect x="0" y="50" width="100%" height="50%" fill="blue" fill-opacity="0"/> + <rect x="0" y="50%" width="100%" height="50%" fill="blue" fill-opacity="0"/> </svg>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/toc.xht b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/toc.xht index 3fed4050d31..3eb5110a3ec 100644 --- a/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/toc.xht +++ b/tests/wpt/css-tests/css-masking-1_dev/xhtml1print/toc.xht @@ -52,7 +52,7 @@ <tbody id="s7"> <tr><th><a href="chapter-7.xht">Chapter 7 - Positioned Masks</a></th> - <td>(5 Tests)</td></tr> + <td>(49 Tests)</td></tr> </tbody> <tbody id="s8"> <tr><th><a href="chapter-8.xht">Chapter 8 - diff --git a/tests/wpt/css-tests/css-multicol-1_dev/html4/chapter-9.htm b/tests/wpt/css-tests/css-multicol-1_dev/html4/chapter-9.htm index 782d22ae3d8..e6353006bc9 100644 --- a/tests/wpt/css-tests/css-multicol-1_dev/html4/chapter-9.htm +++ b/tests/wpt/css-tests/css-multicol-1_dev/html4/chapter-9.htm @@ -39,43 +39,43 @@ <a href="https://www.w3.org/TR/css3-multicol/#cr-exit-criteria">9.1 CR exit criteria</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS21"> + <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s.#RFC2119"> + <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#abstract"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#acknowledgments"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="s.#status-of-this-document"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative-references"> + <tbody id="s.#table-of-contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#other-references"> + <tbody id="s.#w3c-working"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="snormative-references.#CSS21"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="snormative-references.#RFC2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#status-of-this-document"> + <tbody id="sreferences.#normative-references"> <!-- 0 tests --> </tbody> - <tbody id="s.#table-of-contents"> + <tbody id="sreferences.#other-references"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c-working"> + <tbody id="stable-of-contents.#contents"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-multicol-1_dev/xhtml1/chapter-9.xht b/tests/wpt/css-tests/css-multicol-1_dev/xhtml1/chapter-9.xht index 0fa42c8f3c6..f84460b3033 100644 --- a/tests/wpt/css-tests/css-multicol-1_dev/xhtml1/chapter-9.xht +++ b/tests/wpt/css-tests/css-multicol-1_dev/xhtml1/chapter-9.xht @@ -39,43 +39,43 @@ <a href="https://www.w3.org/TR/css3-multicol/#cr-exit-criteria">9.1 CR exit criteria</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS21"> + <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s.#RFC2119"> + <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#abstract"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#acknowledgments"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="s.#status-of-this-document"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative-references"> + <tbody id="s.#table-of-contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#other-references"> + <tbody id="s.#w3c-working"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="snormative-references.#CSS21"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="snormative-references.#RFC2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#status-of-this-document"> + <tbody id="sreferences.#normative-references"> <!-- 0 tests --> </tbody> - <tbody id="s.#table-of-contents"> + <tbody id="sreferences.#other-references"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c-working"> + <tbody id="stable-of-contents.#contents"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-multicol-1_dev/xhtml1print/chapter-9.xht b/tests/wpt/css-tests/css-multicol-1_dev/xhtml1print/chapter-9.xht index 0fa42c8f3c6..f84460b3033 100644 --- a/tests/wpt/css-tests/css-multicol-1_dev/xhtml1print/chapter-9.xht +++ b/tests/wpt/css-tests/css-multicol-1_dev/xhtml1print/chapter-9.xht @@ -39,43 +39,43 @@ <a href="https://www.w3.org/TR/css3-multicol/#cr-exit-criteria">9.1 CR exit criteria</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS21"> + <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s.#RFC2119"> + <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#abstract"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#acknowledgments"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="s.#status-of-this-document"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative-references"> + <tbody id="s.#table-of-contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#other-references"> + <tbody id="s.#w3c-working"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="snormative-references.#CSS21"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="snormative-references.#RFC2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#status-of-this-document"> + <tbody id="sreferences.#normative-references"> <!-- 0 tests --> </tbody> - <tbody id="s.#table-of-contents"> + <tbody id="sreferences.#other-references"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c-working"> + <tbody id="stable-of-contents.#contents"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-namespaces-3_dev/html/chapter-4.htm b/tests/wpt/css-tests/css-namespaces-3_dev/html/chapter-4.htm index fefc041bf98..17c99f29fc2 100644 --- a/tests/wpt/css-tests/css-namespaces-3_dev/html/chapter-4.htm +++ b/tests/wpt/css-tests/css-namespaces-3_dev/html/chapter-4.htm @@ -48,40 +48,40 @@ <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#css21"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#rfc2119"> + <tbody id="sinformative.#select"> <!-- 0 tests --> </tbody> - <tbody id="s.#select"> + <tbody id="snormative.#css21"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#rfc2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="snormative.#xml-names"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="sreferences.#informative"> <!-- 0 tests --> </tbody> - <tbody id="s.#xml-names"> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-namespaces-3_dev/xhtml1/chapter-4.xht b/tests/wpt/css-tests/css-namespaces-3_dev/xhtml1/chapter-4.xht index 1d0764ddc9e..4e4ba1c5781 100644 --- a/tests/wpt/css-tests/css-namespaces-3_dev/xhtml1/chapter-4.xht +++ b/tests/wpt/css-tests/css-namespaces-3_dev/xhtml1/chapter-4.xht @@ -48,40 +48,40 @@ <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#css21"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#rfc2119"> + <tbody id="sinformative.#select"> <!-- 0 tests --> </tbody> - <tbody id="s.#select"> + <tbody id="snormative.#css21"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#rfc2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="snormative.#xml-names"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="sreferences.#informative"> <!-- 0 tests --> </tbody> - <tbody id="s.#xml-names"> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-page-3_dev/html/chapter-10.htm b/tests/wpt/css-tests/css-page-3_dev/html/chapter-10.htm index cc150a9f17f..cb34cddeff2 100644 --- a/tests/wpt/css-tests/css-page-3_dev/html/chapter-10.htm +++ b/tests/wpt/css-tests/css-page-3_dev/html/chapter-10.htm @@ -33,45 +33,6 @@ <a href="https://www.w3.org/TR/css3-page/#image-properties">10 Image Properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS-DEVICE-ADAPT"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS21"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3-BREAK"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3-IMAGES"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3-SIZING"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3-WRITING-MODES"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3BG"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3VAL"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#JLREQ"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#MEDIAQ"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#PWGMSN"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#RFC2119"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#SELECT"> - <!-- 0 tests --> - </tbody> <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> @@ -81,12 +42,6 @@ <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative-references"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#normative-references"> - <!-- 0 tests --> - </tbody> <tbody id="s.#references"> <!-- 0 tests --> </tbody> diff --git a/tests/wpt/css-tests/css-page-3_dev/html/chapter-B.htm b/tests/wpt/css-tests/css-page-3_dev/html/chapter-B.htm index c0a53b6dc7d..5ef6cbc0394 100644 --- a/tests/wpt/css-tests/css-page-3_dev/html/chapter-B.htm +++ b/tests/wpt/css-tests/css-page-3_dev/html/chapter-B.htm @@ -39,6 +39,51 @@ <tbody id="sB.#signature"> <!-- 0 tests --> </tbody> + <tbody id="sinformative-references.#CSS-DEVICE-ADAPT"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-references.#CSS3-IMAGES"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-references.#CSS3-WRITING-MODES"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-references.#CSS3VAL"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-references.#JLREQ"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#CSS21"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#CSS3-BREAK"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#CSS3-SIZING"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#CSS3BG"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#MEDIAQ"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#PWGMSN"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#RFC2119"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#SELECT"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#informative-references"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#normative-references"> + <!-- 0 tests --> + </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-page-3_dev/xhtml1/chapter-10.xht b/tests/wpt/css-tests/css-page-3_dev/xhtml1/chapter-10.xht index 6dfff9908c7..2729d36fdf4 100644 --- a/tests/wpt/css-tests/css-page-3_dev/xhtml1/chapter-10.xht +++ b/tests/wpt/css-tests/css-page-3_dev/xhtml1/chapter-10.xht @@ -33,45 +33,6 @@ <a href="https://www.w3.org/TR/css3-page/#image-properties">10 Image Properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS-DEVICE-ADAPT"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS21"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3-BREAK"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3-IMAGES"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3-SIZING"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3-WRITING-MODES"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3BG"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3VAL"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#JLREQ"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#MEDIAQ"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#PWGMSN"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#RFC2119"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#SELECT"> - <!-- 0 tests --> - </tbody> <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> @@ -81,12 +42,6 @@ <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative-references"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#normative-references"> - <!-- 0 tests --> - </tbody> <tbody id="s.#references"> <!-- 0 tests --> </tbody> diff --git a/tests/wpt/css-tests/css-page-3_dev/xhtml1/chapter-B.xht b/tests/wpt/css-tests/css-page-3_dev/xhtml1/chapter-B.xht index ffe2fd9fe76..b8578d7656b 100644 --- a/tests/wpt/css-tests/css-page-3_dev/xhtml1/chapter-B.xht +++ b/tests/wpt/css-tests/css-page-3_dev/xhtml1/chapter-B.xht @@ -39,6 +39,51 @@ <tbody id="sB.#signature"> <!-- 0 tests --> </tbody> + <tbody id="sinformative-references.#CSS-DEVICE-ADAPT"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-references.#CSS3-IMAGES"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-references.#CSS3-WRITING-MODES"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-references.#CSS3VAL"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-references.#JLREQ"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#CSS21"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#CSS3-BREAK"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#CSS3-SIZING"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#CSS3BG"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#MEDIAQ"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#PWGMSN"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#RFC2119"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#SELECT"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#informative-references"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#normative-references"> + <!-- 0 tests --> + </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-page-3_dev/xhtml1print/chapter-10.xht b/tests/wpt/css-tests/css-page-3_dev/xhtml1print/chapter-10.xht index 6dfff9908c7..2729d36fdf4 100644 --- a/tests/wpt/css-tests/css-page-3_dev/xhtml1print/chapter-10.xht +++ b/tests/wpt/css-tests/css-page-3_dev/xhtml1print/chapter-10.xht @@ -33,45 +33,6 @@ <a href="https://www.w3.org/TR/css3-page/#image-properties">10 Image Properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS-DEVICE-ADAPT"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS21"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3-BREAK"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3-IMAGES"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3-SIZING"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3-WRITING-MODES"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3BG"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3VAL"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#JLREQ"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#MEDIAQ"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#PWGMSN"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#RFC2119"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#SELECT"> - <!-- 0 tests --> - </tbody> <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> @@ -81,12 +42,6 @@ <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative-references"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#normative-references"> - <!-- 0 tests --> - </tbody> <tbody id="s.#references"> <!-- 0 tests --> </tbody> diff --git a/tests/wpt/css-tests/css-page-3_dev/xhtml1print/chapter-B.xht b/tests/wpt/css-tests/css-page-3_dev/xhtml1print/chapter-B.xht index ffe2fd9fe76..b8578d7656b 100644 --- a/tests/wpt/css-tests/css-page-3_dev/xhtml1print/chapter-B.xht +++ b/tests/wpt/css-tests/css-page-3_dev/xhtml1print/chapter-B.xht @@ -39,6 +39,51 @@ <tbody id="sB.#signature"> <!-- 0 tests --> </tbody> + <tbody id="sinformative-references.#CSS-DEVICE-ADAPT"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-references.#CSS3-IMAGES"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-references.#CSS3-WRITING-MODES"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-references.#CSS3VAL"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-references.#JLREQ"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#CSS21"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#CSS3-BREAK"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#CSS3-SIZING"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#CSS3BG"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#MEDIAQ"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#PWGMSN"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#RFC2119"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-references.#SELECT"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#informative-references"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#normative-references"> + <!-- 0 tests --> + </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-pseudo-4_dev/html/chapter-6.htm b/tests/wpt/css-tests/css-pseudo-4_dev/html/chapter-6.htm index e5fd5f1c0e1..3489c389c53 100644 --- a/tests/wpt/css-tests/css-pseudo-4_dev/html/chapter-6.htm +++ b/tests/wpt/css-tests/css-pseudo-4_dev/html/chapter-6.htm @@ -120,100 +120,100 @@ <tbody id="s.#acknowledgements"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css21"> + <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-fonts"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-text-decor"> + <tbody id="s.#idl-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3bg"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3cascade"> + <tbody id="s.#issues-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3color"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3line"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3text"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-cssom"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-dom-level-2-events"> + <tbody id="sconformance.#conformance-classes"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-html5"> + <tbody id="sconformance.#conventions"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-rfc2119"> + <tbody id="sconformance.#experimental"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-selectors4"> + <tbody id="sconformance.#partial"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-uax29"> + <tbody id="sconformance.#testing"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-uax44"> + <tbody id="sinformative.#biblio-css21"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance"> + <tbody id="sinformative.#biblio-css3-fonts"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> + <tbody id="sinformative.#biblio-css3-text-decor"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="sinformative.#biblio-css3bg"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> + <tbody id="sinformative.#biblio-css3cascade"> <!-- 0 tests --> </tbody> - <tbody id="s.#experimental"> + <tbody id="sinformative.#biblio-css3color"> <!-- 0 tests --> </tbody> - <tbody id="s.#idl-index"> + <tbody id="sinformative.#biblio-css3line"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="sinformative.#biblio-html5"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="sinformative.#biblio-uax29"> <!-- 0 tests --> </tbody> - <tbody id="s.#issues-index"> + <tbody id="snormative.#biblio-css3text"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="snormative.#biblio-cssom"> <!-- 0 tests --> </tbody> - <tbody id="s.#partial"> + <tbody id="snormative.#biblio-dom-level-2-events"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="snormative.#biblio-rfc2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#biblio-selectors4"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="snormative.#biblio-uax44"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> + <tbody id="sreferences.#informative"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> + <tbody id="sstatus.#w3c_process_revision"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-pseudo-4_dev/xhtml1/chapter-6.xht b/tests/wpt/css-tests/css-pseudo-4_dev/xhtml1/chapter-6.xht index ce716b4b940..9b28d50ff22 100644 --- a/tests/wpt/css-tests/css-pseudo-4_dev/xhtml1/chapter-6.xht +++ b/tests/wpt/css-tests/css-pseudo-4_dev/xhtml1/chapter-6.xht @@ -120,100 +120,100 @@ <tbody id="s.#acknowledgements"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css21"> + <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-fonts"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-text-decor"> + <tbody id="s.#idl-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3bg"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3cascade"> + <tbody id="s.#issues-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3color"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3line"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3text"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-cssom"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-dom-level-2-events"> + <tbody id="sconformance.#conformance-classes"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-html5"> + <tbody id="sconformance.#conventions"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-rfc2119"> + <tbody id="sconformance.#experimental"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-selectors4"> + <tbody id="sconformance.#partial"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-uax29"> + <tbody id="sconformance.#testing"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-uax44"> + <tbody id="sinformative.#biblio-css21"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance"> + <tbody id="sinformative.#biblio-css3-fonts"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> + <tbody id="sinformative.#biblio-css3-text-decor"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="sinformative.#biblio-css3bg"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> + <tbody id="sinformative.#biblio-css3cascade"> <!-- 0 tests --> </tbody> - <tbody id="s.#experimental"> + <tbody id="sinformative.#biblio-css3color"> <!-- 0 tests --> </tbody> - <tbody id="s.#idl-index"> + <tbody id="sinformative.#biblio-css3line"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="sinformative.#biblio-html5"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="sinformative.#biblio-uax29"> <!-- 0 tests --> </tbody> - <tbody id="s.#issues-index"> + <tbody id="snormative.#biblio-css3text"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="snormative.#biblio-cssom"> <!-- 0 tests --> </tbody> - <tbody id="s.#partial"> + <tbody id="snormative.#biblio-dom-level-2-events"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="snormative.#biblio-rfc2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#biblio-selectors4"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="snormative.#biblio-uax44"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> + <tbody id="sreferences.#informative"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> + <tbody id="sstatus.#w3c_process_revision"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-pseudo-4_dev/xhtml1print/chapter-6.xht b/tests/wpt/css-tests/css-pseudo-4_dev/xhtml1print/chapter-6.xht index ce716b4b940..9b28d50ff22 100644 --- a/tests/wpt/css-tests/css-pseudo-4_dev/xhtml1print/chapter-6.xht +++ b/tests/wpt/css-tests/css-pseudo-4_dev/xhtml1print/chapter-6.xht @@ -120,100 +120,100 @@ <tbody id="s.#acknowledgements"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css21"> + <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-fonts"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-text-decor"> + <tbody id="s.#idl-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3bg"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3cascade"> + <tbody id="s.#issues-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3color"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3line"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3text"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-cssom"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-dom-level-2-events"> + <tbody id="sconformance.#conformance-classes"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-html5"> + <tbody id="sconformance.#conventions"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-rfc2119"> + <tbody id="sconformance.#experimental"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-selectors4"> + <tbody id="sconformance.#partial"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-uax29"> + <tbody id="sconformance.#testing"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-uax44"> + <tbody id="sinformative.#biblio-css21"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance"> + <tbody id="sinformative.#biblio-css3-fonts"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> + <tbody id="sinformative.#biblio-css3-text-decor"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="sinformative.#biblio-css3bg"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> + <tbody id="sinformative.#biblio-css3cascade"> <!-- 0 tests --> </tbody> - <tbody id="s.#experimental"> + <tbody id="sinformative.#biblio-css3color"> <!-- 0 tests --> </tbody> - <tbody id="s.#idl-index"> + <tbody id="sinformative.#biblio-css3line"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="sinformative.#biblio-html5"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="sinformative.#biblio-uax29"> <!-- 0 tests --> </tbody> - <tbody id="s.#issues-index"> + <tbody id="snormative.#biblio-css3text"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="snormative.#biblio-cssom"> <!-- 0 tests --> </tbody> - <tbody id="s.#partial"> + <tbody id="snormative.#biblio-dom-level-2-events"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="snormative.#biblio-rfc2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#biblio-selectors4"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="snormative.#biblio-uax44"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> + <tbody id="sreferences.#informative"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> + <tbody id="sstatus.#w3c_process_revision"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-regions-1_dev/html/chapter-11.htm b/tests/wpt/css-tests/css-regions-1_dev/html/chapter-11.htm index b388d824cab..29bc48525eb 100644 --- a/tests/wpt/css-tests/css-regions-1_dev/html/chapter-11.htm +++ b/tests/wpt/css-tests/css-regions-1_dev/html/chapter-11.htm @@ -69,103 +69,103 @@ <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css21"> + <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-break"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-exclusions"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-flexbox"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-line-grid"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-page-template"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-writing-modes"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3col"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3page"> + <tbody id="sconformance.#conformance-classes"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3ui"> + <tbody id="sconformance.#conventions"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-cssom"> + <tbody id="sconformance.#experimental"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-cssom-view"> + <tbody id="sconformance.#partial"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-dom"> + <tbody id="sconformance.#testing"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-dom-level-3-events"> + <tbody id="sinformative.#biblio-css3-exclusions"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-html40"> + <tbody id="sinformative.#biblio-css3-flexbox"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-rfc2119"> + <tbody id="sinformative.#biblio-css3-line-grid"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-select"> + <tbody id="sinformative.#biblio-css3-page-template"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance"> + <tbody id="sinformative.#biblio-css3page"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> + <tbody id="sinformative.#biblio-css3ui"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="sinformative.#biblio-cssom-view"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> + <tbody id="sinformative.#biblio-html40"> <!-- 0 tests --> </tbody> - <tbody id="s.#experimental"> + <tbody id="snormative.#biblio-css21"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="snormative.#biblio-css3-break"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="snormative.#biblio-css3-writing-modes"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="snormative.#biblio-css3col"> <!-- 0 tests --> </tbody> - <tbody id="s.#partial"> + <tbody id="snormative.#biblio-cssom"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="snormative.#biblio-dom"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="snormative.#biblio-dom-level-3-events"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#biblio-rfc2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="snormative.#biblio-select"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> + <tbody id="sreferences.#informative"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> + <tbody id="sstatus.#w3c_process_revision"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-regions-1_dev/xhtml1/chapter-11.xht b/tests/wpt/css-tests/css-regions-1_dev/xhtml1/chapter-11.xht index f506306dc95..75ae227bfa5 100644 --- a/tests/wpt/css-tests/css-regions-1_dev/xhtml1/chapter-11.xht +++ b/tests/wpt/css-tests/css-regions-1_dev/xhtml1/chapter-11.xht @@ -69,103 +69,103 @@ <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css21"> + <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-break"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-exclusions"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-flexbox"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-line-grid"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-page-template"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-writing-modes"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3col"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3page"> + <tbody id="sconformance.#conformance-classes"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3ui"> + <tbody id="sconformance.#conventions"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-cssom"> + <tbody id="sconformance.#experimental"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-cssom-view"> + <tbody id="sconformance.#partial"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-dom"> + <tbody id="sconformance.#testing"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-dom-level-3-events"> + <tbody id="sinformative.#biblio-css3-exclusions"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-html40"> + <tbody id="sinformative.#biblio-css3-flexbox"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-rfc2119"> + <tbody id="sinformative.#biblio-css3-line-grid"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-select"> + <tbody id="sinformative.#biblio-css3-page-template"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance"> + <tbody id="sinformative.#biblio-css3page"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> + <tbody id="sinformative.#biblio-css3ui"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="sinformative.#biblio-cssom-view"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> + <tbody id="sinformative.#biblio-html40"> <!-- 0 tests --> </tbody> - <tbody id="s.#experimental"> + <tbody id="snormative.#biblio-css21"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="snormative.#biblio-css3-break"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="snormative.#biblio-css3-writing-modes"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="snormative.#biblio-css3col"> <!-- 0 tests --> </tbody> - <tbody id="s.#partial"> + <tbody id="snormative.#biblio-cssom"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="snormative.#biblio-dom"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="snormative.#biblio-dom-level-3-events"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#biblio-rfc2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="snormative.#biblio-select"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> + <tbody id="sreferences.#informative"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> + <tbody id="sstatus.#w3c_process_revision"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-regions-1_dev/xhtml1print/chapter-11.xht b/tests/wpt/css-tests/css-regions-1_dev/xhtml1print/chapter-11.xht index f506306dc95..75ae227bfa5 100644 --- a/tests/wpt/css-tests/css-regions-1_dev/xhtml1print/chapter-11.xht +++ b/tests/wpt/css-tests/css-regions-1_dev/xhtml1print/chapter-11.xht @@ -69,103 +69,103 @@ <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css21"> + <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-break"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-exclusions"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-flexbox"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-line-grid"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-page-template"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-writing-modes"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3col"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3page"> + <tbody id="sconformance.#conformance-classes"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3ui"> + <tbody id="sconformance.#conventions"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-cssom"> + <tbody id="sconformance.#experimental"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-cssom-view"> + <tbody id="sconformance.#partial"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-dom"> + <tbody id="sconformance.#testing"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-dom-level-3-events"> + <tbody id="sinformative.#biblio-css3-exclusions"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-html40"> + <tbody id="sinformative.#biblio-css3-flexbox"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-rfc2119"> + <tbody id="sinformative.#biblio-css3-line-grid"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-select"> + <tbody id="sinformative.#biblio-css3-page-template"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance"> + <tbody id="sinformative.#biblio-css3page"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> + <tbody id="sinformative.#biblio-css3ui"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="sinformative.#biblio-cssom-view"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> + <tbody id="sinformative.#biblio-html40"> <!-- 0 tests --> </tbody> - <tbody id="s.#experimental"> + <tbody id="snormative.#biblio-css21"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="snormative.#biblio-css3-break"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="snormative.#biblio-css3-writing-modes"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="snormative.#biblio-css3col"> <!-- 0 tests --> </tbody> - <tbody id="s.#partial"> + <tbody id="snormative.#biblio-cssom"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="snormative.#biblio-dom"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="snormative.#biblio-dom-level-3-events"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#biblio-rfc2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="snormative.#biblio-select"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> + <tbody id="sreferences.#informative"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> + <tbody id="sstatus.#w3c_process_revision"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-shapes-1_dev/html/chapter-6.htm b/tests/wpt/css-tests/css-shapes-1_dev/html/chapter-6.htm index 93a3cbe7493..ca80db29c38 100644 --- a/tests/wpt/css-tests/css-shapes-1_dev/html/chapter-6.htm +++ b/tests/wpt/css-tests/css-shapes-1_dev/html/chapter-6.htm @@ -2377,103 +2377,103 @@ <tbody id="s6.3.#valuedef-percentage"> <!-- 0 tests --> </tbody> - <tbody id="s.#20111213"> + <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s.#20120503"> + <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#20130620"> + <tbody id="s.#change-log"> <!-- 0 tests --> </tbody> - <tbody id="s.#20131203"> + <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#20140211"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#abstract"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#acknowledgments"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#change-log"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> + <tbody id="schange-log.#20111213"> <!-- 0 tests --> </tbody> - <tbody id="s.#cr-exit-criteria"> + <tbody id="schange-log.#20120503"> <!-- 0 tests --> </tbody> - <tbody id="s.#css-masking"> + <tbody id="schange-log.#20130620"> <!-- 0 tests --> </tbody> - <tbody id="s.#css21"> + <tbody id="schange-log.#20131203"> <!-- 0 tests --> </tbody> - <tbody id="s.#css3-exclusions"> + <tbody id="schange-log.#20140211"> <!-- 0 tests --> </tbody> - <tbody id="s.#css3-transitions"> + <tbody id="sconformance.#conformance-classes"> <!-- 0 tests --> </tbody> - <tbody id="s.#css3bg"> + <tbody id="sconformance.#conventions"> <!-- 0 tests --> </tbody> - <tbody id="s.#css3box"> + <tbody id="sconformance.#cr-exit-criteria"> <!-- 0 tests --> </tbody> - <tbody id="s.#css3val"> + <tbody id="sconformance.#experimental"> <!-- 0 tests --> </tbody> - <tbody id="s.#experimental"> + <tbody id="sconformance.#partial"> <!-- 0 tests --> </tbody> - <tbody id="s.#html5"> + <tbody id="sconformance.#testing"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="sinformative.#css-masking"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="sinformative.#css3-exclusions"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="sinformative.#css3-transitions"> <!-- 0 tests --> </tbody> - <tbody id="s.#partial"> + <tbody id="snormative.#css21"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="snormative.#css3bg"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="snormative.#css3box"> <!-- 0 tests --> </tbody> - <tbody id="s.#rfc2119"> + <tbody id="snormative.#css3val"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#html5"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="snormative.#rfc2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> + <tbody id="sreferences.#informative"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-shapes-1_dev/xhtml1/chapter-6.xht b/tests/wpt/css-tests/css-shapes-1_dev/xhtml1/chapter-6.xht index 4c5c3c12a07..e5365df12aa 100644 --- a/tests/wpt/css-tests/css-shapes-1_dev/xhtml1/chapter-6.xht +++ b/tests/wpt/css-tests/css-shapes-1_dev/xhtml1/chapter-6.xht @@ -2377,103 +2377,103 @@ <tbody id="s6.3.#valuedef-percentage"> <!-- 0 tests --> </tbody> - <tbody id="s.#20111213"> + <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s.#20120503"> + <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#20130620"> + <tbody id="s.#change-log"> <!-- 0 tests --> </tbody> - <tbody id="s.#20131203"> + <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#20140211"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#abstract"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#acknowledgments"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#change-log"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> + <tbody id="schange-log.#20111213"> <!-- 0 tests --> </tbody> - <tbody id="s.#cr-exit-criteria"> + <tbody id="schange-log.#20120503"> <!-- 0 tests --> </tbody> - <tbody id="s.#css-masking"> + <tbody id="schange-log.#20130620"> <!-- 0 tests --> </tbody> - <tbody id="s.#css21"> + <tbody id="schange-log.#20131203"> <!-- 0 tests --> </tbody> - <tbody id="s.#css3-exclusions"> + <tbody id="schange-log.#20140211"> <!-- 0 tests --> </tbody> - <tbody id="s.#css3-transitions"> + <tbody id="sconformance.#conformance-classes"> <!-- 0 tests --> </tbody> - <tbody id="s.#css3bg"> + <tbody id="sconformance.#conventions"> <!-- 0 tests --> </tbody> - <tbody id="s.#css3box"> + <tbody id="sconformance.#cr-exit-criteria"> <!-- 0 tests --> </tbody> - <tbody id="s.#css3val"> + <tbody id="sconformance.#experimental"> <!-- 0 tests --> </tbody> - <tbody id="s.#experimental"> + <tbody id="sconformance.#partial"> <!-- 0 tests --> </tbody> - <tbody id="s.#html5"> + <tbody id="sconformance.#testing"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="sinformative.#css-masking"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="sinformative.#css3-exclusions"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="sinformative.#css3-transitions"> <!-- 0 tests --> </tbody> - <tbody id="s.#partial"> + <tbody id="snormative.#css21"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="snormative.#css3bg"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="snormative.#css3box"> <!-- 0 tests --> </tbody> - <tbody id="s.#rfc2119"> + <tbody id="snormative.#css3val"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#html5"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="snormative.#rfc2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> + <tbody id="sreferences.#informative"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-shapes-1_dev/xhtml1print/chapter-6.xht b/tests/wpt/css-tests/css-shapes-1_dev/xhtml1print/chapter-6.xht index 4c5c3c12a07..e5365df12aa 100644 --- a/tests/wpt/css-tests/css-shapes-1_dev/xhtml1print/chapter-6.xht +++ b/tests/wpt/css-tests/css-shapes-1_dev/xhtml1print/chapter-6.xht @@ -2377,103 +2377,103 @@ <tbody id="s6.3.#valuedef-percentage"> <!-- 0 tests --> </tbody> - <tbody id="s.#20111213"> + <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s.#20120503"> + <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#20130620"> + <tbody id="s.#change-log"> <!-- 0 tests --> </tbody> - <tbody id="s.#20131203"> + <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#20140211"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#abstract"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#acknowledgments"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#change-log"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> + <tbody id="schange-log.#20111213"> <!-- 0 tests --> </tbody> - <tbody id="s.#cr-exit-criteria"> + <tbody id="schange-log.#20120503"> <!-- 0 tests --> </tbody> - <tbody id="s.#css-masking"> + <tbody id="schange-log.#20130620"> <!-- 0 tests --> </tbody> - <tbody id="s.#css21"> + <tbody id="schange-log.#20131203"> <!-- 0 tests --> </tbody> - <tbody id="s.#css3-exclusions"> + <tbody id="schange-log.#20140211"> <!-- 0 tests --> </tbody> - <tbody id="s.#css3-transitions"> + <tbody id="sconformance.#conformance-classes"> <!-- 0 tests --> </tbody> - <tbody id="s.#css3bg"> + <tbody id="sconformance.#conventions"> <!-- 0 tests --> </tbody> - <tbody id="s.#css3box"> + <tbody id="sconformance.#cr-exit-criteria"> <!-- 0 tests --> </tbody> - <tbody id="s.#css3val"> + <tbody id="sconformance.#experimental"> <!-- 0 tests --> </tbody> - <tbody id="s.#experimental"> + <tbody id="sconformance.#partial"> <!-- 0 tests --> </tbody> - <tbody id="s.#html5"> + <tbody id="sconformance.#testing"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="sinformative.#css-masking"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="sinformative.#css3-exclusions"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="sinformative.#css3-transitions"> <!-- 0 tests --> </tbody> - <tbody id="s.#partial"> + <tbody id="snormative.#css21"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="snormative.#css3bg"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="snormative.#css3box"> <!-- 0 tests --> </tbody> - <tbody id="s.#rfc2119"> + <tbody id="snormative.#css3val"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#html5"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="snormative.#rfc2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> + <tbody id="sreferences.#informative"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-style-attr-1_dev/html4/chapter-6.htm b/tests/wpt/css-tests/css-style-attr-1_dev/html4/chapter-6.htm index 27538c6d75e..92f756eca13 100644 --- a/tests/wpt/css-tests/css-style-attr-1_dev/html4/chapter-6.htm +++ b/tests/wpt/css-tests/css-style-attr-1_dev/html4/chapter-6.htm @@ -33,34 +33,34 @@ <a href="https://www.w3.org/TR/css-style-attr/#references">6 References</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="s6.#CSS21"> + <tbody id="s6.#informative-references"> <!-- 0 tests --> </tbody> - <tbody id="s6.#HTML401"> + <tbody id="s6.#normative-references"> <!-- 0 tests --> </tbody> - <tbody id="s6.#RFC2119"> + <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s6.#SVG11"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s6.#informative-references"> + <tbody id="s.#longstatus-date"> <!-- 0 tests --> </tbody> - <tbody id="s6.#normative-references"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#abstract"> + <tbody id="sinformative-references.#HTML401"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="sinformative-references.#SVG11"> <!-- 0 tests --> </tbody> - <tbody id="s.#longstatus-date"> + <tbody id="snormative-references.#CSS21"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative-references.#RFC2119"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-style-attr-1_dev/xhtml1/chapter-6.xht b/tests/wpt/css-tests/css-style-attr-1_dev/xhtml1/chapter-6.xht index 8cbae9fee2a..151ead92933 100644 --- a/tests/wpt/css-tests/css-style-attr-1_dev/xhtml1/chapter-6.xht +++ b/tests/wpt/css-tests/css-style-attr-1_dev/xhtml1/chapter-6.xht @@ -33,34 +33,34 @@ <a href="https://www.w3.org/TR/css-style-attr/#references">6 References</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="s6.#CSS21"> + <tbody id="s6.#informative-references"> <!-- 0 tests --> </tbody> - <tbody id="s6.#HTML401"> + <tbody id="s6.#normative-references"> <!-- 0 tests --> </tbody> - <tbody id="s6.#RFC2119"> + <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s6.#SVG11"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s6.#informative-references"> + <tbody id="s.#longstatus-date"> <!-- 0 tests --> </tbody> - <tbody id="s6.#normative-references"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#abstract"> + <tbody id="sinformative-references.#HTML401"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="sinformative-references.#SVG11"> <!-- 0 tests --> </tbody> - <tbody id="s.#longstatus-date"> + <tbody id="snormative-references.#CSS21"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative-references.#RFC2119"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-style-attr-1_dev/xhtml1print/chapter-6.xht b/tests/wpt/css-tests/css-style-attr-1_dev/xhtml1print/chapter-6.xht index 8cbae9fee2a..151ead92933 100644 --- a/tests/wpt/css-tests/css-style-attr-1_dev/xhtml1print/chapter-6.xht +++ b/tests/wpt/css-tests/css-style-attr-1_dev/xhtml1print/chapter-6.xht @@ -33,34 +33,34 @@ <a href="https://www.w3.org/TR/css-style-attr/#references">6 References</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="s6.#CSS21"> + <tbody id="s6.#informative-references"> <!-- 0 tests --> </tbody> - <tbody id="s6.#HTML401"> + <tbody id="s6.#normative-references"> <!-- 0 tests --> </tbody> - <tbody id="s6.#RFC2119"> + <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s6.#SVG11"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s6.#informative-references"> + <tbody id="s.#longstatus-date"> <!-- 0 tests --> </tbody> - <tbody id="s6.#normative-references"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#abstract"> + <tbody id="sinformative-references.#HTML401"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="sinformative-references.#SVG11"> <!-- 0 tests --> </tbody> - <tbody id="s.#longstatus-date"> + <tbody id="snormative-references.#CSS21"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative-references.#RFC2119"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-text-3_dev/html/chapter-9.htm b/tests/wpt/css-tests/css-text-3_dev/html/chapter-9.htm index 6665b467631..9f28e319e07 100644 --- a/tests/wpt/css-tests/css-text-3_dev/html/chapter-9.htm +++ b/tests/wpt/css-tests/css-text-3_dev/html/chapter-9.htm @@ -145,120 +145,33 @@ <a href="https://www.w3.org/TR/css-text-3/#bidi-linebox">9.3 Bidirectionality and Line Boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS-COUNTER-STYLES-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS21"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3-FONTS"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3-TEXT-DECOR"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3-WRITING-MODES"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3VAL"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#HTML5"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#JIS4051"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#JLREQ"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#RFC2119"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#UAX11"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#UAX14"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#UAX29"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#UAX44"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#UNICODE"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#XML10"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#ZHMARK"> - <!-- 0 tests --> - </tbody> <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> <tbody id="s.#acknowledgements"> <!-- 0 tests --> </tbody> - <tbody id="s.#authoring-tool"> - <!-- 0 tests --> - </tbody> <tbody id="s.#changes"> <!-- 0 tests --> </tbody> <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> - <!-- 0 tests --> - </tbody> <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#cr-exit-criteria"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#experimental"> - <!-- 0 tests --> - </tbody> <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative-ref"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#normative-ref"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#partial"> - <!-- 0 tests --> - </tbody> <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#recent-changes"> - <!-- 0 tests --> - </tbody> <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#renderer"> - <!-- 0 tests --> - </tbody> <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#style-sheet"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#testing"> - <!-- 0 tests --> - </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-text-3_dev/html/chapter-C.htm b/tests/wpt/css-tests/css-text-3_dev/html/chapter-C.htm index 8c89d50229a..a8069cbdcf6 100644 --- a/tests/wpt/css-tests/css-text-3_dev/html/chapter-C.htm +++ b/tests/wpt/css-tests/css-text-3_dev/html/chapter-C.htm @@ -36,6 +36,93 @@ <tbody id="sC.#cursive-scripts"> <!-- 0 tests --> </tbody> + <tbody id="schanges.#recent-changes"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conformance-classes"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conventions"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#cr-exit-criteria"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#experimental"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#partial"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#testing"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance-classes.#authoring-tool"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance-classes.#renderer"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance-classes.#style-sheet"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-ref.#CSS-COUNTER-STYLES-3"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-ref.#CSS3-TEXT-DECOR"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-ref.#CSS3VAL"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-ref.#HTML5"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-ref.#JIS4051"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-ref.#JLREQ"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-ref.#XML10"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-ref.#ZHMARK"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#CSS21"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#CSS3-FONTS"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#CSS3-WRITING-MODES"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#RFC2119"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#UAX11"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#UAX14"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#UAX29"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#UAX44"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#UNICODE"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#informative-ref"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#normative-ref"> + <!-- 0 tests --> + </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-text-3_dev/xhtml1/chapter-9.xht b/tests/wpt/css-tests/css-text-3_dev/xhtml1/chapter-9.xht index 1cc1b7219e8..cb795aede14 100644 --- a/tests/wpt/css-tests/css-text-3_dev/xhtml1/chapter-9.xht +++ b/tests/wpt/css-tests/css-text-3_dev/xhtml1/chapter-9.xht @@ -145,120 +145,33 @@ <a href="https://www.w3.org/TR/css-text-3/#bidi-linebox">9.3 Bidirectionality and Line Boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS-COUNTER-STYLES-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS21"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3-FONTS"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3-TEXT-DECOR"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3-WRITING-MODES"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3VAL"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#HTML5"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#JIS4051"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#JLREQ"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#RFC2119"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#UAX11"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#UAX14"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#UAX29"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#UAX44"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#UNICODE"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#XML10"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#ZHMARK"> - <!-- 0 tests --> - </tbody> <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> <tbody id="s.#acknowledgements"> <!-- 0 tests --> </tbody> - <tbody id="s.#authoring-tool"> - <!-- 0 tests --> - </tbody> <tbody id="s.#changes"> <!-- 0 tests --> </tbody> <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> - <!-- 0 tests --> - </tbody> <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#cr-exit-criteria"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#experimental"> - <!-- 0 tests --> - </tbody> <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative-ref"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#normative-ref"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#partial"> - <!-- 0 tests --> - </tbody> <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#recent-changes"> - <!-- 0 tests --> - </tbody> <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#renderer"> - <!-- 0 tests --> - </tbody> <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#style-sheet"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#testing"> - <!-- 0 tests --> - </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-text-3_dev/xhtml1/chapter-C.xht b/tests/wpt/css-tests/css-text-3_dev/xhtml1/chapter-C.xht index 65f395134b6..07b5fb4e8c0 100644 --- a/tests/wpt/css-tests/css-text-3_dev/xhtml1/chapter-C.xht +++ b/tests/wpt/css-tests/css-text-3_dev/xhtml1/chapter-C.xht @@ -36,6 +36,93 @@ <tbody id="sC.#cursive-scripts"> <!-- 0 tests --> </tbody> + <tbody id="schanges.#recent-changes"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conformance-classes"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conventions"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#cr-exit-criteria"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#experimental"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#partial"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#testing"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance-classes.#authoring-tool"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance-classes.#renderer"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance-classes.#style-sheet"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-ref.#CSS-COUNTER-STYLES-3"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-ref.#CSS3-TEXT-DECOR"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-ref.#CSS3VAL"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-ref.#HTML5"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-ref.#JIS4051"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-ref.#JLREQ"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-ref.#XML10"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-ref.#ZHMARK"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#CSS21"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#CSS3-FONTS"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#CSS3-WRITING-MODES"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#RFC2119"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#UAX11"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#UAX14"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#UAX29"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#UAX44"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#UNICODE"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#informative-ref"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#normative-ref"> + <!-- 0 tests --> + </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-text-3_dev/xhtml1print/chapter-9.xht b/tests/wpt/css-tests/css-text-3_dev/xhtml1print/chapter-9.xht index 1cc1b7219e8..cb795aede14 100644 --- a/tests/wpt/css-tests/css-text-3_dev/xhtml1print/chapter-9.xht +++ b/tests/wpt/css-tests/css-text-3_dev/xhtml1print/chapter-9.xht @@ -145,120 +145,33 @@ <a href="https://www.w3.org/TR/css-text-3/#bidi-linebox">9.3 Bidirectionality and Line Boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS-COUNTER-STYLES-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS21"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3-FONTS"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3-TEXT-DECOR"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3-WRITING-MODES"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#CSS3VAL"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#HTML5"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#JIS4051"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#JLREQ"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#RFC2119"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#UAX11"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#UAX14"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#UAX29"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#UAX44"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#UNICODE"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#XML10"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#ZHMARK"> - <!-- 0 tests --> - </tbody> <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> <tbody id="s.#acknowledgements"> <!-- 0 tests --> </tbody> - <tbody id="s.#authoring-tool"> - <!-- 0 tests --> - </tbody> <tbody id="s.#changes"> <!-- 0 tests --> </tbody> <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> - <!-- 0 tests --> - </tbody> <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#cr-exit-criteria"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#experimental"> - <!-- 0 tests --> - </tbody> <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative-ref"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#normative-ref"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#partial"> - <!-- 0 tests --> - </tbody> <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#recent-changes"> - <!-- 0 tests --> - </tbody> <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#renderer"> - <!-- 0 tests --> - </tbody> <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#style-sheet"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#testing"> - <!-- 0 tests --> - </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-text-3_dev/xhtml1print/chapter-C.xht b/tests/wpt/css-tests/css-text-3_dev/xhtml1print/chapter-C.xht index 65f395134b6..07b5fb4e8c0 100644 --- a/tests/wpt/css-tests/css-text-3_dev/xhtml1print/chapter-C.xht +++ b/tests/wpt/css-tests/css-text-3_dev/xhtml1print/chapter-C.xht @@ -36,6 +36,93 @@ <tbody id="sC.#cursive-scripts"> <!-- 0 tests --> </tbody> + <tbody id="schanges.#recent-changes"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conformance-classes"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conventions"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#cr-exit-criteria"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#experimental"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#partial"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#testing"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance-classes.#authoring-tool"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance-classes.#renderer"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance-classes.#style-sheet"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-ref.#CSS-COUNTER-STYLES-3"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-ref.#CSS3-TEXT-DECOR"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-ref.#CSS3VAL"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-ref.#HTML5"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-ref.#JIS4051"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-ref.#JLREQ"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-ref.#XML10"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-ref.#ZHMARK"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#CSS21"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#CSS3-FONTS"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#CSS3-WRITING-MODES"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#RFC2119"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#UAX11"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#UAX14"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#UAX29"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#UAX44"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#UNICODE"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#informative-ref"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#normative-ref"> + <!-- 0 tests --> + </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-text-decor-3_dev/html/chapter-B.htm b/tests/wpt/css-tests/css-text-decor-3_dev/html/chapter-B.htm index bfbad362ef4..ad587292a9a 100644 --- a/tests/wpt/css-tests/css-text-decor-3_dev/html/chapter-B.htm +++ b/tests/wpt/css-tests/css-text-decor-3_dev/html/chapter-B.htm @@ -33,33 +33,6 @@ <a href="https://www.w3.org/TR/css-text-decor-3/#appendix-b-references">B References</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sB.#CSS21"> - <!-- 0 tests --> - </tbody> - <tbody id="sB.#CSS3-ANIMATIONS"> - <!-- 0 tests --> - </tbody> - <tbody id="sB.#CSS3-FONTS"> - <!-- 0 tests --> - </tbody> - <tbody id="sB.#CSS3-WRITING-MODES"> - <!-- 0 tests --> - </tbody> - <tbody id="sB.#CSS3BG"> - <!-- 0 tests --> - </tbody> - <tbody id="sB.#CSS3COLOR"> - <!-- 0 tests --> - </tbody> - <tbody id="sB.#CSS3TEXT"> - <!-- 0 tests --> - </tbody> - <tbody id="sB.#RFC2119"> - <!-- 0 tests --> - </tbody> - <tbody id="sB.#UAX44"> - <!-- 0 tests --> - </tbody> <tbody id="sB.#informative-ref"> <!-- 0 tests --> </tbody> diff --git a/tests/wpt/css-tests/css-text-decor-3_dev/html/chapter-D.htm b/tests/wpt/css-tests/css-text-decor-3_dev/html/chapter-D.htm index d9007ecacf3..2082dcc757d 100644 --- a/tests/wpt/css-tests/css-text-decor-3_dev/html/chapter-D.htm +++ b/tests/wpt/css-tests/css-text-decor-3_dev/html/chapter-D.htm @@ -33,6 +33,33 @@ <a href="https://www.w3.org/TR/css-text-decor-3/#default-stylesheet">D Default UA Stylesheet</a></th></tr> <!-- 0 tests --> </tbody> + <tbody id="sinformative-ref.#CSS3-ANIMATIONS"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-ref.#CSS3COLOR"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-ref.#UAX44"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#CSS21"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#CSS3-FONTS"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#CSS3-WRITING-MODES"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#CSS3BG"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#CSS3TEXT"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#RFC2119"> + <!-- 0 tests --> + </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-text-decor-3_dev/xhtml1/chapter-B.xht b/tests/wpt/css-tests/css-text-decor-3_dev/xhtml1/chapter-B.xht index 427d2cb7af6..510439c2507 100644 --- a/tests/wpt/css-tests/css-text-decor-3_dev/xhtml1/chapter-B.xht +++ b/tests/wpt/css-tests/css-text-decor-3_dev/xhtml1/chapter-B.xht @@ -33,33 +33,6 @@ <a href="https://www.w3.org/TR/css-text-decor-3/#appendix-b-references">B References</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sB.#CSS21"> - <!-- 0 tests --> - </tbody> - <tbody id="sB.#CSS3-ANIMATIONS"> - <!-- 0 tests --> - </tbody> - <tbody id="sB.#CSS3-FONTS"> - <!-- 0 tests --> - </tbody> - <tbody id="sB.#CSS3-WRITING-MODES"> - <!-- 0 tests --> - </tbody> - <tbody id="sB.#CSS3BG"> - <!-- 0 tests --> - </tbody> - <tbody id="sB.#CSS3COLOR"> - <!-- 0 tests --> - </tbody> - <tbody id="sB.#CSS3TEXT"> - <!-- 0 tests --> - </tbody> - <tbody id="sB.#RFC2119"> - <!-- 0 tests --> - </tbody> - <tbody id="sB.#UAX44"> - <!-- 0 tests --> - </tbody> <tbody id="sB.#informative-ref"> <!-- 0 tests --> </tbody> diff --git a/tests/wpt/css-tests/css-text-decor-3_dev/xhtml1/chapter-D.xht b/tests/wpt/css-tests/css-text-decor-3_dev/xhtml1/chapter-D.xht index 0008e48217a..b602775bbf6 100644 --- a/tests/wpt/css-tests/css-text-decor-3_dev/xhtml1/chapter-D.xht +++ b/tests/wpt/css-tests/css-text-decor-3_dev/xhtml1/chapter-D.xht @@ -33,6 +33,33 @@ <a href="https://www.w3.org/TR/css-text-decor-3/#default-stylesheet">D Default UA Stylesheet</a></th></tr> <!-- 0 tests --> </tbody> + <tbody id="sinformative-ref.#CSS3-ANIMATIONS"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-ref.#CSS3COLOR"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-ref.#UAX44"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#CSS21"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#CSS3-FONTS"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#CSS3-WRITING-MODES"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#CSS3BG"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#CSS3TEXT"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#RFC2119"> + <!-- 0 tests --> + </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-text-decor-3_dev/xhtml1print/chapter-B.xht b/tests/wpt/css-tests/css-text-decor-3_dev/xhtml1print/chapter-B.xht index 427d2cb7af6..510439c2507 100644 --- a/tests/wpt/css-tests/css-text-decor-3_dev/xhtml1print/chapter-B.xht +++ b/tests/wpt/css-tests/css-text-decor-3_dev/xhtml1print/chapter-B.xht @@ -33,33 +33,6 @@ <a href="https://www.w3.org/TR/css-text-decor-3/#appendix-b-references">B References</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sB.#CSS21"> - <!-- 0 tests --> - </tbody> - <tbody id="sB.#CSS3-ANIMATIONS"> - <!-- 0 tests --> - </tbody> - <tbody id="sB.#CSS3-FONTS"> - <!-- 0 tests --> - </tbody> - <tbody id="sB.#CSS3-WRITING-MODES"> - <!-- 0 tests --> - </tbody> - <tbody id="sB.#CSS3BG"> - <!-- 0 tests --> - </tbody> - <tbody id="sB.#CSS3COLOR"> - <!-- 0 tests --> - </tbody> - <tbody id="sB.#CSS3TEXT"> - <!-- 0 tests --> - </tbody> - <tbody id="sB.#RFC2119"> - <!-- 0 tests --> - </tbody> - <tbody id="sB.#UAX44"> - <!-- 0 tests --> - </tbody> <tbody id="sB.#informative-ref"> <!-- 0 tests --> </tbody> diff --git a/tests/wpt/css-tests/css-text-decor-3_dev/xhtml1print/chapter-D.xht b/tests/wpt/css-tests/css-text-decor-3_dev/xhtml1print/chapter-D.xht index 0008e48217a..b602775bbf6 100644 --- a/tests/wpt/css-tests/css-text-decor-3_dev/xhtml1print/chapter-D.xht +++ b/tests/wpt/css-tests/css-text-decor-3_dev/xhtml1print/chapter-D.xht @@ -33,6 +33,33 @@ <a href="https://www.w3.org/TR/css-text-decor-3/#default-stylesheet">D Default UA Stylesheet</a></th></tr> <!-- 0 tests --> </tbody> + <tbody id="sinformative-ref.#CSS3-ANIMATIONS"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-ref.#CSS3COLOR"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative-ref.#UAX44"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#CSS21"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#CSS3-FONTS"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#CSS3-WRITING-MODES"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#CSS3BG"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#CSS3TEXT"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative-ref.#RFC2119"> + <!-- 0 tests --> + </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-transforms-1_dev/html/chapter-21.htm b/tests/wpt/css-tests/css-transforms-1_dev/html/chapter-21.htm index a9e965012e1..0f199deb8d6 100644 --- a/tests/wpt/css-tests/css-transforms-1_dev/html/chapter-21.htm +++ b/tests/wpt/css-tests/css-transforms-1_dev/html/chapter-21.htm @@ -72,70 +72,70 @@ <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> + <tbody id="s.#issues-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#css21"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#css3bg"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#css3val"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#cssom-view"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#experimental"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="sconformance.#conformance-classes"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="sconformance.#conventions"> <!-- 0 tests --> </tbody> - <tbody id="s.#issues-index"> + <tbody id="sconformance.#experimental"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="sconformance.#partial"> <!-- 0 tests --> </tbody> - <tbody id="s.#partial"> + <tbody id="sconformance.#testing"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="sinformative.#cssom-view"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="sinformative.#smil3"> <!-- 0 tests --> </tbody> - <tbody id="s.#rfc2119"> + <tbody id="snormative.#css21"> <!-- 0 tests --> </tbody> - <tbody id="s.#smil3"> + <tbody id="snormative.#css3bg"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#css3val"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="snormative.#rfc2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#svg11"> + <tbody id="snormative.#svg11"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> + <tbody id="sreferences.#informative"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-transforms-1_dev/xhtml1/chapter-21.xht b/tests/wpt/css-tests/css-transforms-1_dev/xhtml1/chapter-21.xht index 510c1dce703..d8e622dd268 100644 --- a/tests/wpt/css-tests/css-transforms-1_dev/xhtml1/chapter-21.xht +++ b/tests/wpt/css-tests/css-transforms-1_dev/xhtml1/chapter-21.xht @@ -72,70 +72,70 @@ <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> + <tbody id="s.#issues-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#css21"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#css3bg"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#css3val"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#cssom-view"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#experimental"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="sconformance.#conformance-classes"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="sconformance.#conventions"> <!-- 0 tests --> </tbody> - <tbody id="s.#issues-index"> + <tbody id="sconformance.#experimental"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="sconformance.#partial"> <!-- 0 tests --> </tbody> - <tbody id="s.#partial"> + <tbody id="sconformance.#testing"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="sinformative.#cssom-view"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="sinformative.#smil3"> <!-- 0 tests --> </tbody> - <tbody id="s.#rfc2119"> + <tbody id="snormative.#css21"> <!-- 0 tests --> </tbody> - <tbody id="s.#smil3"> + <tbody id="snormative.#css3bg"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#css3val"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="snormative.#rfc2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#svg11"> + <tbody id="snormative.#svg11"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> + <tbody id="sreferences.#informative"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-transforms-1_dev/xhtml1print/chapter-21.xht b/tests/wpt/css-tests/css-transforms-1_dev/xhtml1print/chapter-21.xht index 510c1dce703..d8e622dd268 100644 --- a/tests/wpt/css-tests/css-transforms-1_dev/xhtml1print/chapter-21.xht +++ b/tests/wpt/css-tests/css-transforms-1_dev/xhtml1print/chapter-21.xht @@ -72,70 +72,70 @@ <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> + <tbody id="s.#issues-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#css21"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#css3bg"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#css3val"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#cssom-view"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#experimental"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="sconformance.#conformance-classes"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="sconformance.#conventions"> <!-- 0 tests --> </tbody> - <tbody id="s.#issues-index"> + <tbody id="sconformance.#experimental"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="sconformance.#partial"> <!-- 0 tests --> </tbody> - <tbody id="s.#partial"> + <tbody id="sconformance.#testing"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="sinformative.#cssom-view"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="sinformative.#smil3"> <!-- 0 tests --> </tbody> - <tbody id="s.#rfc2119"> + <tbody id="snormative.#css21"> <!-- 0 tests --> </tbody> - <tbody id="s.#smil3"> + <tbody id="snormative.#css3bg"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#css3val"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="snormative.#rfc2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#svg11"> + <tbody id="snormative.#svg11"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> + <tbody id="sreferences.#informative"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-transitions-1_dev/html/chapter-10.htm b/tests/wpt/css-tests/css-transitions-1_dev/html/chapter-10.htm index 5193de330ea..a49e415f0a0 100644 --- a/tests/wpt/css-tests/css-transitions-1_dev/html/chapter-10.htm +++ b/tests/wpt/css-tests/css-transitions-1_dev/html/chapter-10.htm @@ -39,46 +39,46 @@ <tbody id="s10.#other-references"> <!-- 0 tests --> </tbody> - <tbody id="s10.#ref-CSS21"> + <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s10.#ref-CSS3-ANIMATIONS"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s10.#ref-CSS3-IMAGES"> + <tbody id="s.#editors-list"> <!-- 0 tests --> </tbody> - <tbody id="s10.#ref-CSS3CASCADE"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s10.#ref-CSS3COLOR"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s10.#ref-SMIL-ANIMATION"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s10.#ref-SVG11"> + <tbody id="sother-references.#ref-CSS21"> <!-- 0 tests --> </tbody> - <tbody id="s10.#ref-WCAG20"> + <tbody id="sother-references.#ref-CSS3-ANIMATIONS"> <!-- 0 tests --> </tbody> - <tbody id="s.#abstract"> + <tbody id="sother-references.#ref-CSS3-IMAGES"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="sother-references.#ref-CSS3CASCADE"> <!-- 0 tests --> </tbody> - <tbody id="s.#editors-list"> + <tbody id="sother-references.#ref-CSS3COLOR"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="sother-references.#ref-SMIL-ANIMATION"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="sother-references.#ref-SVG11"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="sother-references.#ref-WCAG20"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-transitions-1_dev/xhtml1/chapter-10.xht b/tests/wpt/css-tests/css-transitions-1_dev/xhtml1/chapter-10.xht index f3371cb4c68..15a91eed813 100644 --- a/tests/wpt/css-tests/css-transitions-1_dev/xhtml1/chapter-10.xht +++ b/tests/wpt/css-tests/css-transitions-1_dev/xhtml1/chapter-10.xht @@ -39,46 +39,46 @@ <tbody id="s10.#other-references"> <!-- 0 tests --> </tbody> - <tbody id="s10.#ref-CSS21"> + <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s10.#ref-CSS3-ANIMATIONS"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s10.#ref-CSS3-IMAGES"> + <tbody id="s.#editors-list"> <!-- 0 tests --> </tbody> - <tbody id="s10.#ref-CSS3CASCADE"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s10.#ref-CSS3COLOR"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s10.#ref-SMIL-ANIMATION"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s10.#ref-SVG11"> + <tbody id="sother-references.#ref-CSS21"> <!-- 0 tests --> </tbody> - <tbody id="s10.#ref-WCAG20"> + <tbody id="sother-references.#ref-CSS3-ANIMATIONS"> <!-- 0 tests --> </tbody> - <tbody id="s.#abstract"> + <tbody id="sother-references.#ref-CSS3-IMAGES"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="sother-references.#ref-CSS3CASCADE"> <!-- 0 tests --> </tbody> - <tbody id="s.#editors-list"> + <tbody id="sother-references.#ref-CSS3COLOR"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="sother-references.#ref-SMIL-ANIMATION"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="sother-references.#ref-SVG11"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="sother-references.#ref-WCAG20"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-ui-3_dev/html/chapter-3.htm b/tests/wpt/css-tests/css-ui-3_dev/html/chapter-3.htm index 3450004c9c2..7f78d518e9e 100644 --- a/tests/wpt/css-tests/css-ui-3_dev/html/chapter-3.htm +++ b/tests/wpt/css-tests/css-ui-3_dev/html/chapter-3.htm @@ -432,9 +432,6 @@ </td> </tr> </tbody> - <tbody id="s3.1.#box-sizing-example"> - <!-- 0 tests --> - </tbody> <tbody id="s3.1.#example-ede4dfdf"> <!-- 0 tests --> </tbody> diff --git a/tests/wpt/css-tests/css-ui-3_dev/html/chapter-5.htm b/tests/wpt/css-tests/css-ui-3_dev/html/chapter-5.htm index 1188ecde9ac..ee51c25fb3a 100644 --- a/tests/wpt/css-tests/css-ui-3_dev/html/chapter-5.htm +++ b/tests/wpt/css-tests/css-ui-3_dev/html/chapter-5.htm @@ -183,9 +183,6 @@ </td> </tr> </tbody> - <tbody id="s5.2.#awesome-table"> - <!-- 0 tests --> - </tbody> <tbody id="s5.2.#clip"> <!-- 0 tests --> </tbody> @@ -204,12 +201,6 @@ <tbody id="s5.2.#example-4d792064"> <!-- 0 tests --> </tbody> - <tbody id="s5.2.#example-c43e380d"> - <!-- 0 tests --> - </tbody> - <tbody id="s5.2.#example-d22e5e5b"> - <!-- 0 tests --> - </tbody> <tbody id="s5.2.#overflow-clip"> <!-- 0 tests --> </tbody> @@ -222,9 +213,6 @@ <tbody id="s5.2.#propdef-text-overflow"> <!-- 0 tests --> </tbody> - <tbody id="s5.2.#text-overflow-examples"> - <!-- 0 tests --> - </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-ui-3_dev/html/chapter-6.htm b/tests/wpt/css-tests/css-ui-3_dev/html/chapter-6.htm index 3708bd72428..365ba82fbc6 100644 --- a/tests/wpt/css-tests/css-ui-3_dev/html/chapter-6.htm +++ b/tests/wpt/css-tests/css-ui-3_dev/html/chapter-6.htm @@ -1724,111 +1724,15 @@ <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-backgrounds-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-color-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-images-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-values-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-writing-modes-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css1"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css2"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css21"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-background"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-writing-modes"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3bg"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3color"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css4-images"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-cssui"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-html5"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-png"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-rfc2119"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-select"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-svg"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-svg-integration"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-svg10"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-uax29"> - <!-- 0 tests --> - </tbody> <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> - <!-- 0 tests --> - </tbody> <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#cr-exit-criteria"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#example-f839f6c8"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#experimental"> - <!-- 0 tests --> - </tbody> <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-elsewhere"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#index-defined-here"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#informative"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#normative"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#partial"> - <!-- 0 tests --> - </tbody> <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> @@ -1841,15 +1745,9 @@ <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> - <!-- 0 tests --> - </tbody> <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> - <!-- 0 tests --> - </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-ui-3_dev/html/chapter-E.htm b/tests/wpt/css-tests/css-ui-3_dev/html/chapter-E.htm index d348bf7d43a..0689502c08a 100644 --- a/tests/wpt/css-tests/css-ui-3_dev/html/chapter-E.htm +++ b/tests/wpt/css-tests/css-ui-3_dev/html/chapter-E.htm @@ -33,6 +33,123 @@ <a href="https://www.w3.org/TR/css3-ui/#test-suite">E Test Suite</a></th></tr> <!-- 0 tests --> </tbody> + <tbody id="sconformance.#conformance-classes"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conventions"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#cr-exit-criteria"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#experimental"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#partial"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#testing"> + <!-- 0 tests --> + </tbody> + <tbody id="sconventions.#example-f839f6c8"> + <!-- 0 tests --> + </tbody> + <tbody id="sellipsis-scrolling.#example-c43e380d"> + <!-- 0 tests --> + </tbody> + <tbody id="sellipsis-scrolling.#example-d22e5e5b"> + <!-- 0 tests --> + </tbody> + <tbody id="sexample-4d792064.#awesome-table"> + <!-- 0 tests --> + </tbody> + <tbody id="sexample-4d792064.#text-overflow-examples"> + <!-- 0 tests --> + </tbody> + <tbody id="sexample-ede4dfdf.#box-sizing-example"> + <!-- 0 tests --> + </tbody> + <tbody id="sindex.#index-defined-elsewhere"> + <!-- 0 tests --> + </tbody> + <tbody id="sindex.#index-defined-here"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css1"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css2"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css3-background"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css4-images"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-cssui"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-html5"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-select"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-svg10"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-backgrounds-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-color-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-images-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-values-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-writing-modes-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css21"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-writing-modes"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3bg"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3color"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-png"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-rfc2119"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-svg"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-svg-integration"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-uax29"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#informative"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#normative"> + <!-- 0 tests --> + </tbody> + <tbody id="sstatus.#w3c_process_revision"> + <!-- 0 tests --> + </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-ui-3_dev/xhtml1/chapter-3.xht b/tests/wpt/css-tests/css-ui-3_dev/xhtml1/chapter-3.xht index 65147d9ad26..9f23ee6893a 100644 --- a/tests/wpt/css-tests/css-ui-3_dev/xhtml1/chapter-3.xht +++ b/tests/wpt/css-tests/css-ui-3_dev/xhtml1/chapter-3.xht @@ -432,9 +432,6 @@ </td> </tr> </tbody> - <tbody id="s3.1.#box-sizing-example"> - <!-- 0 tests --> - </tbody> <tbody id="s3.1.#example-ede4dfdf"> <!-- 0 tests --> </tbody> diff --git a/tests/wpt/css-tests/css-ui-3_dev/xhtml1/chapter-5.xht b/tests/wpt/css-tests/css-ui-3_dev/xhtml1/chapter-5.xht index aadc4b07df7..b6ea06c9f42 100644 --- a/tests/wpt/css-tests/css-ui-3_dev/xhtml1/chapter-5.xht +++ b/tests/wpt/css-tests/css-ui-3_dev/xhtml1/chapter-5.xht @@ -183,9 +183,6 @@ </td> </tr> </tbody> - <tbody id="s5.2.#awesome-table"> - <!-- 0 tests --> - </tbody> <tbody id="s5.2.#clip"> <!-- 0 tests --> </tbody> @@ -204,12 +201,6 @@ <tbody id="s5.2.#example-4d792064"> <!-- 0 tests --> </tbody> - <tbody id="s5.2.#example-c43e380d"> - <!-- 0 tests --> - </tbody> - <tbody id="s5.2.#example-d22e5e5b"> - <!-- 0 tests --> - </tbody> <tbody id="s5.2.#overflow-clip"> <!-- 0 tests --> </tbody> @@ -222,9 +213,6 @@ <tbody id="s5.2.#propdef-text-overflow"> <!-- 0 tests --> </tbody> - <tbody id="s5.2.#text-overflow-examples"> - <!-- 0 tests --> - </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-ui-3_dev/xhtml1/chapter-6.xht b/tests/wpt/css-tests/css-ui-3_dev/xhtml1/chapter-6.xht index 06275cfe4c6..c87a44d966c 100644 --- a/tests/wpt/css-tests/css-ui-3_dev/xhtml1/chapter-6.xht +++ b/tests/wpt/css-tests/css-ui-3_dev/xhtml1/chapter-6.xht @@ -1713,111 +1713,15 @@ <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-backgrounds-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-color-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-images-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-values-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-writing-modes-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css1"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css2"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css21"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-background"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-writing-modes"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3bg"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3color"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css4-images"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-cssui"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-html5"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-png"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-rfc2119"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-select"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-svg"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-svg-integration"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-svg10"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-uax29"> - <!-- 0 tests --> - </tbody> <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> - <!-- 0 tests --> - </tbody> <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#cr-exit-criteria"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#example-f839f6c8"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#experimental"> - <!-- 0 tests --> - </tbody> <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-elsewhere"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#index-defined-here"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#informative"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#normative"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#partial"> - <!-- 0 tests --> - </tbody> <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> @@ -1830,15 +1734,9 @@ <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> - <!-- 0 tests --> - </tbody> <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> - <!-- 0 tests --> - </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-ui-3_dev/xhtml1/chapter-E.xht b/tests/wpt/css-tests/css-ui-3_dev/xhtml1/chapter-E.xht index 133324ada35..60bcf0a5e2f 100644 --- a/tests/wpt/css-tests/css-ui-3_dev/xhtml1/chapter-E.xht +++ b/tests/wpt/css-tests/css-ui-3_dev/xhtml1/chapter-E.xht @@ -33,6 +33,123 @@ <a href="https://www.w3.org/TR/css3-ui/#test-suite">E Test Suite</a></th></tr> <!-- 0 tests --> </tbody> + <tbody id="sconformance.#conformance-classes"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conventions"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#cr-exit-criteria"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#experimental"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#partial"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#testing"> + <!-- 0 tests --> + </tbody> + <tbody id="sconventions.#example-f839f6c8"> + <!-- 0 tests --> + </tbody> + <tbody id="sellipsis-scrolling.#example-c43e380d"> + <!-- 0 tests --> + </tbody> + <tbody id="sellipsis-scrolling.#example-d22e5e5b"> + <!-- 0 tests --> + </tbody> + <tbody id="sexample-4d792064.#awesome-table"> + <!-- 0 tests --> + </tbody> + <tbody id="sexample-4d792064.#text-overflow-examples"> + <!-- 0 tests --> + </tbody> + <tbody id="sexample-ede4dfdf.#box-sizing-example"> + <!-- 0 tests --> + </tbody> + <tbody id="sindex.#index-defined-elsewhere"> + <!-- 0 tests --> + </tbody> + <tbody id="sindex.#index-defined-here"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css1"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css2"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css3-background"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css4-images"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-cssui"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-html5"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-select"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-svg10"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-backgrounds-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-color-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-images-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-values-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-writing-modes-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css21"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-writing-modes"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3bg"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3color"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-png"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-rfc2119"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-svg"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-svg-integration"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-uax29"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#informative"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#normative"> + <!-- 0 tests --> + </tbody> + <tbody id="sstatus.#w3c_process_revision"> + <!-- 0 tests --> + </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-ui-3_dev/xhtml1print/chapter-3.xht b/tests/wpt/css-tests/css-ui-3_dev/xhtml1print/chapter-3.xht index 65147d9ad26..9f23ee6893a 100644 --- a/tests/wpt/css-tests/css-ui-3_dev/xhtml1print/chapter-3.xht +++ b/tests/wpt/css-tests/css-ui-3_dev/xhtml1print/chapter-3.xht @@ -432,9 +432,6 @@ </td> </tr> </tbody> - <tbody id="s3.1.#box-sizing-example"> - <!-- 0 tests --> - </tbody> <tbody id="s3.1.#example-ede4dfdf"> <!-- 0 tests --> </tbody> diff --git a/tests/wpt/css-tests/css-ui-3_dev/xhtml1print/chapter-5.xht b/tests/wpt/css-tests/css-ui-3_dev/xhtml1print/chapter-5.xht index aadc4b07df7..b6ea06c9f42 100644 --- a/tests/wpt/css-tests/css-ui-3_dev/xhtml1print/chapter-5.xht +++ b/tests/wpt/css-tests/css-ui-3_dev/xhtml1print/chapter-5.xht @@ -183,9 +183,6 @@ </td> </tr> </tbody> - <tbody id="s5.2.#awesome-table"> - <!-- 0 tests --> - </tbody> <tbody id="s5.2.#clip"> <!-- 0 tests --> </tbody> @@ -204,12 +201,6 @@ <tbody id="s5.2.#example-4d792064"> <!-- 0 tests --> </tbody> - <tbody id="s5.2.#example-c43e380d"> - <!-- 0 tests --> - </tbody> - <tbody id="s5.2.#example-d22e5e5b"> - <!-- 0 tests --> - </tbody> <tbody id="s5.2.#overflow-clip"> <!-- 0 tests --> </tbody> @@ -222,9 +213,6 @@ <tbody id="s5.2.#propdef-text-overflow"> <!-- 0 tests --> </tbody> - <tbody id="s5.2.#text-overflow-examples"> - <!-- 0 tests --> - </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-ui-3_dev/xhtml1print/chapter-6.xht b/tests/wpt/css-tests/css-ui-3_dev/xhtml1print/chapter-6.xht index 06275cfe4c6..c87a44d966c 100644 --- a/tests/wpt/css-tests/css-ui-3_dev/xhtml1print/chapter-6.xht +++ b/tests/wpt/css-tests/css-ui-3_dev/xhtml1print/chapter-6.xht @@ -1713,111 +1713,15 @@ <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-backgrounds-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-color-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-images-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-values-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-writing-modes-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css1"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css2"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css21"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-background"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-writing-modes"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3bg"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3color"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css4-images"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-cssui"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-html5"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-png"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-rfc2119"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-select"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-svg"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-svg-integration"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-svg10"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-uax29"> - <!-- 0 tests --> - </tbody> <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> - <!-- 0 tests --> - </tbody> <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#cr-exit-criteria"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#example-f839f6c8"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#experimental"> - <!-- 0 tests --> - </tbody> <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-elsewhere"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#index-defined-here"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#informative"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#normative"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#partial"> - <!-- 0 tests --> - </tbody> <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> @@ -1830,15 +1734,9 @@ <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> - <!-- 0 tests --> - </tbody> <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> - <!-- 0 tests --> - </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-ui-3_dev/xhtml1print/chapter-E.xht b/tests/wpt/css-tests/css-ui-3_dev/xhtml1print/chapter-E.xht index 133324ada35..60bcf0a5e2f 100644 --- a/tests/wpt/css-tests/css-ui-3_dev/xhtml1print/chapter-E.xht +++ b/tests/wpt/css-tests/css-ui-3_dev/xhtml1print/chapter-E.xht @@ -33,6 +33,123 @@ <a href="https://www.w3.org/TR/css3-ui/#test-suite">E Test Suite</a></th></tr> <!-- 0 tests --> </tbody> + <tbody id="sconformance.#conformance-classes"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conventions"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#cr-exit-criteria"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#experimental"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#partial"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#testing"> + <!-- 0 tests --> + </tbody> + <tbody id="sconventions.#example-f839f6c8"> + <!-- 0 tests --> + </tbody> + <tbody id="sellipsis-scrolling.#example-c43e380d"> + <!-- 0 tests --> + </tbody> + <tbody id="sellipsis-scrolling.#example-d22e5e5b"> + <!-- 0 tests --> + </tbody> + <tbody id="sexample-4d792064.#awesome-table"> + <!-- 0 tests --> + </tbody> + <tbody id="sexample-4d792064.#text-overflow-examples"> + <!-- 0 tests --> + </tbody> + <tbody id="sexample-ede4dfdf.#box-sizing-example"> + <!-- 0 tests --> + </tbody> + <tbody id="sindex.#index-defined-elsewhere"> + <!-- 0 tests --> + </tbody> + <tbody id="sindex.#index-defined-here"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css1"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css2"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css3-background"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css4-images"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-cssui"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-html5"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-select"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-svg10"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-backgrounds-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-color-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-images-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-values-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-writing-modes-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css21"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-writing-modes"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3bg"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3color"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-png"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-rfc2119"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-svg"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-svg-integration"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-uax29"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#informative"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#normative"> + <!-- 0 tests --> + </tbody> + <tbody id="sstatus.#w3c_process_revision"> + <!-- 0 tests --> + </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-values-3_dev/html/chapter-5.htm b/tests/wpt/css-tests/css-values-3_dev/html/chapter-5.htm index 95cbfdc523e..b573fe23f01 100644 --- a/tests/wpt/css-tests/css-values-3_dev/html/chapter-5.htm +++ b/tests/wpt/css-tests/css-values-3_dev/html/chapter-5.htm @@ -13,7 +13,7 @@ <body> <h1>CSS Values and Units Module Level 3 CR Test Suite</h1> - <h2>Distance Units: the <length> type (30 tests)</h2> + <h2>Distance Units: the <length> type (32 tests)</h2> <table width="100%"> <col id="test-column"> <col id="refs-column"> @@ -169,7 +169,7 @@ <tr><th colspan="4" scope="rowgroup"> <a href="#s5.1.2">+</a> <a href="https://www.w3.org/TR/css3-values/#viewport-relative-lengths">5.1.2 Viewport-percentage lengths: the vw, vh, vmin, vmax units</a></th></tr> - <!-- 21 tests --> + <!-- 23 tests --> <tr id="absolute_length_units-5.1.2" class=""> <td> <a href="absolute_length_units.htm">absolute_length_units</a></td> @@ -335,6 +335,17 @@ </ul> </td> </tr> + <tr id="vh-support-transform-origin-iframe-5.1.2" class=""> + <td> + <a href="vh-support-transform-origin-iframe.htm">vh-support-transform-origin-iframe</a></td> + <td></td> + <td></td> + <td>Viewports units are supported in transform properties (iframe) + <ul class="assert"> + <li>Viewports units are supported in transform properties (translate)</li> + </ul> + </td> + </tr> <tr id="vh-support-transform-translate-5.1.2" class=""> <td> <a href="vh-support-transform-translate.htm">vh-support-transform-translate</a></td> @@ -346,6 +357,17 @@ </ul> </td> </tr> + <tr id="vh-support-transform-translate-iframe-5.1.2" class=""> + <td> + <a href="vh-support-transform-translate-iframe.htm">vh-support-transform-translate-iframe</a></td> + <td></td> + <td></td> + <td>Viewports units are supported in transform properties (iframe) + <ul class="assert"> + <li>Viewports units are supported in transform properties (translate)</li> + </ul> + </td> + </tr> <tr id="vh-zero-support-5.1.2" class=""> <td> <a href="vh-zero-support.htm">vh-zero-support</a></td> diff --git a/tests/wpt/css-tests/css-values-3_dev/html/chapter-9.htm b/tests/wpt/css-tests/css-values-3_dev/html/chapter-9.htm index b2ea19cf5ef..bfdf5647a13 100644 --- a/tests/wpt/css-tests/css-values-3_dev/html/chapter-9.htm +++ b/tests/wpt/css-tests/css-values-3_dev/html/chapter-9.htm @@ -45,160 +45,160 @@ <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-compositing-1"> + <tbody id="s.#changes"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-animations-1"> + <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-backgrounds-3"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-break-3"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-cascade-4"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-color-3"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-color-4"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-counter-styles-3"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-fonts-3"> + <tbody id="sconformance.#conformance-classes"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-images-3"> + <tbody id="sconformance.#conventions"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-overflow-3"> + <tbody id="sconformance.#experimental"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-syntax-3"> + <tbody id="sconformance.#partial"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-text-3"> + <tbody id="sconformance.#testing"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-text-decor-3"> + <tbody id="sconventions.#example-f839f6c8"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-transitions-1"> + <tbody id="sindex.#index-defined-elsewhere"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-ui-3"> + <tbody id="sindex.#index-defined-here"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css21"> + <tbody id="sinformative.#biblio-mediaq"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-fonts"> + <tbody id="sinformative.#biblio-rfc6694"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-images"> + <tbody id="snormative.#biblio-compositing-1"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3bg"> + <tbody id="snormative.#biblio-css-animations-1"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3cascade"> + <tbody id="snormative.#biblio-css-backgrounds-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3color"> + <tbody id="snormative.#biblio-css-break-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3namespace"> + <tbody id="snormative.#biblio-css-cascade-4"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3page"> + <tbody id="snormative.#biblio-css-color-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3syn"> + <tbody id="snormative.#biblio-css-color-4"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-dom-ls"> + <tbody id="snormative.#biblio-css-counter-styles-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-filters-1"> + <tbody id="snormative.#biblio-css-fonts-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-mediaq"> + <tbody id="snormative.#biblio-css-images-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-mediaqueries-4"> + <tbody id="snormative.#biblio-css-overflow-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-rfc2119"> + <tbody id="snormative.#biblio-css-syntax-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-rfc6694"> + <tbody id="snormative.#biblio-css-text-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-selectors-4"> + <tbody id="snormative.#biblio-css-text-decor-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-url"> + <tbody id="snormative.#biblio-css-transitions-1"> <!-- 0 tests --> </tbody> - <tbody id="s.#changes"> + <tbody id="snormative.#biblio-css-ui-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance"> + <tbody id="snormative.#biblio-css21"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> + <tbody id="snormative.#biblio-css3-fonts"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="snormative.#biblio-css3-images"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> + <tbody id="snormative.#biblio-css3bg"> <!-- 0 tests --> </tbody> - <tbody id="s.#example-f839f6c8"> + <tbody id="snormative.#biblio-css3cascade"> <!-- 0 tests --> </tbody> - <tbody id="s.#experimental"> + <tbody id="snormative.#biblio-css3color"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="snormative.#biblio-css3namespace"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-elsewhere"> + <tbody id="snormative.#biblio-css3page"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-here"> + <tbody id="snormative.#biblio-css3syn"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="snormative.#biblio-dom-ls"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="snormative.#biblio-filters-1"> <!-- 0 tests --> </tbody> - <tbody id="s.#partial"> + <tbody id="snormative.#biblio-mediaqueries-4"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="snormative.#biblio-rfc2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#biblio-selectors-4"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="snormative.#biblio-url"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> + <tbody id="sreferences.#informative"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> + <tbody id="sstatus.#w3c_process_revision"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-values-3_dev/html/toc.htm b/tests/wpt/css-tests/css-values-3_dev/html/toc.htm index 10a0ffa008d..ccc64ff69e0 100644 --- a/tests/wpt/css-tests/css-values-3_dev/html/toc.htm +++ b/tests/wpt/css-tests/css-values-3_dev/html/toc.htm @@ -42,7 +42,7 @@ <tbody id="s5"> <tr><th><a href="chapter-5.htm">Chapter 5 - Distance Units: the <length> type</a></th> - <td>(30 Tests)</td></tr> + <td>(32 Tests)</td></tr> </tbody> <tbody id="s6"> <tr><th><a href="chapter-6.htm">Chapter 6 - diff --git a/tests/wpt/css-tests/css-values-3_dev/html/vh-support-transform-origin-iframe.htm b/tests/wpt/css-tests/css-values-3_dev/html/vh-support-transform-origin-iframe.htm new file mode 100644 index 00000000000..aca5d3a0756 --- /dev/null +++ b/tests/wpt/css-tests/css-values-3_dev/html/vh-support-transform-origin-iframe.htm @@ -0,0 +1,48 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title> + CSS Values and Units Test: + Viewports units are supported in transform properties (iframe) + </title> + <meta content=" + Viewports units are supported in transform properties (translate) + " name="assert"> + + <link href="mailto:fremycompany.developer@yahoo.fr" rel="author" title="François REMY"> + + <link href="http://www.w3.org/TR/css3-values/#viewport-relative-lengths" rel="help"> + <link href="http://www.w3.org/TR/css3-2d-transforms/#css-values" rel="help"> + + <style type="text/css"> + + html, body { margin: 0px; padding: 0px; overflow: hidden; } + + html { background: green; } + #target, #over-target { + position: absolute; top: 0px; left: 0px; + width: 100px; height: 100px; + transform: scale(0.5); + } + + #target { + background: red; + transform-origin: 200px 200px; + } + + #over-target { + background: green; + transform-origin: 50vw 50vh; + } + + </style> + +</head> +<body> + + <div id="target"></div> + <div id="over-target"></div> + + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-values-3_dev/html/vh-support-transform-origin.htm b/tests/wpt/css-tests/css-values-3_dev/html/vh-support-transform-origin.htm index debb88c3535..108f349365d 100644 --- a/tests/wpt/css-tests/css-values-3_dev/html/vh-support-transform-origin.htm +++ b/tests/wpt/css-tests/css-values-3_dev/html/vh-support-transform-origin.htm @@ -28,7 +28,7 @@ </head> <body> - <iframe src="iframe/vh-support-transform-origin.html"></iframe> + <iframe src="iframe/vh-support-transform-origin-iframe.html"></iframe> diff --git a/tests/wpt/css-tests/css-values-3_dev/html/vh-support-transform-translate-iframe.htm b/tests/wpt/css-tests/css-values-3_dev/html/vh-support-transform-translate-iframe.htm new file mode 100644 index 00000000000..69de40e10a7 --- /dev/null +++ b/tests/wpt/css-tests/css-values-3_dev/html/vh-support-transform-translate-iframe.htm @@ -0,0 +1,47 @@ +<!DOCTYPE html> +<html><head> + <meta charset="utf-8"> + <title> + CSS Values and Units Test: + Viewports units are supported in transform properties (iframe) + </title> + <meta content=" + Viewports units are supported in transform properties (translate) + " name="assert"> + + <link href="mailto:fremycompany.developer@yahoo.fr" rel="author" title="François REMY"> + + <link href="http://www.w3.org/TR/css3-values/#viewport-relative-lengths" rel="help"> + <link href="http://www.w3.org/TR/css3-2d-transforms/#css-values" rel="help"> + + <style type="text/css"> + + html, body { margin: 0px; padding: 0px; overflow: hidden; } + + html { background: green; } + #target, #over-target { + position: absolute; top: 0px; left: 0px; + width: 100px; height: 100px; + } + + #target { + background: red; + transform: translate(200px, 200px); + } + + #over-target { + background: green; + transform: translate(50vw, 50vh); + } + + </style> + +</head> +<body> + + <div id="target"></div> + <div id="over-target"></div> + + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-values-3_dev/html/vh-support-transform-translate.htm b/tests/wpt/css-tests/css-values-3_dev/html/vh-support-transform-translate.htm index d615b52451e..3ad042c33a0 100644 --- a/tests/wpt/css-tests/css-values-3_dev/html/vh-support-transform-translate.htm +++ b/tests/wpt/css-tests/css-values-3_dev/html/vh-support-transform-translate.htm @@ -28,7 +28,7 @@ </head> <body> - <iframe src="iframe/vh-support-transform-translate.html"></iframe> + <iframe src="iframe/vh-support-transform-translate-iframe.html"></iframe> diff --git a/tests/wpt/css-tests/css-values-3_dev/implementation-report-TEMPLATE.data b/tests/wpt/css-tests/css-values-3_dev/implementation-report-TEMPLATE.data index 105ff42ee6f..375feddb6b2 100644 --- a/tests/wpt/css-tests/css-values-3_dev/implementation-report-TEMPLATE.data +++ b/tests/wpt/css-tests/css-values-3_dev/implementation-report-TEMPLATE.data @@ -189,10 +189,14 @@ html/vh-support-atviewport.htm 246c990528ff3491a35329ffa4b7a9274160510c ? xhtml1/vh-support-atviewport.xht 246c990528ff3491a35329ffa4b7a9274160510c ? html/vh-support-margin.htm 823e9f5c74674f088c75bb3e0c80b858e7c4fb00 ? xhtml1/vh-support-margin.xht 823e9f5c74674f088c75bb3e0c80b858e7c4fb00 ? -html/vh-support-transform-origin.htm 18233d6b7df8680145b4619278291e7f3452f02a ? -xhtml1/vh-support-transform-origin.xht 18233d6b7df8680145b4619278291e7f3452f02a ? -html/vh-support-transform-translate.htm 6005c29efe52ea0eedb402ba93150a893c06940d ? -xhtml1/vh-support-transform-translate.xht 6005c29efe52ea0eedb402ba93150a893c06940d ? +html/vh-support-transform-origin-iframe.htm 409348efd2507b792a7becc90d3307f493ac1af3 ? +xhtml1/vh-support-transform-origin-iframe.xht 409348efd2507b792a7becc90d3307f493ac1af3 ? +html/vh-support-transform-origin.htm f977bc1302563530a5adc50d30f37d9cb6812433 ? +xhtml1/vh-support-transform-origin.xht f977bc1302563530a5adc50d30f37d9cb6812433 ? +html/vh-support-transform-translate-iframe.htm 35b4d7b37d8e55337eb31daf9e7b9fcb49c8f1bf ? +xhtml1/vh-support-transform-translate-iframe.xht 35b4d7b37d8e55337eb31daf9e7b9fcb49c8f1bf ? +html/vh-support-transform-translate.htm d3c2dfb59b35972d234aee75a0d709cb4a408b06 ? +xhtml1/vh-support-transform-translate.xht d3c2dfb59b35972d234aee75a0d709cb4a408b06 ? html/vh-support.htm 2be374c5e5ec334fe4c6c3417901f70c910e1384 ? xhtml1/vh-support.xht 2be374c5e5ec334fe4c6c3417901f70c910e1384 ? html/vh-zero-support.htm 406973d43e0cda26fba220dc4241b0ef88ea9cb7 ? diff --git a/tests/wpt/css-tests/css-values-3_dev/testinfo.data b/tests/wpt/css-tests/css-values-3_dev/testinfo.data index 6462d3b3139..b4974a3e7e9 100644 --- a/tests/wpt/css-tests/css-values-3_dev/testinfo.data +++ b/tests/wpt/css-tests/css-values-3_dev/testinfo.data @@ -93,8 +93,10 @@ vh-interpolate-vh reference/all-green Viewport units are interpolated correctly vh-support reference/all-green Viewports units are supported in sizing properties http://www.w3.org/TR/css3-values/#viewport-relative-lengths 2be374c5e5ec334fe4c6c3417901f70c910e1384 `François REMY`<mailto:fremycompany.developer@yahoo.fr> Viewports units are supported in sizing properties vh-support-atviewport reference/all-green Viewports units are supported in @viewport rules http://www.w3.org/TR/css3-values/#viewport-relative-lengths,https://drafts.csswg.org/css-device-adapt-1/ 246c990528ff3491a35329ffa4b7a9274160510c `François REMY`<mailto:fremycompany.developer@yahoo.fr> Viewports units are supported in @viewport rules vh-support-margin reference/all-green Viewports units are supported in margin properties http://www.w3.org/TR/css3-values/#viewport-relative-lengths 823e9f5c74674f088c75bb3e0c80b858e7c4fb00 `François REMY`<mailto:fremycompany.developer@yahoo.fr> Viewports units are supported in margin properties -vh-support-transform-origin reference/all-green Viewports units are supported in transform properties http://www.w3.org/TR/css3-values/#viewport-relative-lengths,http://www.w3.org/TR/css3-2d-transforms/#css-values 18233d6b7df8680145b4619278291e7f3452f02a `François REMY`<mailto:fremycompany.developer@yahoo.fr> Viewports units are supported in transform properties -vh-support-transform-translate reference/all-green Viewports units are supported in transform properties http://www.w3.org/TR/css3-values/#viewport-relative-lengths,http://www.w3.org/TR/css3-2d-transforms/#css-values 6005c29efe52ea0eedb402ba93150a893c06940d `François REMY`<mailto:fremycompany.developer@yahoo.fr> Viewports units are supported in transform properties (translate) +vh-support-transform-origin reference/all-green Viewports units are supported in transform properties http://www.w3.org/TR/css3-values/#viewport-relative-lengths,http://www.w3.org/TR/css3-2d-transforms/#css-values f977bc1302563530a5adc50d30f37d9cb6812433 `François REMY`<mailto:fremycompany.developer@yahoo.fr> Viewports units are supported in transform properties +vh-support-transform-origin-iframe Viewports units are supported in transform properties (iframe) http://www.w3.org/TR/css3-values/#viewport-relative-lengths,http://www.w3.org/TR/css3-2d-transforms/#css-values 409348efd2507b792a7becc90d3307f493ac1af3 `François REMY`<mailto:fremycompany.developer@yahoo.fr> Viewports units are supported in transform properties (translate) +vh-support-transform-translate reference/all-green Viewports units are supported in transform properties http://www.w3.org/TR/css3-values/#viewport-relative-lengths,http://www.w3.org/TR/css3-2d-transforms/#css-values d3c2dfb59b35972d234aee75a0d709cb4a408b06 `François REMY`<mailto:fremycompany.developer@yahoo.fr> Viewports units are supported in transform properties (translate) +vh-support-transform-translate-iframe Viewports units are supported in transform properties (iframe) http://www.w3.org/TR/css3-values/#viewport-relative-lengths,http://www.w3.org/TR/css3-2d-transforms/#css-values 35b4d7b37d8e55337eb31daf9e7b9fcb49c8f1bf `François REMY`<mailto:fremycompany.developer@yahoo.fr> Viewports units are supported in transform properties (translate) vh-zero-support reference/all-green 0vh and 0vw are correctly treated as 0px http://www.w3.org/TR/css3-values/#viewport-relative-lengths 406973d43e0cda26fba220dc4241b0ef88ea9cb7 `François REMY`<mailto:fremycompany.developer@yahoo.fr> 0vh and 0vw are correctly treated as 0px vh_not_refreshing_on_chrome reference/vh_not_refreshing_on_chrome-ref vh-based dimension doesn't change when the element's other dimension doesn't change. http://www.w3.org/TR/css3-values/#viewport-relative-lengths a27560454ad4d3e11996f4a3a9ed7d66f4b639b8 `Marc Bourlon`<mailto:marc@bourlon.com> vh-based dimension doesn't change when the element's other dimension doesn't change. vh_not_refreshing_on_chrome_iframe reference/vh_not_refreshing_on_chrome-ref vh-based dimension doesn't change when the element other dimension doesn't change. http://www.w3.org/TR/css3-values/#viewport-relative-lengths 1d8864a842fd30399d2ec65a030154145bda58f4 `Marc Bourlon`<mailto:marc@bourlon.com> vh-based dimension doesn't change when the element other dimension doesn't change. Bug for Chrome 19.0.1084.56 / Mac OS X 10.6.8 diff --git a/tests/wpt/css-tests/css-values-3_dev/xhtml1/chapter-5.xht b/tests/wpt/css-tests/css-values-3_dev/xhtml1/chapter-5.xht index c49f86bd104..79c833b5944 100644 --- a/tests/wpt/css-tests/css-values-3_dev/xhtml1/chapter-5.xht +++ b/tests/wpt/css-tests/css-values-3_dev/xhtml1/chapter-5.xht @@ -13,7 +13,7 @@ <body> <h1>CSS Values and Units Module Level 3 CR Test Suite</h1> - <h2>Distance Units: the <length> type (30 tests)</h2> + <h2>Distance Units: the <length> type (32 tests)</h2> <table width="100%"> <col id="test-column"></col> <col id="refs-column"></col> @@ -169,7 +169,7 @@ <tr><th colspan="4" scope="rowgroup"> <a href="#s5.1.2">+</a> <a href="https://www.w3.org/TR/css3-values/#viewport-relative-lengths">5.1.2 Viewport-percentage lengths: the vw, vh, vmin, vmax units</a></th></tr> - <!-- 21 tests --> + <!-- 23 tests --> <tr id="absolute_length_units-5.1.2" class=""> <td> <a href="absolute_length_units.xht">absolute_length_units</a></td> @@ -335,6 +335,17 @@ </ul> </td> </tr> + <tr id="vh-support-transform-origin-iframe-5.1.2" class=""> + <td> + <a href="vh-support-transform-origin-iframe.xht">vh-support-transform-origin-iframe</a></td> + <td></td> + <td></td> + <td>Viewports units are supported in transform properties (iframe) + <ul class="assert"> + <li>Viewports units are supported in transform properties (translate)</li> + </ul> + </td> + </tr> <tr id="vh-support-transform-translate-5.1.2" class=""> <td> <a href="vh-support-transform-translate.xht">vh-support-transform-translate</a></td> @@ -346,6 +357,17 @@ </ul> </td> </tr> + <tr id="vh-support-transform-translate-iframe-5.1.2" class=""> + <td> + <a href="vh-support-transform-translate-iframe.xht">vh-support-transform-translate-iframe</a></td> + <td></td> + <td></td> + <td>Viewports units are supported in transform properties (iframe) + <ul class="assert"> + <li>Viewports units are supported in transform properties (translate)</li> + </ul> + </td> + </tr> <tr id="vh-zero-support-5.1.2" class=""> <td> <a href="vh-zero-support.xht">vh-zero-support</a></td> diff --git a/tests/wpt/css-tests/css-values-3_dev/xhtml1/chapter-9.xht b/tests/wpt/css-tests/css-values-3_dev/xhtml1/chapter-9.xht index 5536eb894dd..9c6f38254ed 100644 --- a/tests/wpt/css-tests/css-values-3_dev/xhtml1/chapter-9.xht +++ b/tests/wpt/css-tests/css-values-3_dev/xhtml1/chapter-9.xht @@ -45,160 +45,160 @@ <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-compositing-1"> + <tbody id="s.#changes"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-animations-1"> + <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-backgrounds-3"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-break-3"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-cascade-4"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-color-3"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-color-4"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-counter-styles-3"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-fonts-3"> + <tbody id="sconformance.#conformance-classes"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-images-3"> + <tbody id="sconformance.#conventions"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-overflow-3"> + <tbody id="sconformance.#experimental"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-syntax-3"> + <tbody id="sconformance.#partial"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-text-3"> + <tbody id="sconformance.#testing"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-text-decor-3"> + <tbody id="sconventions.#example-f839f6c8"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-transitions-1"> + <tbody id="sindex.#index-defined-elsewhere"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-ui-3"> + <tbody id="sindex.#index-defined-here"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css21"> + <tbody id="sinformative.#biblio-mediaq"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-fonts"> + <tbody id="sinformative.#biblio-rfc6694"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-images"> + <tbody id="snormative.#biblio-compositing-1"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3bg"> + <tbody id="snormative.#biblio-css-animations-1"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3cascade"> + <tbody id="snormative.#biblio-css-backgrounds-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3color"> + <tbody id="snormative.#biblio-css-break-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3namespace"> + <tbody id="snormative.#biblio-css-cascade-4"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3page"> + <tbody id="snormative.#biblio-css-color-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3syn"> + <tbody id="snormative.#biblio-css-color-4"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-dom-ls"> + <tbody id="snormative.#biblio-css-counter-styles-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-filters-1"> + <tbody id="snormative.#biblio-css-fonts-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-mediaq"> + <tbody id="snormative.#biblio-css-images-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-mediaqueries-4"> + <tbody id="snormative.#biblio-css-overflow-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-rfc2119"> + <tbody id="snormative.#biblio-css-syntax-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-rfc6694"> + <tbody id="snormative.#biblio-css-text-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-selectors-4"> + <tbody id="snormative.#biblio-css-text-decor-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-url"> + <tbody id="snormative.#biblio-css-transitions-1"> <!-- 0 tests --> </tbody> - <tbody id="s.#changes"> + <tbody id="snormative.#biblio-css-ui-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance"> + <tbody id="snormative.#biblio-css21"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> + <tbody id="snormative.#biblio-css3-fonts"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="snormative.#biblio-css3-images"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> + <tbody id="snormative.#biblio-css3bg"> <!-- 0 tests --> </tbody> - <tbody id="s.#example-f839f6c8"> + <tbody id="snormative.#biblio-css3cascade"> <!-- 0 tests --> </tbody> - <tbody id="s.#experimental"> + <tbody id="snormative.#biblio-css3color"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="snormative.#biblio-css3namespace"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-elsewhere"> + <tbody id="snormative.#biblio-css3page"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-here"> + <tbody id="snormative.#biblio-css3syn"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="snormative.#biblio-dom-ls"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="snormative.#biblio-filters-1"> <!-- 0 tests --> </tbody> - <tbody id="s.#partial"> + <tbody id="snormative.#biblio-mediaqueries-4"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="snormative.#biblio-rfc2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#biblio-selectors-4"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="snormative.#biblio-url"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> + <tbody id="sreferences.#informative"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> + <tbody id="sstatus.#w3c_process_revision"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-values-3_dev/xhtml1/toc.xht b/tests/wpt/css-tests/css-values-3_dev/xhtml1/toc.xht index 29790ced6d4..11be4a62253 100644 --- a/tests/wpt/css-tests/css-values-3_dev/xhtml1/toc.xht +++ b/tests/wpt/css-tests/css-values-3_dev/xhtml1/toc.xht @@ -42,7 +42,7 @@ <tbody id="s5"> <tr><th><a href="chapter-5.xht">Chapter 5 - Distance Units: the <length> type</a></th> - <td>(30 Tests)</td></tr> + <td>(32 Tests)</td></tr> </tbody> <tbody id="s6"> <tr><th><a href="chapter-6.xht">Chapter 6 - diff --git a/tests/wpt/css-tests/css-values-3_dev/xhtml1/vh-support-transform-origin-iframe.xht b/tests/wpt/css-tests/css-values-3_dev/xhtml1/vh-support-transform-origin-iframe.xht new file mode 100644 index 00000000000..18c2c2dd065 --- /dev/null +++ b/tests/wpt/css-tests/css-values-3_dev/xhtml1/vh-support-transform-origin-iframe.xht @@ -0,0 +1,48 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title> + CSS Values and Units Test: + Viewports units are supported in transform properties (iframe) + </title> + <meta content=" + Viewports units are supported in transform properties (translate) + " name="assert" /> + + <link href="mailto:fremycompany.developer@yahoo.fr" rel="author" title="François REMY" /> + + <link href="http://www.w3.org/TR/css3-values/#viewport-relative-lengths" rel="help" /> + <link href="http://www.w3.org/TR/css3-2d-transforms/#css-values" rel="help" /> + + <style type="text/css"> + + html, body { margin: 0px; padding: 0px; overflow: hidden; } + + html { background: green; } + #target, #over-target { + position: absolute; top: 0px; left: 0px; + width: 100px; height: 100px; + transform: scale(0.5); + } + + #target { + background: red; + transform-origin: 200px 200px; + } + + #over-target { + background: green; + transform-origin: 50vw 50vh; + } + + </style> + +</head> +<body> + + <div id="target"></div> + <div id="over-target"></div> + + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-values-3_dev/xhtml1/vh-support-transform-origin.xht b/tests/wpt/css-tests/css-values-3_dev/xhtml1/vh-support-transform-origin.xht index 412b41eefb1..b9cf40ac14e 100644 --- a/tests/wpt/css-tests/css-values-3_dev/xhtml1/vh-support-transform-origin.xht +++ b/tests/wpt/css-tests/css-values-3_dev/xhtml1/vh-support-transform-origin.xht @@ -28,7 +28,7 @@ </head> <body> - <iframe src="iframe/vh-support-transform-origin.html"></iframe> + <iframe src="iframe/vh-support-transform-origin-iframe.html"></iframe> diff --git a/tests/wpt/css-tests/css-values-3_dev/xhtml1/vh-support-transform-translate-iframe.xht b/tests/wpt/css-tests/css-values-3_dev/xhtml1/vh-support-transform-translate-iframe.xht new file mode 100644 index 00000000000..ec57af5848d --- /dev/null +++ b/tests/wpt/css-tests/css-values-3_dev/xhtml1/vh-support-transform-translate-iframe.xht @@ -0,0 +1,47 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> + <meta charset="utf-8" /> + <title> + CSS Values and Units Test: + Viewports units are supported in transform properties (iframe) + </title> + <meta content=" + Viewports units are supported in transform properties (translate) + " name="assert" /> + + <link href="mailto:fremycompany.developer@yahoo.fr" rel="author" title="François REMY" /> + + <link href="http://www.w3.org/TR/css3-values/#viewport-relative-lengths" rel="help" /> + <link href="http://www.w3.org/TR/css3-2d-transforms/#css-values" rel="help" /> + + <style type="text/css"> + + html, body { margin: 0px; padding: 0px; overflow: hidden; } + + html { background: green; } + #target, #over-target { + position: absolute; top: 0px; left: 0px; + width: 100px; height: 100px; + } + + #target { + background: red; + transform: translate(200px, 200px); + } + + #over-target { + background: green; + transform: translate(50vw, 50vh); + } + + </style> + +</head> +<body> + + <div id="target"></div> + <div id="over-target"></div> + + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css-values-3_dev/xhtml1/vh-support-transform-translate.xht b/tests/wpt/css-tests/css-values-3_dev/xhtml1/vh-support-transform-translate.xht index 6edc9985ce2..c9748901713 100644 --- a/tests/wpt/css-tests/css-values-3_dev/xhtml1/vh-support-transform-translate.xht +++ b/tests/wpt/css-tests/css-values-3_dev/xhtml1/vh-support-transform-translate.xht @@ -28,7 +28,7 @@ </head> <body> - <iframe src="iframe/vh-support-transform-translate.html"></iframe> + <iframe src="iframe/vh-support-transform-translate-iframe.html"></iframe> diff --git a/tests/wpt/css-tests/css-variables-1_dev/html/chapter-6.htm b/tests/wpt/css-tests/css-variables-1_dev/html/chapter-6.htm index d3e6431b0aa..78b8fa5186f 100644 --- a/tests/wpt/css-tests/css-variables-1_dev/html/chapter-6.htm +++ b/tests/wpt/css-tests/css-variables-1_dev/html/chapter-6.htm @@ -36,106 +36,106 @@ <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-animations-1"> + <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-backgrounds-3"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-cascade-4"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-color-3"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-conditional-3"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-extensions"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-syntax-3"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-values-3"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css21"> + <tbody id="sconform-responsible.#conform-future-proofing"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-cssom"> + <tbody id="sconform-responsible.#conform-partial"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-dom"> + <tbody id="sconform-responsible.#conform-testing"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-rfc2119"> + <tbody id="sconformance.#conform-classes"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-selectors-4"> + <tbody id="sconformance.#conform-responsible"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-classes"> + <tbody id="sconformance.#cr-exit-criteria"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-future-proofing"> + <tbody id="sconformance.#document-conventions"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-partial"> + <tbody id="sdocument-conventions.#example-a13d9f9a"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-responsible"> + <tbody id="sindex.#index-defined-elsewhere"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-testing"> + <tbody id="sindex.#index-defined-here"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance"> + <tbody id="sinformative.#biblio-css-backgrounds-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="sinformative.#biblio-css-color-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#cr-exit-criteria"> + <tbody id="sinformative.#biblio-css-extensions"> <!-- 0 tests --> </tbody> - <tbody id="s.#document-conventions"> + <tbody id="snormative.#biblio-css-animations-1"> <!-- 0 tests --> </tbody> - <tbody id="s.#example-a13d9f9a"> + <tbody id="snormative.#biblio-css-cascade-4"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="snormative.#biblio-css-conditional-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-elsewhere"> + <tbody id="snormative.#biblio-css-syntax-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-here"> + <tbody id="snormative.#biblio-css-values-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="snormative.#biblio-css21"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="snormative.#biblio-cssom"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="snormative.#biblio-dom"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="snormative.#biblio-rfc2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#biblio-selectors-4"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="sreferences.#informative"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> + <tbody id="sstatus.#w3c_process_revision"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-variables-1_dev/xhtml1/chapter-6.xht b/tests/wpt/css-tests/css-variables-1_dev/xhtml1/chapter-6.xht index c1321c8b103..845ff71527d 100644 --- a/tests/wpt/css-tests/css-variables-1_dev/xhtml1/chapter-6.xht +++ b/tests/wpt/css-tests/css-variables-1_dev/xhtml1/chapter-6.xht @@ -36,106 +36,106 @@ <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-animations-1"> + <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-backgrounds-3"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-cascade-4"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-color-3"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-conditional-3"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-extensions"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-syntax-3"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-values-3"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css21"> + <tbody id="sconform-responsible.#conform-future-proofing"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-cssom"> + <tbody id="sconform-responsible.#conform-partial"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-dom"> + <tbody id="sconform-responsible.#conform-testing"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-rfc2119"> + <tbody id="sconformance.#conform-classes"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-selectors-4"> + <tbody id="sconformance.#conform-responsible"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-classes"> + <tbody id="sconformance.#cr-exit-criteria"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-future-proofing"> + <tbody id="sconformance.#document-conventions"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-partial"> + <tbody id="sdocument-conventions.#example-a13d9f9a"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-responsible"> + <tbody id="sindex.#index-defined-elsewhere"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-testing"> + <tbody id="sindex.#index-defined-here"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance"> + <tbody id="sinformative.#biblio-css-backgrounds-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="sinformative.#biblio-css-color-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#cr-exit-criteria"> + <tbody id="sinformative.#biblio-css-extensions"> <!-- 0 tests --> </tbody> - <tbody id="s.#document-conventions"> + <tbody id="snormative.#biblio-css-animations-1"> <!-- 0 tests --> </tbody> - <tbody id="s.#example-a13d9f9a"> + <tbody id="snormative.#biblio-css-cascade-4"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="snormative.#biblio-css-conditional-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-elsewhere"> + <tbody id="snormative.#biblio-css-syntax-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-here"> + <tbody id="snormative.#biblio-css-values-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="snormative.#biblio-css21"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="snormative.#biblio-cssom"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="snormative.#biblio-dom"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="snormative.#biblio-rfc2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#biblio-selectors-4"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="sreferences.#informative"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> + <tbody id="sstatus.#w3c_process_revision"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-variables-1_dev/xhtml1print/chapter-6.xht b/tests/wpt/css-tests/css-variables-1_dev/xhtml1print/chapter-6.xht index c1321c8b103..845ff71527d 100644 --- a/tests/wpt/css-tests/css-variables-1_dev/xhtml1print/chapter-6.xht +++ b/tests/wpt/css-tests/css-variables-1_dev/xhtml1print/chapter-6.xht @@ -36,106 +36,106 @@ <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-animations-1"> + <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-backgrounds-3"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-cascade-4"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-color-3"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-conditional-3"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-extensions"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-syntax-3"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-values-3"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css21"> + <tbody id="sconform-responsible.#conform-future-proofing"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-cssom"> + <tbody id="sconform-responsible.#conform-partial"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-dom"> + <tbody id="sconform-responsible.#conform-testing"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-rfc2119"> + <tbody id="sconformance.#conform-classes"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-selectors-4"> + <tbody id="sconformance.#conform-responsible"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-classes"> + <tbody id="sconformance.#cr-exit-criteria"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-future-proofing"> + <tbody id="sconformance.#document-conventions"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-partial"> + <tbody id="sdocument-conventions.#example-a13d9f9a"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-responsible"> + <tbody id="sindex.#index-defined-elsewhere"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-testing"> + <tbody id="sindex.#index-defined-here"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance"> + <tbody id="sinformative.#biblio-css-backgrounds-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="sinformative.#biblio-css-color-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#cr-exit-criteria"> + <tbody id="sinformative.#biblio-css-extensions"> <!-- 0 tests --> </tbody> - <tbody id="s.#document-conventions"> + <tbody id="snormative.#biblio-css-animations-1"> <!-- 0 tests --> </tbody> - <tbody id="s.#example-a13d9f9a"> + <tbody id="snormative.#biblio-css-cascade-4"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="snormative.#biblio-css-conditional-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-elsewhere"> + <tbody id="snormative.#biblio-css-syntax-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-here"> + <tbody id="snormative.#biblio-css-values-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="snormative.#biblio-css21"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="snormative.#biblio-cssom"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="snormative.#biblio-dom"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="snormative.#biblio-rfc2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#biblio-selectors-4"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="sreferences.#informative"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> + <tbody id="sstatus.#w3c_process_revision"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css-writing-modes-3_dev/html/abs-pos-non-replaced-vlr-059.htm b/tests/wpt/css-tests/css-writing-modes-3_dev/html/abs-pos-non-replaced-vlr-059.htm index aa58ca026c4..f977c39cce7 100644 --- a/tests/wpt/css-tests/css-writing-modes-3_dev/html/abs-pos-non-replaced-vlr-059.htm +++ b/tests/wpt/css-tests/css-writing-modes-3_dev/html/abs-pos-non-replaced-vlr-059.htm @@ -3,7 +3,7 @@ <head> - <title>CSS Writing Modes Test: absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'</title> + <title>CSS Writing Modes Test: absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto'</title> <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> <link rel="help" href="http://www.w3.org/TR/css-writing-modes-3/#vertical-layout" title="7.1 Principles of Layout in Vertical Writing Modes"> @@ -11,7 +11,7 @@ <link rel="match" href="reference/abs-pos-non-replaced-vrl-004-ref.htm"> <meta name="flags" content="ahem image"> - <meta name="assert" content="When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left', then solve for 'left'."> + <meta name="assert" content="When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'."> <style type="text/css"> div#containing-block diff --git a/tests/wpt/css-tests/css-writing-modes-3_dev/html/abs-pos-non-replaced-vrl-058.htm b/tests/wpt/css-tests/css-writing-modes-3_dev/html/abs-pos-non-replaced-vrl-058.htm index 36b14c9a55c..1933b1d0c1f 100644 --- a/tests/wpt/css-tests/css-writing-modes-3_dev/html/abs-pos-non-replaced-vrl-058.htm +++ b/tests/wpt/css-tests/css-writing-modes-3_dev/html/abs-pos-non-replaced-vrl-058.htm @@ -3,7 +3,7 @@ <head> - <title>CSS Writing Modes Test: absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'</title> + <title>CSS Writing Modes Test: absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto'</title> <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> <link rel="help" href="http://www.w3.org/TR/css-writing-modes-3/#vertical-layout" title="7.1 Principles of Layout in Vertical Writing Modes"> @@ -11,7 +11,7 @@ <link rel="match" href="reference/abs-pos-non-replaced-vrl-004-ref.htm"> <meta name="flags" content="ahem image"> - <meta name="assert" content="When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left', then solve for 'left'."> + <meta name="assert" content="When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'."> <style type="text/css"> div#containing-block diff --git a/tests/wpt/css-tests/css-writing-modes-3_dev/html/chapter-2.htm b/tests/wpt/css-tests/css-writing-modes-3_dev/html/chapter-2.htm index 9ca275d0423..5f1f9665089 100644 --- a/tests/wpt/css-tests/css-writing-modes-3_dev/html/chapter-2.htm +++ b/tests/wpt/css-tests/css-writing-modes-3_dev/html/chapter-2.htm @@ -1434,7 +1434,7 @@ <td></td> <td>vertical-lr upright orientation Table Row/Rowgroup/Cell Ordering <ul class="assert"> - <li>This test checks that vertical-lr tables, whether LTR or RTL, order rows/rowgroups right to left and cells top-to-bottom when text-orientation is upright.</li> + <li>This test checks that vertical-lr tables, whether LTR or RTL, order rows/rowgroups left to right and cells top-to-bottom when text-orientation is upright.</li> </ul> </td> </tr> diff --git a/tests/wpt/css-tests/css-writing-modes-3_dev/html/chapter-3.htm b/tests/wpt/css-tests/css-writing-modes-3_dev/html/chapter-3.htm index 0397f0d3b61..cd25ba6ffc1 100644 --- a/tests/wpt/css-tests/css-writing-modes-3_dev/html/chapter-3.htm +++ b/tests/wpt/css-tests/css-writing-modes-3_dev/html/chapter-3.htm @@ -125,7 +125,7 @@ <td></td> <td>vertical-lr upright orientation Table Row/Rowgroup/Cell Ordering <ul class="assert"> - <li>This test checks that vertical-lr tables, whether LTR or RTL, order rows/rowgroups right to left and cells top-to-bottom when text-orientation is upright.</li> + <li>This test checks that vertical-lr tables, whether LTR or RTL, order rows/rowgroups left to right and cells top-to-bottom when text-orientation is upright.</li> </ul> </td> </tr> diff --git a/tests/wpt/css-tests/css-writing-modes-3_dev/html/chapter-5.htm b/tests/wpt/css-tests/css-writing-modes-3_dev/html/chapter-5.htm index a74b3f30763..f9197483ed6 100644 --- a/tests/wpt/css-tests/css-writing-modes-3_dev/html/chapter-5.htm +++ b/tests/wpt/css-tests/css-writing-modes-3_dev/html/chapter-5.htm @@ -63,7 +63,7 @@ <td></td> <td>vertical-lr upright orientation Table Row/Rowgroup/Cell Ordering <ul class="assert"> - <li>This test checks that vertical-lr tables, whether LTR or RTL, order rows/rowgroups right to left and cells top-to-bottom when text-orientation is upright.</li> + <li>This test checks that vertical-lr tables, whether LTR or RTL, order rows/rowgroups left to right and cells top-to-bottom when text-orientation is upright.</li> </ul> </td> </tr> diff --git a/tests/wpt/css-tests/css-writing-modes-3_dev/html/chapter-7.htm b/tests/wpt/css-tests/css-writing-modes-3_dev/html/chapter-7.htm index 30d227de822..08d18232e69 100644 --- a/tests/wpt/css-tests/css-writing-modes-3_dev/html/chapter-7.htm +++ b/tests/wpt/css-tests/css-writing-modes-3_dev/html/chapter-7.htm @@ -703,9 +703,9 @@ <a href="abs-pos-non-replaced-vlr-059.htm">abs-pos-non-replaced-vlr-059</a></td> <td><a href="reference/abs-pos-non-replaced-vrl-004-ref.htm">=</a> </td> <td><abbr class="ahem" title="Requires Ahem font">Ahem</abbr><abbr class="image" title="Requires bitmap graphic support">Bitmaps</abbr></td> - <td>absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left' + <td>absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto' <ul class="assert"> - <li>When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left', then solve for 'left'.</li> + <li>When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'.</li> </ul> </td> </tr> @@ -1935,9 +1935,9 @@ <a href="abs-pos-non-replaced-vrl-058.htm">abs-pos-non-replaced-vrl-058</a></td> <td><a href="reference/abs-pos-non-replaced-vrl-004-ref.htm">=</a> </td> <td><abbr class="ahem" title="Requires Ahem font">Ahem</abbr><abbr class="image" title="Requires bitmap graphic support">Bitmaps</abbr></td> - <td>absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left' + <td>absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto' <ul class="assert"> - <li>When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left', then solve for 'left'.</li> + <li>When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'.</li> </ul> </td> </tr> diff --git a/tests/wpt/css-tests/css-writing-modes-3_dev/html/chapter-9.htm b/tests/wpt/css-tests/css-writing-modes-3_dev/html/chapter-9.htm index d339a786dd0..8498ebfa80e 100644 --- a/tests/wpt/css-tests/css-writing-modes-3_dev/html/chapter-9.htm +++ b/tests/wpt/css-tests/css-writing-modes-3_dev/html/chapter-9.htm @@ -407,174 +407,21 @@ <tbody id="s.#acknowledgements"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-backgrounds-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-break-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-cascade-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-display-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-flexbox-1"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-fonts-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-images-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-masking-1"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-multicol-1"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-page-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-position-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-ruby-1"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-sizing-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-text-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-text-decor-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-values-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css21"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-break"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-flexbox"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-fonts"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-sizing"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-text"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-text-decor"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3bg"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3col"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3color"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3page"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3text"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-html401"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-html5"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-rfc2119"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-rfc6919"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-svg11"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-svg2"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-uax11"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-uax24"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-uax9"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-unicode"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-utn22"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-utr50"> - <!-- 0 tests --> - </tbody> <tbody id="s.#changes"> <!-- 0 tests --> </tbody> - <tbody id="s.#changes-201311"> - <!-- 0 tests --> - </tbody> <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> - <!-- 0 tests --> - </tbody> <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#cr-exit-criteria"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#example-f839f6c8"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#experimental"> - <!-- 0 tests --> - </tbody> <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-elsewhere"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#index-defined-here"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#informative"> - <!-- 0 tests --> - </tbody> <tbody id="s.#issues-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#partial"> - <!-- 0 tests --> - </tbody> <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> @@ -587,15 +434,9 @@ <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> - <!-- 0 tests --> - </tbody> <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> - <!-- 0 tests --> - </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-writing-modes-3_dev/html/chapter-A.htm b/tests/wpt/css-tests/css-writing-modes-3_dev/html/chapter-A.htm index 92261297445..7f9fd8c5cef 100644 --- a/tests/wpt/css-tests/css-writing-modes-3_dev/html/chapter-A.htm +++ b/tests/wpt/css-tests/css-writing-modes-3_dev/html/chapter-A.htm @@ -33,6 +33,165 @@ <a href="https://www.w3.org/TR/css-writing-modes-3/#script-orientations">A Vertical Scripts in Unicode</a></th></tr> <!-- 0 tests --> </tbody> + <tbody id="schanges.#changes-201311"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conformance-classes"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conventions"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#cr-exit-criteria"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#experimental"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#partial"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#testing"> + <!-- 0 tests --> + </tbody> + <tbody id="sconventions.#example-f839f6c8"> + <!-- 0 tests --> + </tbody> + <tbody id="sindex.#index-defined-elsewhere"> + <!-- 0 tests --> + </tbody> + <tbody id="sindex.#index-defined-here"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css3-flexbox"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css3-fonts"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css3-text-decor"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css3color"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css3page"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-html401"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-utn22"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-backgrounds-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-break-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-cascade-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-display-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-flexbox-1"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-fonts-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-images-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-masking-1"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-multicol-1"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-page-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-position-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-ruby-1"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-sizing-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-text-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-text-decor-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-values-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css21"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-break"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-sizing"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-text"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3bg"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3col"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3text"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-html5"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-rfc2119"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-rfc6919"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-svg11"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-svg2"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-uax11"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-uax24"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-uax9"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-unicode"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-utr50"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#informative"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#normative"> + <!-- 0 tests --> + </tbody> + <tbody id="sstatus.#w3c_process_revision"> + <!-- 0 tests --> + </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-writing-modes-3_dev/html/reftest-toc.htm b/tests/wpt/css-tests/css-writing-modes-3_dev/html/reftest-toc.htm index a56ff9e78c3..a46889f0484 100644 --- a/tests/wpt/css-tests/css-writing-modes-3_dev/html/reftest-toc.htm +++ b/tests/wpt/css-tests/css-writing-modes-3_dev/html/reftest-toc.htm @@ -506,7 +506,7 @@ </tbody> <tbody id="abs-pos-non-replaced-vlr-059" class="ahem image"> <tr> - <td rowspan="1" title="absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'"> + <td rowspan="1" title="absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto'"> <a href="abs-pos-non-replaced-vlr-059.htm">abs-pos-non-replaced-vlr-059</a></td> <td><a href="reference/abs-pos-non-replaced-vrl-004-ref.htm">=</a> </td> <td rowspan="1"><abbr class="ahem" title="Requires Ahem font">Ahem</abbr><abbr class="image" title="Requires bitmap graphic support">Bitmaps</abbr></td> @@ -1402,7 +1402,7 @@ </tbody> <tbody id="abs-pos-non-replaced-vrl-058" class="ahem image"> <tr> - <td rowspan="1" title="absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'"> + <td rowspan="1" title="absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto'"> <a href="abs-pos-non-replaced-vrl-058.htm">abs-pos-non-replaced-vrl-058</a></td> <td><a href="reference/abs-pos-non-replaced-vrl-004-ref.htm">=</a> </td> <td rowspan="1"><abbr class="ahem" title="Requires Ahem font">Ahem</abbr><abbr class="image" title="Requires bitmap graphic support">Bitmaps</abbr></td> diff --git a/tests/wpt/css-tests/css-writing-modes-3_dev/html/table-progression-vlr-003.htm b/tests/wpt/css-tests/css-writing-modes-3_dev/html/table-progression-vlr-003.htm index 61e3b56b78c..eea4f834e26 100644 --- a/tests/wpt/css-tests/css-writing-modes-3_dev/html/table-progression-vlr-003.htm +++ b/tests/wpt/css-tests/css-writing-modes-3_dev/html/table-progression-vlr-003.htm @@ -4,7 +4,7 @@ <link href="http://fantasai.inkedblade.net/contact" rel="author" title="Elika J. Etemad"> <link href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" rel="reviewer" title="Gérard Talbot"> <!-- 2016-01-19 --> <link href="reference/table-progression-001-ref.htm" rel="match"> -<meta content="This test checks that vertical-lr tables, whether LTR or RTL, order rows/rowgroups right to left and cells top-to-bottom when text-orientation is upright." name="assert"> +<meta content="This test checks that vertical-lr tables, whether LTR or RTL, order rows/rowgroups left to right and cells top-to-bottom when text-orientation is upright." name="assert"> <link href="http://www.w3.org/TR/css-writing-modes-3/#block-flow" rel="help" title="3.1 Block Flow Direction: the 'writing-mode' property"> <link href="http://www.w3.org/TR/css-writing-modes-3/#direction" rel="help" title="2.1 Specifying Directionality: the 'direction' property"> <link href="http://www.w3.org/TR/css-writing-modes-3/#text-orientation" rel="help" title="5.1 Orienting Text: the 'text-orientation' property"> diff --git a/tests/wpt/css-tests/css-writing-modes-3_dev/implementation-report-TEMPLATE.data b/tests/wpt/css-tests/css-writing-modes-3_dev/implementation-report-TEMPLATE.data index af426ca06ef..c8e4b5f510d 100644 --- a/tests/wpt/css-tests/css-writing-modes-3_dev/implementation-report-TEMPLATE.data +++ b/tests/wpt/css-tests/css-writing-modes-3_dev/implementation-report-TEMPLATE.data @@ -123,8 +123,8 @@ html/abs-pos-non-replaced-vlr-055.htm e6152f2732060736d14b5a78a302e0bc8bbe793f ? xhtml1/abs-pos-non-replaced-vlr-055.xht e6152f2732060736d14b5a78a302e0bc8bbe793f ? html/abs-pos-non-replaced-vlr-057.htm 512802c29f43864633b5ba4997e3435e77dfa780 ? xhtml1/abs-pos-non-replaced-vlr-057.xht 512802c29f43864633b5ba4997e3435e77dfa780 ? -html/abs-pos-non-replaced-vlr-059.htm 4a081025215343dc43c94a9afbecb4f8708d78c0 ? -xhtml1/abs-pos-non-replaced-vlr-059.xht 4a081025215343dc43c94a9afbecb4f8708d78c0 ? +html/abs-pos-non-replaced-vlr-059.htm 87d3f8ddd1ad9152e5654825a8774a88494ade9f ? +xhtml1/abs-pos-non-replaced-vlr-059.xht 87d3f8ddd1ad9152e5654825a8774a88494ade9f ? html/abs-pos-non-replaced-vlr-061.htm d5d7da3ef86e0bc59f71598418b084d23a7fc5e2 ? xhtml1/abs-pos-non-replaced-vlr-061.xht d5d7da3ef86e0bc59f71598418b084d23a7fc5e2 ? html/abs-pos-non-replaced-vlr-063.htm e44b75458e48fc677468fad2f6b97bfb27a04358 ? @@ -347,8 +347,8 @@ html/abs-pos-non-replaced-vrl-054.htm 7ef86efb0eef5f8b43a82658c4cde941fa885c55 ? xhtml1/abs-pos-non-replaced-vrl-054.xht 7ef86efb0eef5f8b43a82658c4cde941fa885c55 ? html/abs-pos-non-replaced-vrl-056.htm 0684b6dac50f2a8a6af6e1e1e43cd9ad96e6607e ? xhtml1/abs-pos-non-replaced-vrl-056.xht 0684b6dac50f2a8a6af6e1e1e43cd9ad96e6607e ? -html/abs-pos-non-replaced-vrl-058.htm 5ed1484c71061d9fdd91d13b776f19b73f7d1853 ? -xhtml1/abs-pos-non-replaced-vrl-058.xht 5ed1484c71061d9fdd91d13b776f19b73f7d1853 ? +html/abs-pos-non-replaced-vrl-058.htm 37684ca4836356475eb9e041a2bd629ff84f4ec3 ? +xhtml1/abs-pos-non-replaced-vrl-058.xht 37684ca4836356475eb9e041a2bd629ff84f4ec3 ? html/abs-pos-non-replaced-vrl-060.htm f125ea87971858a2689e498e6c6e302319fb346b ? xhtml1/abs-pos-non-replaced-vrl-060.xht f125ea87971858a2689e498e6c6e302319fb346b ? html/abs-pos-non-replaced-vrl-062.htm 3a89ef33bd3f993b23dc0dc1a28612218ad0beb9 ? @@ -1569,8 +1569,8 @@ html/table-progression-vlr-001.htm 080b35606e3d9197fad4900ef9db204935b61ed7 ? xhtml1/table-progression-vlr-001.xht 080b35606e3d9197fad4900ef9db204935b61ed7 ? html/table-progression-vlr-002.htm 0d0b33595bbedcce4c7a2461c0a8197a26432a5a ? xhtml1/table-progression-vlr-002.xht 0d0b33595bbedcce4c7a2461c0a8197a26432a5a ? -html/table-progression-vlr-003.htm 27b613e5470475ae30f77994a57911f4f9ba5b62 ? -xhtml1/table-progression-vlr-003.xht 27b613e5470475ae30f77994a57911f4f9ba5b62 ? +html/table-progression-vlr-003.htm c355871237d800fc278646cb02cd52c1ee2dad1c ? +xhtml1/table-progression-vlr-003.xht c355871237d800fc278646cb02cd52c1ee2dad1c ? html/table-progression-vlr-004.htm d2b45d56c96a738ce7dc9f5451e5468f67e0826f ? xhtml1/table-progression-vlr-004.xht d2b45d56c96a738ce7dc9f5451e5468f67e0826f ? html/table-progression-vrl-001.htm fc1814e366b2dbdfc31307664e4a0921dc5ebbbc ? diff --git a/tests/wpt/css-tests/css-writing-modes-3_dev/testinfo.data b/tests/wpt/css-tests/css-writing-modes-3_dev/testinfo.data index c4c15640016..e006a871cd3 100644 --- a/tests/wpt/css-tests/css-writing-modes-3_dev/testinfo.data +++ b/tests/wpt/css-tests/css-writing-modes-3_dev/testinfo.data @@ -59,7 +59,7 @@ abs-pos-non-replaced-vlr-051 reference/abs-pos-non-replaced-vlr-003-ref absolute abs-pos-non-replaced-vlr-053 reference/abs-pos-non-replaced-vrl-004-ref absolutely positioned non-replaced element - 'direction: ltr' and 'left' is 'auto', 'width' and 'right' are not 'auto' ahem,image http://www.w3.org/TR/css-writing-modes-3/#vertical-layout,http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width 9c08e776675637130948bd4b6931af65719d29ff `Gérard Talbot`<http://www.gtalbot.org/BrowserBugsSection/css21testsuite/> When 'direction' is 'ltr' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'. abs-pos-non-replaced-vlr-055 reference/abs-pos-non-replaced-vlr-007-ref absolutely positioned non-replaced element - 'direction: ltr' and 'top' is 'auto' and 'height' and 'bottom' are not 'auto' ahem,image http://www.w3.org/TR/css-writing-modes-3/#vertical-layout,http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width e6152f2732060736d14b5a78a302e0bc8bbe793f `Gérard Talbot`<http://www.gtalbot.org/BrowserBugsSection/css21testsuite/> When 'direction' is 'ltr' and 'top' is 'auto' and 'height' and 'bottom' are not 'auto', then solve for 'top'. abs-pos-non-replaced-vlr-057 reference/abs-pos-non-replaced-vlr-003-ref absolutely positioned non-replaced element - 'direction: rtl' and 'top' is 'auto' and 'height' and 'bottom' are not 'auto' ahem,image http://www.w3.org/TR/css-writing-modes-3/#vertical-layout,http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width 512802c29f43864633b5ba4997e3435e77dfa780 `Gérard Talbot`<http://www.gtalbot.org/BrowserBugsSection/css21testsuite/> When 'direction' is 'rtl' and 'top' is 'auto' and 'height' and 'bottom' are not 'auto', then solve for 'top'. -abs-pos-non-replaced-vlr-059 reference/abs-pos-non-replaced-vrl-004-ref absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left' ahem,image http://www.w3.org/TR/css-writing-modes-3/#vertical-layout,http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width 4a081025215343dc43c94a9afbecb4f8708d78c0 `Gérard Talbot`<http://www.gtalbot.org/BrowserBugsSection/css21testsuite/> When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left', then solve for 'left'. +abs-pos-non-replaced-vlr-059 reference/abs-pos-non-replaced-vrl-004-ref absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto' ahem,image http://www.w3.org/TR/css-writing-modes-3/#vertical-layout,http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width 87d3f8ddd1ad9152e5654825a8774a88494ade9f `Gérard Talbot`<http://www.gtalbot.org/BrowserBugsSection/css21testsuite/> When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'. abs-pos-non-replaced-vlr-061 reference/abs-pos-non-replaced-vlr-007-ref absolutely positioned non-replaced element - 'direction: rtl' and 'top' is 'auto' and 'height' and 'bottom' are not 'auto' ahem,image http://www.w3.org/TR/css-writing-modes-3/#vertical-layout,http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width d5d7da3ef86e0bc59f71598418b084d23a7fc5e2 `Gérard Talbot`<http://www.gtalbot.org/BrowserBugsSection/css21testsuite/> When 'direction' is 'rtl' and 'top' is 'auto' and 'height' and 'bottom' are not 'auto', then solve for 'top'. abs-pos-non-replaced-vlr-063 reference/abs-pos-non-replaced-vlr-003-ref absolutely positioned non-replaced element - 'direction: ltr' and 'height' is 'auto' and 'top' and 'bottom' are not 'auto' ahem,image http://www.w3.org/TR/css-writing-modes-3/#vertical-layout,http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width e44b75458e48fc677468fad2f6b97bfb27a04358 `Gérard Talbot`<http://www.gtalbot.org/BrowserBugsSection/css21testsuite/> When 'direction' is 'ltr' and 'height' is 'auto' and 'top' and 'bottom' are not 'auto', then solve for 'height'. abs-pos-non-replaced-vlr-065 reference/abs-pos-non-replaced-vrl-004-ref absolutely positioned non-replaced element - 'direction: ltr' and 'width' is 'auto', 'left' and 'right' are not 'auto' ahem,image http://www.w3.org/TR/css-writing-modes-3/#vertical-layout,http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width 7e931945d698024af484361d702fc1942f4c93d7 `Gérard Talbot`<http://www.gtalbot.org/BrowserBugsSection/css21testsuite/> When 'direction' is 'ltr' and 'left', 'width' is 'auto', 'left' and 'right' are not 'auto', then solve for 'width'. @@ -171,7 +171,7 @@ abs-pos-non-replaced-vrl-050 reference/abs-pos-non-replaced-vrl-002-ref absolute abs-pos-non-replaced-vrl-052 reference/abs-pos-non-replaced-vrl-004-ref absolutely positioned non-replaced element - 'direction: ltr' and 'left' is 'auto', 'width' and 'right' are not 'auto' ahem,image http://www.w3.org/TR/css-writing-modes-3/#vertical-layout,http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width 6d08a883aabdabe4db83d6e6a8b86508aa7b7a53 `Gérard Talbot`<http://www.gtalbot.org/BrowserBugsSection/css21testsuite/> When 'direction' is 'ltr' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'. abs-pos-non-replaced-vrl-054 reference/abs-pos-non-replaced-vrl-006-ref absolutely positioned non-replaced element - 'direction: ltr' and 'top' is 'auto' and 'height' and 'bottom' are not 'auto' ahem,image http://www.w3.org/TR/css-writing-modes-3/#vertical-layout,http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width 7ef86efb0eef5f8b43a82658c4cde941fa885c55 `Gérard Talbot`<http://www.gtalbot.org/BrowserBugsSection/css21testsuite/> When 'direction' is 'ltr' and 'top' is 'auto' and 'height' and 'bottom' are not 'auto', then solve for 'top'. abs-pos-non-replaced-vrl-056 reference/abs-pos-non-replaced-vrl-002-ref absolutely positioned non-replaced element - 'direction: rtl' and 'top' is 'auto' and 'height' and 'bottom' are not 'auto' ahem,image http://www.w3.org/TR/css-writing-modes-3/#vertical-layout,http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width 0684b6dac50f2a8a6af6e1e1e43cd9ad96e6607e `Gérard Talbot`<http://www.gtalbot.org/BrowserBugsSection/css21testsuite/> When 'direction' is 'rtl' and 'top' is 'auto' and 'height' and 'bottom' are not 'auto', then solve for 'top'. -abs-pos-non-replaced-vrl-058 reference/abs-pos-non-replaced-vrl-004-ref absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left' ahem,image http://www.w3.org/TR/css-writing-modes-3/#vertical-layout,http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width 5ed1484c71061d9fdd91d13b776f19b73f7d1853 `Gérard Talbot`<http://www.gtalbot.org/BrowserBugsSection/css21testsuite/> When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left', then solve for 'left'. +abs-pos-non-replaced-vrl-058 reference/abs-pos-non-replaced-vrl-004-ref absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto' ahem,image http://www.w3.org/TR/css-writing-modes-3/#vertical-layout,http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width 37684ca4836356475eb9e041a2bd629ff84f4ec3 `Gérard Talbot`<http://www.gtalbot.org/BrowserBugsSection/css21testsuite/> When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'. abs-pos-non-replaced-vrl-060 reference/abs-pos-non-replaced-vrl-006-ref absolutely positioned non-replaced element - 'direction: rtl' and 'top' is 'auto' and 'height' and 'bottom' are not 'auto' ahem,image http://www.w3.org/TR/css-writing-modes-3/#vertical-layout,http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width f125ea87971858a2689e498e6c6e302319fb346b `Gérard Talbot`<http://www.gtalbot.org/BrowserBugsSection/css21testsuite/> When 'direction' is 'rtl' and 'top' is 'auto' and 'height' and 'bottom' are not 'auto', then solve for 'top'. abs-pos-non-replaced-vrl-062 reference/abs-pos-non-replaced-vrl-002-ref absolutely positioned non-replaced element - 'direction: ltr' and 'height' is 'auto' and 'top' and 'bottom' are not 'auto' ahem,image http://www.w3.org/TR/css-writing-modes-3/#vertical-layout,http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width 3a89ef33bd3f993b23dc0dc1a28612218ad0beb9 `Gérard Talbot`<http://www.gtalbot.org/BrowserBugsSection/css21testsuite/> When 'direction' is 'ltr' and 'height' is 'auto' and 'top' and 'bottom' are not 'auto', then solve for 'height'. abs-pos-non-replaced-vrl-064 reference/abs-pos-non-replaced-vrl-004-ref absolutely positioned non-replaced element - 'direction: ltr' and 'width' is 'auto', 'left' and 'right' are not 'auto' ahem,image http://www.w3.org/TR/css-writing-modes-3/#vertical-layout,http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width 575dcb96feed2e570ac0e03d1abb0f2af1fe4644 `Gérard Talbot`<http://www.gtalbot.org/BrowserBugsSection/css21testsuite/> When 'direction' is 'ltr' and 'width' is 'auto', 'left' and 'right' are not 'auto', then solve for 'width'. @@ -782,7 +782,7 @@ table-progression-srl-001 reference/table-progression-001-ref sideways-rl Table table-progression-srl-002 reference/table-progression-002-ref sideways-rl Table Column/Colgroup Ordering http://www.w3.org/TR/css-writing-modes-3/#block-flow,http://www.w3.org/TR/css-writing-modes-3/#direction 5b7d0579f3fec248822d31a4d5d3f6fae9787ce3 `Gérard Talbot`<http://www.gtalbot.org/BrowserBugsSection/css21testsuite/>,`Elika J. Etemad`<http://fantasai.inkedblade.net/contact> This test checks that sideways-rl tables order columns top-to-bottom (LTR) or bottom-to-top (RTL) per the table's 'direction'. This test also checks that 'writing-mode' and 'direction' do not apply to table columns and column groups. table-progression-vlr-001 reference/table-progression-001-ref vertical-lr Table Row/Rowgroup/Cell Ordering http://www.w3.org/TR/css-writing-modes-3/#block-flow,http://www.w3.org/TR/css-writing-modes-3/#direction 080b35606e3d9197fad4900ef9db204935b61ed7 `Elika J. Etemad`<http://fantasai.inkedblade.net/contact> This test checks that vertical-lr tables order rows/rowgroups left to right and cells top-to-bottom (LTR) or bottom-to-top (RTL) per 'direction'. This test also checks that 'writing-mode' and 'direction' do not apply to table rows and row groups. table-progression-vlr-002 reference/table-progression-002-ref vertical-lr Table Column/Colgroup Ordering http://www.w3.org/TR/css-writing-modes-3/#block-flow,http://www.w3.org/TR/css-writing-modes-3/#direction 0d0b33595bbedcce4c7a2461c0a8197a26432a5a `Elika J. Etemad`<http://fantasai.inkedblade.net/contact> This test checks that vertical-lr tables order columns top-to-bottom (LTR) or bottom-to-top (RTL) per the table's 'direction'. This test also checks that 'writing-mode' and 'direction' do not apply to table columns and column groups. -table-progression-vlr-003 reference/table-progression-001-ref vertical-lr upright orientation Table Row/Rowgroup/Cell Ordering http://www.w3.org/TR/css-writing-modes-3/#block-flow,http://www.w3.org/TR/css-writing-modes-3/#direction,http://www.w3.org/TR/css-writing-modes-3/#text-orientation 27b613e5470475ae30f77994a57911f4f9ba5b62 `Elika J. Etemad`<http://fantasai.inkedblade.net/contact> This test checks that vertical-lr tables, whether LTR or RTL, order rows/rowgroups right to left and cells top-to-bottom when text-orientation is upright. +table-progression-vlr-003 reference/table-progression-001-ref vertical-lr upright orientation Table Row/Rowgroup/Cell Ordering http://www.w3.org/TR/css-writing-modes-3/#block-flow,http://www.w3.org/TR/css-writing-modes-3/#direction,http://www.w3.org/TR/css-writing-modes-3/#text-orientation c355871237d800fc278646cb02cd52c1ee2dad1c `Elika J. Etemad`<http://fantasai.inkedblade.net/contact> This test checks that vertical-lr tables, whether LTR or RTL, order rows/rowgroups left to right and cells top-to-bottom when text-orientation is upright. table-progression-vlr-004 reference/table-progression-002-ref vertical-lr upright orientation Table Column/Colgroup Ordering http://www.w3.org/TR/css-writing-modes-3/#block-flow,http://www.w3.org/TR/css-writing-modes-3/#direction,http://www.w3.org/TR/css-writing-modes-3/#text-orientation d2b45d56c96a738ce7dc9f5451e5468f67e0826f `Elika J. Etemad`<http://fantasai.inkedblade.net/contact> This test checks that vertical-lr tables, whether LTR or RTL, order columns top-to-bottom when text-orientation is upright. table-progression-vrl-001 reference/table-progression-001-ref vertical-rl Table Row/Rowgroup/Cell Ordering http://www.w3.org/TR/css-writing-modes-3/#block-flow,http://www.w3.org/TR/css-writing-modes-3/#direction fc1814e366b2dbdfc31307664e4a0921dc5ebbbc `Elika J. Etemad`<http://fantasai.inkedblade.net/contact> This test checks that vertical-rl tables order rows/rowgroups right to left and cells top-to-bottom (LTR) or bottom-to-top (RTL) per 'direction'. This test also checks that 'writing-mode' and 'direction' do not apply to table rows and row groups. table-progression-vrl-002 reference/table-progression-002-ref vertical-rl Table Column/Colgroup Ordering http://www.w3.org/TR/css-writing-modes-3/#block-flow,http://www.w3.org/TR/css-writing-modes-3/#direction b75051b071ec6bfe556e2f3554c87cdf12f82c8d `Elika J. Etemad`<http://fantasai.inkedblade.net/contact> This test checks that vertical-rl tables order columns top-to-bottom (LTR) or bottom-to-top (RTL) per the table's 'direction'. This test also checks that 'writing-mode' and 'direction' do not apply to table columns and column groups. diff --git a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/abs-pos-non-replaced-vlr-059.xht b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/abs-pos-non-replaced-vlr-059.xht index 53fa7894e39..2d2d1a0ccb4 100644 --- a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/abs-pos-non-replaced-vlr-059.xht +++ b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/abs-pos-non-replaced-vlr-059.xht @@ -3,7 +3,7 @@ <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> - <title>CSS Writing Modes Test: absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'</title> + <title>CSS Writing Modes Test: absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto'</title> <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <link rel="help" href="http://www.w3.org/TR/css-writing-modes-3/#vertical-layout" title="7.1 Principles of Layout in Vertical Writing Modes" /> @@ -11,7 +11,7 @@ <link rel="match" href="reference/abs-pos-non-replaced-vrl-004-ref.xht" /> <meta name="flags" content="ahem image" /> - <meta name="assert" content="When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left', then solve for 'left'." /> + <meta name="assert" content="When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'." /> <style type="text/css"><![CDATA[ div#containing-block diff --git a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/abs-pos-non-replaced-vrl-058.xht b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/abs-pos-non-replaced-vrl-058.xht index b8ce38d64d5..99fb7a944d2 100644 --- a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/abs-pos-non-replaced-vrl-058.xht +++ b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/abs-pos-non-replaced-vrl-058.xht @@ -3,7 +3,7 @@ <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> - <title>CSS Writing Modes Test: absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'</title> + <title>CSS Writing Modes Test: absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto'</title> <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <link rel="help" href="http://www.w3.org/TR/css-writing-modes-3/#vertical-layout" title="7.1 Principles of Layout in Vertical Writing Modes" /> @@ -11,7 +11,7 @@ <link rel="match" href="reference/abs-pos-non-replaced-vrl-004-ref.xht" /> <meta name="flags" content="ahem image" /> - <meta name="assert" content="When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left', then solve for 'left'." /> + <meta name="assert" content="When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'." /> <style type="text/css"><![CDATA[ div#containing-block diff --git a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/chapter-2.xht b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/chapter-2.xht index 495e66f67d0..b7837932281 100644 --- a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/chapter-2.xht +++ b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/chapter-2.xht @@ -1434,7 +1434,7 @@ <td></td> <td>vertical-lr upright orientation Table Row/Rowgroup/Cell Ordering <ul class="assert"> - <li>This test checks that vertical-lr tables, whether LTR or RTL, order rows/rowgroups right to left and cells top-to-bottom when text-orientation is upright.</li> + <li>This test checks that vertical-lr tables, whether LTR or RTL, order rows/rowgroups left to right and cells top-to-bottom when text-orientation is upright.</li> </ul> </td> </tr> diff --git a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/chapter-3.xht b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/chapter-3.xht index 6aaf0654357..3d953f8bad7 100644 --- a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/chapter-3.xht +++ b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/chapter-3.xht @@ -125,7 +125,7 @@ <td></td> <td>vertical-lr upright orientation Table Row/Rowgroup/Cell Ordering <ul class="assert"> - <li>This test checks that vertical-lr tables, whether LTR or RTL, order rows/rowgroups right to left and cells top-to-bottom when text-orientation is upright.</li> + <li>This test checks that vertical-lr tables, whether LTR or RTL, order rows/rowgroups left to right and cells top-to-bottom when text-orientation is upright.</li> </ul> </td> </tr> diff --git a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/chapter-5.xht b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/chapter-5.xht index 581b5331323..4f4005f646e 100644 --- a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/chapter-5.xht +++ b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/chapter-5.xht @@ -63,7 +63,7 @@ <td></td> <td>vertical-lr upright orientation Table Row/Rowgroup/Cell Ordering <ul class="assert"> - <li>This test checks that vertical-lr tables, whether LTR or RTL, order rows/rowgroups right to left and cells top-to-bottom when text-orientation is upright.</li> + <li>This test checks that vertical-lr tables, whether LTR or RTL, order rows/rowgroups left to right and cells top-to-bottom when text-orientation is upright.</li> </ul> </td> </tr> diff --git a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/chapter-7.xht b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/chapter-7.xht index 8bf5455c90a..11330effec3 100644 --- a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/chapter-7.xht +++ b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/chapter-7.xht @@ -703,9 +703,9 @@ <a href="abs-pos-non-replaced-vlr-059.xht">abs-pos-non-replaced-vlr-059</a></td> <td><a href="reference/abs-pos-non-replaced-vrl-004-ref.xht">=</a> </td> <td><abbr class="ahem" title="Requires Ahem font">Ahem</abbr><abbr class="image" title="Requires bitmap graphic support">Bitmaps</abbr></td> - <td>absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left' + <td>absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto' <ul class="assert"> - <li>When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left', then solve for 'left'.</li> + <li>When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'.</li> </ul> </td> </tr> @@ -1935,9 +1935,9 @@ <a href="abs-pos-non-replaced-vrl-058.xht">abs-pos-non-replaced-vrl-058</a></td> <td><a href="reference/abs-pos-non-replaced-vrl-004-ref.xht">=</a> </td> <td><abbr class="ahem" title="Requires Ahem font">Ahem</abbr><abbr class="image" title="Requires bitmap graphic support">Bitmaps</abbr></td> - <td>absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left' + <td>absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto' <ul class="assert"> - <li>When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left', then solve for 'left'.</li> + <li>When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'.</li> </ul> </td> </tr> diff --git a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/chapter-9.xht b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/chapter-9.xht index 63508373367..8478c118a99 100644 --- a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/chapter-9.xht +++ b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/chapter-9.xht @@ -407,174 +407,21 @@ <tbody id="s.#acknowledgements"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-backgrounds-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-break-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-cascade-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-display-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-flexbox-1"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-fonts-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-images-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-masking-1"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-multicol-1"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-page-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-position-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-ruby-1"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-sizing-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-text-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-text-decor-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-values-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css21"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-break"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-flexbox"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-fonts"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-sizing"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-text"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-text-decor"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3bg"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3col"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3color"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3page"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3text"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-html401"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-html5"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-rfc2119"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-rfc6919"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-svg11"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-svg2"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-uax11"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-uax24"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-uax9"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-unicode"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-utn22"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-utr50"> - <!-- 0 tests --> - </tbody> <tbody id="s.#changes"> <!-- 0 tests --> </tbody> - <tbody id="s.#changes-201311"> - <!-- 0 tests --> - </tbody> <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> - <!-- 0 tests --> - </tbody> <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#cr-exit-criteria"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#example-f839f6c8"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#experimental"> - <!-- 0 tests --> - </tbody> <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-elsewhere"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#index-defined-here"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#informative"> - <!-- 0 tests --> - </tbody> <tbody id="s.#issues-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#partial"> - <!-- 0 tests --> - </tbody> <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> @@ -587,15 +434,9 @@ <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> - <!-- 0 tests --> - </tbody> <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> - <!-- 0 tests --> - </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/chapter-A.xht b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/chapter-A.xht index b4413580ebc..37f70de22c2 100644 --- a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/chapter-A.xht +++ b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/chapter-A.xht @@ -33,6 +33,165 @@ <a href="https://www.w3.org/TR/css-writing-modes-3/#script-orientations">A Vertical Scripts in Unicode</a></th></tr> <!-- 0 tests --> </tbody> + <tbody id="schanges.#changes-201311"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conformance-classes"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conventions"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#cr-exit-criteria"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#experimental"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#partial"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#testing"> + <!-- 0 tests --> + </tbody> + <tbody id="sconventions.#example-f839f6c8"> + <!-- 0 tests --> + </tbody> + <tbody id="sindex.#index-defined-elsewhere"> + <!-- 0 tests --> + </tbody> + <tbody id="sindex.#index-defined-here"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css3-flexbox"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css3-fonts"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css3-text-decor"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css3color"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css3page"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-html401"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-utn22"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-backgrounds-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-break-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-cascade-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-display-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-flexbox-1"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-fonts-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-images-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-masking-1"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-multicol-1"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-page-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-position-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-ruby-1"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-sizing-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-text-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-text-decor-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-values-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css21"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-break"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-sizing"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-text"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3bg"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3col"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3text"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-html5"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-rfc2119"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-rfc6919"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-svg11"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-svg2"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-uax11"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-uax24"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-uax9"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-unicode"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-utr50"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#informative"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#normative"> + <!-- 0 tests --> + </tbody> + <tbody id="sstatus.#w3c_process_revision"> + <!-- 0 tests --> + </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/reftest-toc.xht b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/reftest-toc.xht index 00c524b95f5..b8a93611cd9 100644 --- a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/reftest-toc.xht +++ b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/reftest-toc.xht @@ -506,7 +506,7 @@ </tbody> <tbody id="abs-pos-non-replaced-vlr-059" class="ahem image"> <tr> - <td rowspan="1" title="absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'"> + <td rowspan="1" title="absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto'"> <a href="abs-pos-non-replaced-vlr-059.xht">abs-pos-non-replaced-vlr-059</a></td> <td><a href="reference/abs-pos-non-replaced-vrl-004-ref.xht">=</a> </td> <td rowspan="1"><abbr class="ahem" title="Requires Ahem font">Ahem</abbr><abbr class="image" title="Requires bitmap graphic support">Bitmaps</abbr></td> @@ -1402,7 +1402,7 @@ </tbody> <tbody id="abs-pos-non-replaced-vrl-058" class="ahem image"> <tr> - <td rowspan="1" title="absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'"> + <td rowspan="1" title="absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto'"> <a href="abs-pos-non-replaced-vrl-058.xht">abs-pos-non-replaced-vrl-058</a></td> <td><a href="reference/abs-pos-non-replaced-vrl-004-ref.xht">=</a> </td> <td rowspan="1"><abbr class="ahem" title="Requires Ahem font">Ahem</abbr><abbr class="image" title="Requires bitmap graphic support">Bitmaps</abbr></td> diff --git a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/table-progression-vlr-003.xht b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/table-progression-vlr-003.xht index 5bd83c6a174..c715e4fd1ec 100644 --- a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/table-progression-vlr-003.xht +++ b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1/table-progression-vlr-003.xht @@ -4,7 +4,7 @@ <link href="http://fantasai.inkedblade.net/contact" rel="author" title="Elika J. Etemad" /> <link href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" rel="reviewer" title="Gérard Talbot" /> <!-- 2016-01-19 --> <link href="reference/table-progression-001-ref.xht" rel="match" /> -<meta content="This test checks that vertical-lr tables, whether LTR or RTL, order rows/rowgroups right to left and cells top-to-bottom when text-orientation is upright." name="assert" /> +<meta content="This test checks that vertical-lr tables, whether LTR or RTL, order rows/rowgroups left to right and cells top-to-bottom when text-orientation is upright." name="assert" /> <link href="http://www.w3.org/TR/css-writing-modes-3/#block-flow" rel="help" title="3.1 Block Flow Direction: the 'writing-mode' property" /> <link href="http://www.w3.org/TR/css-writing-modes-3/#direction" rel="help" title="2.1 Specifying Directionality: the 'direction' property" /> <link href="http://www.w3.org/TR/css-writing-modes-3/#text-orientation" rel="help" title="5.1 Orienting Text: the 'text-orientation' property" /> diff --git a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/abs-pos-non-replaced-vlr-059.xht b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/abs-pos-non-replaced-vlr-059.xht index 24ebbf6e259..261b0be5ccd 100644 --- a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/abs-pos-non-replaced-vlr-059.xht +++ b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/abs-pos-non-replaced-vlr-059.xht @@ -3,7 +3,7 @@ <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> - <title>CSS Writing Modes Test: absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'</title> + <title>CSS Writing Modes Test: absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto'</title> <style type="text/css"> @page { font: italic 8pt sans-serif; color: gray; margin: 7%; @@ -20,7 +20,7 @@ <link rel="match" href="reference/abs-pos-non-replaced-vrl-004-ref.xht" /> <meta name="flags" content="ahem image" /> - <meta name="assert" content="When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left', then solve for 'left'." /> + <meta name="assert" content="When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'." /> <style type="text/css"><![CDATA[ div#containing-block diff --git a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/abs-pos-non-replaced-vrl-058.xht b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/abs-pos-non-replaced-vrl-058.xht index 2d5df908c96..3b7225b4a7c 100644 --- a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/abs-pos-non-replaced-vrl-058.xht +++ b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/abs-pos-non-replaced-vrl-058.xht @@ -3,7 +3,7 @@ <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> - <title>CSS Writing Modes Test: absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'</title> + <title>CSS Writing Modes Test: absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto'</title> <style type="text/css"> @page { font: italic 8pt sans-serif; color: gray; margin: 7%; @@ -20,7 +20,7 @@ <link rel="match" href="reference/abs-pos-non-replaced-vrl-004-ref.xht" /> <meta name="flags" content="ahem image" /> - <meta name="assert" content="When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left', then solve for 'left'." /> + <meta name="assert" content="When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'." /> <style type="text/css"><![CDATA[ div#containing-block diff --git a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/chapter-2.xht b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/chapter-2.xht index 495e66f67d0..b7837932281 100644 --- a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/chapter-2.xht +++ b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/chapter-2.xht @@ -1434,7 +1434,7 @@ <td></td> <td>vertical-lr upright orientation Table Row/Rowgroup/Cell Ordering <ul class="assert"> - <li>This test checks that vertical-lr tables, whether LTR or RTL, order rows/rowgroups right to left and cells top-to-bottom when text-orientation is upright.</li> + <li>This test checks that vertical-lr tables, whether LTR or RTL, order rows/rowgroups left to right and cells top-to-bottom when text-orientation is upright.</li> </ul> </td> </tr> diff --git a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/chapter-3.xht b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/chapter-3.xht index 6aaf0654357..3d953f8bad7 100644 --- a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/chapter-3.xht +++ b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/chapter-3.xht @@ -125,7 +125,7 @@ <td></td> <td>vertical-lr upright orientation Table Row/Rowgroup/Cell Ordering <ul class="assert"> - <li>This test checks that vertical-lr tables, whether LTR or RTL, order rows/rowgroups right to left and cells top-to-bottom when text-orientation is upright.</li> + <li>This test checks that vertical-lr tables, whether LTR or RTL, order rows/rowgroups left to right and cells top-to-bottom when text-orientation is upright.</li> </ul> </td> </tr> diff --git a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/chapter-5.xht b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/chapter-5.xht index 581b5331323..4f4005f646e 100644 --- a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/chapter-5.xht +++ b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/chapter-5.xht @@ -63,7 +63,7 @@ <td></td> <td>vertical-lr upright orientation Table Row/Rowgroup/Cell Ordering <ul class="assert"> - <li>This test checks that vertical-lr tables, whether LTR or RTL, order rows/rowgroups right to left and cells top-to-bottom when text-orientation is upright.</li> + <li>This test checks that vertical-lr tables, whether LTR or RTL, order rows/rowgroups left to right and cells top-to-bottom when text-orientation is upright.</li> </ul> </td> </tr> diff --git a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/chapter-7.xht b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/chapter-7.xht index 8bf5455c90a..11330effec3 100644 --- a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/chapter-7.xht +++ b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/chapter-7.xht @@ -703,9 +703,9 @@ <a href="abs-pos-non-replaced-vlr-059.xht">abs-pos-non-replaced-vlr-059</a></td> <td><a href="reference/abs-pos-non-replaced-vrl-004-ref.xht">=</a> </td> <td><abbr class="ahem" title="Requires Ahem font">Ahem</abbr><abbr class="image" title="Requires bitmap graphic support">Bitmaps</abbr></td> - <td>absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left' + <td>absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto' <ul class="assert"> - <li>When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left', then solve for 'left'.</li> + <li>When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'.</li> </ul> </td> </tr> @@ -1935,9 +1935,9 @@ <a href="abs-pos-non-replaced-vrl-058.xht">abs-pos-non-replaced-vrl-058</a></td> <td><a href="reference/abs-pos-non-replaced-vrl-004-ref.xht">=</a> </td> <td><abbr class="ahem" title="Requires Ahem font">Ahem</abbr><abbr class="image" title="Requires bitmap graphic support">Bitmaps</abbr></td> - <td>absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left' + <td>absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto' <ul class="assert"> - <li>When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left', then solve for 'left'.</li> + <li>When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'.</li> </ul> </td> </tr> diff --git a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/chapter-9.xht b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/chapter-9.xht index 63508373367..8478c118a99 100644 --- a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/chapter-9.xht +++ b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/chapter-9.xht @@ -407,174 +407,21 @@ <tbody id="s.#acknowledgements"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-backgrounds-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-break-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-cascade-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-display-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-flexbox-1"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-fonts-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-images-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-masking-1"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-multicol-1"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-page-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-position-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-ruby-1"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-sizing-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-text-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-text-decor-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css-values-3"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css21"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-break"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-flexbox"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-fonts"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-sizing"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-text"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-text-decor"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3bg"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3col"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3color"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3page"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3text"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-html401"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-html5"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-rfc2119"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-rfc6919"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-svg11"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-svg2"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-uax11"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-uax24"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-uax9"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-unicode"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-utn22"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-utr50"> - <!-- 0 tests --> - </tbody> <tbody id="s.#changes"> <!-- 0 tests --> </tbody> - <tbody id="s.#changes-201311"> - <!-- 0 tests --> - </tbody> <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> - <!-- 0 tests --> - </tbody> <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#cr-exit-criteria"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#example-f839f6c8"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#experimental"> - <!-- 0 tests --> - </tbody> <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-elsewhere"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#index-defined-here"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#informative"> - <!-- 0 tests --> - </tbody> <tbody id="s.#issues-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#partial"> - <!-- 0 tests --> - </tbody> <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> @@ -587,15 +434,9 @@ <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> - <!-- 0 tests --> - </tbody> <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> - <!-- 0 tests --> - </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/chapter-A.xht b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/chapter-A.xht index b4413580ebc..37f70de22c2 100644 --- a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/chapter-A.xht +++ b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/chapter-A.xht @@ -33,6 +33,165 @@ <a href="https://www.w3.org/TR/css-writing-modes-3/#script-orientations">A Vertical Scripts in Unicode</a></th></tr> <!-- 0 tests --> </tbody> + <tbody id="schanges.#changes-201311"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conformance-classes"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conventions"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#cr-exit-criteria"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#experimental"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#partial"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#testing"> + <!-- 0 tests --> + </tbody> + <tbody id="sconventions.#example-f839f6c8"> + <!-- 0 tests --> + </tbody> + <tbody id="sindex.#index-defined-elsewhere"> + <!-- 0 tests --> + </tbody> + <tbody id="sindex.#index-defined-here"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css3-flexbox"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css3-fonts"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css3-text-decor"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css3color"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css3page"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-html401"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-utn22"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-backgrounds-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-break-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-cascade-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-display-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-flexbox-1"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-fonts-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-images-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-masking-1"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-multicol-1"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-page-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-position-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-ruby-1"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-sizing-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-text-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-text-decor-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css-values-3"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css21"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-break"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-sizing"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3-text"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3bg"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3col"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3text"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-html5"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-rfc2119"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-rfc6919"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-svg11"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-svg2"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-uax11"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-uax24"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-uax9"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-unicode"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-utr50"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#informative"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#normative"> + <!-- 0 tests --> + </tbody> + <tbody id="sstatus.#w3c_process_revision"> + <!-- 0 tests --> + </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/reftest-toc.xht b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/reftest-toc.xht index 00c524b95f5..b8a93611cd9 100644 --- a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/reftest-toc.xht +++ b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/reftest-toc.xht @@ -506,7 +506,7 @@ </tbody> <tbody id="abs-pos-non-replaced-vlr-059" class="ahem image"> <tr> - <td rowspan="1" title="absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'"> + <td rowspan="1" title="absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto'"> <a href="abs-pos-non-replaced-vlr-059.xht">abs-pos-non-replaced-vlr-059</a></td> <td><a href="reference/abs-pos-non-replaced-vrl-004-ref.xht">=</a> </td> <td rowspan="1"><abbr class="ahem" title="Requires Ahem font">Ahem</abbr><abbr class="image" title="Requires bitmap graphic support">Bitmaps</abbr></td> @@ -1402,7 +1402,7 @@ </tbody> <tbody id="abs-pos-non-replaced-vrl-058" class="ahem image"> <tr> - <td rowspan="1" title="absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'"> + <td rowspan="1" title="absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto'"> <a href="abs-pos-non-replaced-vrl-058.xht">abs-pos-non-replaced-vrl-058</a></td> <td><a href="reference/abs-pos-non-replaced-vrl-004-ref.xht">=</a> </td> <td rowspan="1"><abbr class="ahem" title="Requires Ahem font">Ahem</abbr><abbr class="image" title="Requires bitmap graphic support">Bitmaps</abbr></td> diff --git a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/table-progression-vlr-003.xht b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/table-progression-vlr-003.xht index 5bd83c6a174..c715e4fd1ec 100644 --- a/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/table-progression-vlr-003.xht +++ b/tests/wpt/css-tests/css-writing-modes-3_dev/xhtml1print/table-progression-vlr-003.xht @@ -4,7 +4,7 @@ <link href="http://fantasai.inkedblade.net/contact" rel="author" title="Elika J. Etemad" /> <link href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" rel="reviewer" title="Gérard Talbot" /> <!-- 2016-01-19 --> <link href="reference/table-progression-001-ref.xht" rel="match" /> -<meta content="This test checks that vertical-lr tables, whether LTR or RTL, order rows/rowgroups right to left and cells top-to-bottom when text-orientation is upright." name="assert" /> +<meta content="This test checks that vertical-lr tables, whether LTR or RTL, order rows/rowgroups left to right and cells top-to-bottom when text-orientation is upright." name="assert" /> <link href="http://www.w3.org/TR/css-writing-modes-3/#block-flow" rel="help" title="3.1 Block Flow Direction: the 'writing-mode' property" /> <link href="http://www.w3.org/TR/css-writing-modes-3/#direction" rel="help" title="2.1 Specifying Directionality: the 'direction' property" /> <link href="http://www.w3.org/TR/css-writing-modes-3/#text-orientation" rel="help" title="5.1 Orienting Text: the 'text-orientation' property" /> diff --git a/tests/wpt/css-tests/css21_dev/html4/abs-pos-non-replaced-vlr-059.htm b/tests/wpt/css-tests/css21_dev/html4/abs-pos-non-replaced-vlr-059.htm index aa58ca026c4..f977c39cce7 100644 --- a/tests/wpt/css-tests/css21_dev/html4/abs-pos-non-replaced-vlr-059.htm +++ b/tests/wpt/css-tests/css21_dev/html4/abs-pos-non-replaced-vlr-059.htm @@ -3,7 +3,7 @@ <head> - <title>CSS Writing Modes Test: absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'</title> + <title>CSS Writing Modes Test: absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto'</title> <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> <link rel="help" href="http://www.w3.org/TR/css-writing-modes-3/#vertical-layout" title="7.1 Principles of Layout in Vertical Writing Modes"> @@ -11,7 +11,7 @@ <link rel="match" href="reference/abs-pos-non-replaced-vrl-004-ref.htm"> <meta name="flags" content="ahem image"> - <meta name="assert" content="When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left', then solve for 'left'."> + <meta name="assert" content="When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'."> <style type="text/css"> div#containing-block diff --git a/tests/wpt/css-tests/css21_dev/html4/abs-pos-non-replaced-vrl-058.htm b/tests/wpt/css-tests/css21_dev/html4/abs-pos-non-replaced-vrl-058.htm index 36b14c9a55c..1933b1d0c1f 100644 --- a/tests/wpt/css-tests/css21_dev/html4/abs-pos-non-replaced-vrl-058.htm +++ b/tests/wpt/css-tests/css21_dev/html4/abs-pos-non-replaced-vrl-058.htm @@ -3,7 +3,7 @@ <head> - <title>CSS Writing Modes Test: absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'</title> + <title>CSS Writing Modes Test: absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto'</title> <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> <link rel="help" href="http://www.w3.org/TR/css-writing-modes-3/#vertical-layout" title="7.1 Principles of Layout in Vertical Writing Modes"> @@ -11,7 +11,7 @@ <link rel="match" href="reference/abs-pos-non-replaced-vrl-004-ref.htm"> <meta name="flags" content="ahem image"> - <meta name="assert" content="When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left', then solve for 'left'."> + <meta name="assert" content="When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'."> <style type="text/css"> div#containing-block diff --git a/tests/wpt/css-tests/css21_dev/html4/at-charset-013.htm b/tests/wpt/css-tests/css21_dev/html4/at-charset-013.htm index a2239858d9f..121d4286e89 100644 --- a/tests/wpt/css-tests/css21_dev/html4/at-charset-013.htm +++ b/tests/wpt/css-tests/css21_dev/html4/at-charset-013.htm @@ -1,11 +1,10 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> -<html> - <head> +<!DOCTYPE html> +<html><head> <title>CSS Test: Stylesheet encoding via the referring document's encoding (user set)</title> - <link rel="author" title="Microsoft" href="http://www.microsoft.com/"> - <link rel="help" href="http://www.w3.org/TR/CSS21/syndata.html#charset"> - <meta name="flags" content="interact HTMLonly"> - <meta name="assert" content="The stylesheet's encoding is determined by the user set referring document's encoding."> + <link href="http://www.microsoft.com/" rel="author" title="Microsoft"> + <link href="http://www.w3.org/TR/CSS21/syndata.html#charset" rel="help"> + <meta content="interact HTMLonly" name="flags"> + <meta content="The stylesheet's encoding is determined by the user set referring document's encoding." name="assert"> <style type="text/css"> @import "support/at-charset-013.css"; div @@ -17,7 +16,8 @@ <body> <p>PREREQUISITE: Set the encoding of the page to "Shift-JIS".</p> <p>Test passes if both lines of "Filler Text" below are green.</p> - <div class="平和">Filler Text</div> + <div class="平和">Filler Text</div> <div id="div2">Filler Text</div> - </body> -</html>
\ No newline at end of file + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css21_dev/html4/attribute-value-selector-005.htm b/tests/wpt/css-tests/css21_dev/html4/attribute-value-selector-005.htm index 515b3e36a7f..8cbaa7b8df9 100644 --- a/tests/wpt/css-tests/css21_dev/html4/attribute-value-selector-005.htm +++ b/tests/wpt/css-tests/css21_dev/html4/attribute-value-selector-005.htm @@ -1,12 +1,11 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> -<html> - <head> +<!DOCTYPE html> +<html><head> <title>CSS Test: Case sensitivity of attributes and attribute values in HTML 4.01</title> - <link rel="author" title="Microsoft" href="http://www.microsoft.com/"> - <link rel="help" href="http://www.w3.org/TR/CSS21/selector.html#attribute-selectors"> - <link rel="match" href="reference/filler-text-below-green.htm"> - <meta name="flags" content="HTMLonly"> - <meta name="assert" content="HTML 4.01 attribute names are not case sensitive."> + <link href="http://www.microsoft.com/" rel="author" title="Microsoft"> + <link href="http://www.w3.org/TR/CSS21/selector.html#attribute-selectors" rel="help"> + <link href="reference/filler-text-below-green.htm" rel="match"> + <meta content="HTMLonly" name="flags"> + <meta content="HTML 4.01 attribute names are not case sensitive." name="assert"> <style type="text/css"> div[CLASS] { @@ -17,5 +16,6 @@ <body> <p>Test passes if the "Filler Text" below is green.</p> <div class="div1">Filler Text</div> - </body> -</html>
\ No newline at end of file + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css21_dev/html4/attribute-value-selector-007.htm b/tests/wpt/css-tests/css21_dev/html4/attribute-value-selector-007.htm index 4eac5bc0f8a..a1488a799fa 100644 --- a/tests/wpt/css-tests/css21_dev/html4/attribute-value-selector-007.htm +++ b/tests/wpt/css-tests/css21_dev/html4/attribute-value-selector-007.htm @@ -1,12 +1,11 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> -<html> - <head> +<!DOCTYPE html> +<html><head> <title>CSS Test: lang attribute selector - att=val</title> - <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> - <link rel="author" title="Eira Monstad, Opera Software ASA" href="mailto:public-testsuites@opera.com"> - <link rel="help" href="http://www.w3.org/TR/CSS21/selector.html#attribute-selectors"> - <meta name="flags" content="HTMLonly"> - <meta name="assert" content="lang attribute selector with att=val in HTML should not be case sensitive, and should only match when att is exactly val"> + <link href="mailto:ishida@w3.org" rel="author" title="Richard Ishida"> + <link href="mailto:public-testsuites@opera.com" rel="author" title="Eira Monstad, Opera Software ASA"> + <link href="http://www.w3.org/TR/CSS21/selector.html#attribute-selectors" rel="help"> + <meta content="HTMLonly" name="flags"> + <meta content="lang attribute selector with att=val in HTML should not be case sensitive, and should only match when att is exactly val" name="assert"> <style type="text/css"> div[lang = "es"] { color:white;background-color:green; } p[lang = "es"] { color:white;background-color:green; } @@ -37,5 +36,6 @@ <p lang="de">This line should NOT be green <em>and this should not be green either</em></p> -</body> -</html>
\ No newline at end of file + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css21_dev/html4/attribute-value-selector-010.htm b/tests/wpt/css-tests/css21_dev/html4/attribute-value-selector-010.htm index 0844764993e..3cbaf6dc039 100644 --- a/tests/wpt/css-tests/css21_dev/html4/attribute-value-selector-010.htm +++ b/tests/wpt/css-tests/css21_dev/html4/attribute-value-selector-010.htm @@ -1,12 +1,11 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> -<html> - <head> +<!DOCTYPE html> +<html><head> <title>CSS Test: lang attribute selector - att |= val</title> - <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> - <link rel="author" title="Eira Monstad, Opera Software ASA" href="mailto:public-testsuites@opera.com"> - <link rel="help" href="http://www.w3.org/TR/CSS21/selector.html#attribute-selectors"> - <meta name="flags" content="HTMLonly"> - <meta name="assert" content="lang attribute selector with 'att |= val' in HTML should not be case sensitive, and match hyphen-separated list"> + <link href="mailto:ishida@w3.org" rel="author" title="Richard Ishida"> + <link href="mailto:public-testsuites@opera.com" rel="author" title="Eira Monstad, Opera Software ASA"> + <link href="http://www.w3.org/TR/CSS21/selector.html#attribute-selectors" rel="help"> + <meta content="HTMLonly" name="flags"> + <meta content="lang attribute selector with 'att |= val' in HTML should not be case sensitive, and match hyphen-separated list" name="assert"> <style type="text/css"> div[lang |= "es"] { color:white;background-color:green; } p[lang |= "es"] { color:white;background-color:green; } @@ -37,5 +36,6 @@ <div lang="fr">This line should NOT be green<p>This line should NOT be green</p></div> <p lang="de">This line should NOT be green <em>and this should not be green either</em></p> -</body> -</html>
\ No newline at end of file + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css21_dev/html4/basic-html-table-001.htm b/tests/wpt/css-tests/css21_dev/html4/basic-html-table-001.htm index f7439117694..ffd82cae3be 100644 --- a/tests/wpt/css-tests/css21_dev/html4/basic-html-table-001.htm +++ b/tests/wpt/css-tests/css21_dev/html4/basic-html-table-001.htm @@ -5,7 +5,6 @@ <link rel="author" title="Microsoft" href="http://www.microsoft.com/"> <link rel="help" href="http://www.w3.org/TR/CSS21/tables.html#table-display"> <link rel="help" href="http://www.w3.org/TR/REC-html40/struct/tables.html#h-11.2"> - <meta name="flags" content="HTMLonly"> <meta name="assert" content="HTML table elements are supported."> <style type="text/css"> caption, td, th diff --git a/tests/wpt/css-tests/css21_dev/html4/case-sensitive-006.htm b/tests/wpt/css-tests/css21_dev/html4/case-sensitive-006.htm index 211bfecd71b..47db0818931 100644 --- a/tests/wpt/css-tests/css21_dev/html4/case-sensitive-006.htm +++ b/tests/wpt/css-tests/css21_dev/html4/case-sensitive-006.htm @@ -1,12 +1,11 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> -<html> - <head> +<!DOCTYPE html> +<html><head> <title>CSS Test: Case sensitivity with element selectors</title> - <link rel="author" title="Microsoft" href="http://www.microsoft.com/"> - <link rel="help" href="http://www.w3.org/TR/CSS21/syndata.html#characters"> - <link rel="match" href="reference/filler-text-below-green.htm"> - <meta name="flags" content="HTMLonly"> - <meta name="assert" content="Element selectors are case-insensitive in HTML."> + <link href="http://www.microsoft.com/" rel="author" title="Microsoft"> + <link href="http://www.w3.org/TR/CSS21/syndata.html#characters" rel="help"> + <link href="reference/filler-text-below-green.htm" rel="match"> + <meta content="HTMLonly" name="flags"> + <meta content="Element selectors are case-insensitive in HTML." name="assert"> <style type="text/css"> DIV { @@ -17,5 +16,6 @@ <body> <p>Test passes if the "Filler Text" below is green.</p> <div>Filler Text</div> - </body> -</html>
\ No newline at end of file + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css21_dev/html4/chapter-1.htm b/tests/wpt/css-tests/css21_dev/html4/chapter-1.htm index 526aaf27956..c11f162224e 100644 --- a/tests/wpt/css-tests/css21_dev/html4/chapter-1.htm +++ b/tests/wpt/css-tests/css21_dev/html4/chapter-1.htm @@ -30,7 +30,10 @@ <tbody id="s1"> <tr><th colspan="4" scope="rowgroup"> <a href="#s1">+</a> - <a href="https://www.w3.org/TR/CSS21/about.html">1 About the CSS 2.1 Specification</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/about.html#q1.0">1 About the CSS 2.1 Specification</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s1.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="s1.1"> diff --git a/tests/wpt/css-tests/css21_dev/html4/chapter-10.htm b/tests/wpt/css-tests/css21_dev/html4/chapter-10.htm index df3dd53343a..5e3e6fbb972 100644 --- a/tests/wpt/css-tests/css21_dev/html4/chapter-10.htm +++ b/tests/wpt/css-tests/css21_dev/html4/chapter-10.htm @@ -30,7 +30,10 @@ <tbody id="s10"> <tr><th colspan="4" scope="rowgroup"> <a href="#s10">+</a> - <a href="https://www.w3.org/TR/CSS21/visudet.html">10 Visual formatting model details</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/visudet.html#q10.0">10 Visual formatting model details</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s10.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="s10.1"> @@ -4050,9 +4053,9 @@ <a href="abs-pos-non-replaced-vlr-059.htm">abs-pos-non-replaced-vlr-059</a></td> <td><a href="reference/abs-pos-non-replaced-vrl-004-ref.htm">=</a> </td> <td><abbr class="ahem" title="Requires Ahem font">Ahem</abbr><abbr class="image" title="Requires bitmap graphic support">Bitmaps</abbr></td> - <td>absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left' + <td>absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto' <ul class="assert"> - <li>When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left', then solve for 'left'.</li> + <li>When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'.</li> </ul> </td> </tr> @@ -4578,9 +4581,9 @@ <a href="abs-pos-non-replaced-vrl-058.htm">abs-pos-non-replaced-vrl-058</a></td> <td><a href="reference/abs-pos-non-replaced-vrl-004-ref.htm">=</a> </td> <td><abbr class="ahem" title="Requires Ahem font">Ahem</abbr><abbr class="image" title="Requires bitmap graphic support">Bitmaps</abbr></td> - <td>absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left' + <td>absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto' <ul class="assert"> - <li>When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left', then solve for 'left'.</li> + <li>When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'.</li> </ul> </td> </tr> diff --git a/tests/wpt/css-tests/css21_dev/html4/chapter-11.htm b/tests/wpt/css-tests/css21_dev/html4/chapter-11.htm index 760d7f3e8bc..9de31813e8f 100644 --- a/tests/wpt/css-tests/css21_dev/html4/chapter-11.htm +++ b/tests/wpt/css-tests/css21_dev/html4/chapter-11.htm @@ -30,7 +30,10 @@ <tbody id="s11"> <tr><th colspan="4" scope="rowgroup"> <a href="#s11">+</a> - <a href="https://www.w3.org/TR/CSS21/visufx.html">11 Visual effects</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/visufx.html#q11.0">11 Visual effects</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s11.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="s11.1"> @@ -616,7 +619,7 @@ </ul> </td> </tr> - <tr id="overflow-html-body-001-11.1.1" class="HTMLonly"> + <tr id="overflow-html-body-001-11.1.1" class=""> <td> <a href="overflow-html-body-001.htm">overflow-html-body-001</a></td> <td></td> diff --git a/tests/wpt/css-tests/css21_dev/html4/chapter-12.htm b/tests/wpt/css-tests/css21_dev/html4/chapter-12.htm index 5c274d027a9..cc9b5a3d201 100644 --- a/tests/wpt/css-tests/css21_dev/html4/chapter-12.htm +++ b/tests/wpt/css-tests/css21_dev/html4/chapter-12.htm @@ -33,6 +33,9 @@ <a href="https://www.w3.org/TR/CSS21/generate.html#generated-text">12 Generated content, automatic numbering, and lists</a></th></tr> <!-- 0 tests --> </tbody> + <tbody id="s12.#annoying-warning"> + <!-- 0 tests --> + </tbody> <tbody id="s12.#x0"> <!-- 0 tests --> </tbody> diff --git a/tests/wpt/css-tests/css21_dev/html4/chapter-13.htm b/tests/wpt/css-tests/css21_dev/html4/chapter-13.htm index bac74c8d6d6..364547f6bad 100644 --- a/tests/wpt/css-tests/css21_dev/html4/chapter-13.htm +++ b/tests/wpt/css-tests/css21_dev/html4/chapter-13.htm @@ -33,6 +33,9 @@ <a href="https://www.w3.org/TR/CSS21/page.html#the-page">13 Paged media</a></th></tr> <!-- 0 tests --> </tbody> + <tbody id="s13.#annoying-warning"> + <!-- 0 tests --> + </tbody> <tbody id="s13.1"> <tr><th colspan="4" scope="rowgroup"> <a href="#s13.1">+</a> diff --git a/tests/wpt/css-tests/css21_dev/html4/chapter-14.htm b/tests/wpt/css-tests/css21_dev/html4/chapter-14.htm index c7f73d321e7..727232f4c55 100644 --- a/tests/wpt/css-tests/css21_dev/html4/chapter-14.htm +++ b/tests/wpt/css-tests/css21_dev/html4/chapter-14.htm @@ -30,7 +30,10 @@ <tbody id="s14"> <tr><th colspan="4" scope="rowgroup"> <a href="#s14">+</a> - <a href="https://www.w3.org/TR/CSS21/colors.html">14 Colors and Backgrounds</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/colors.html#q14.0">14 Colors and Backgrounds</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s14.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="s14.1"> diff --git a/tests/wpt/css-tests/css21_dev/html4/chapter-15.htm b/tests/wpt/css-tests/css21_dev/html4/chapter-15.htm index 94be9e9a4af..d34a963ea35 100644 --- a/tests/wpt/css-tests/css21_dev/html4/chapter-15.htm +++ b/tests/wpt/css-tests/css21_dev/html4/chapter-15.htm @@ -30,7 +30,10 @@ <tbody id="s15"> <tr><th colspan="4" scope="rowgroup"> <a href="#s15">+</a> - <a href="https://www.w3.org/TR/CSS21/fonts.html">15 Fonts</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/fonts.html#q15.0">15 Fonts</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s15.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="s15.1"> diff --git a/tests/wpt/css-tests/css21_dev/html4/chapter-16.htm b/tests/wpt/css-tests/css21_dev/html4/chapter-16.htm index cda03af4c23..c58cd143c27 100644 --- a/tests/wpt/css-tests/css21_dev/html4/chapter-16.htm +++ b/tests/wpt/css-tests/css21_dev/html4/chapter-16.htm @@ -30,7 +30,10 @@ <tbody id="s16"> <tr><th colspan="4" scope="rowgroup"> <a href="#s16">+</a> - <a href="https://www.w3.org/TR/CSS21/text.html">16 Text</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/text.html#q16.0">16 Text</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s16.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="s16.1"> diff --git a/tests/wpt/css-tests/css21_dev/html4/chapter-17.htm b/tests/wpt/css-tests/css21_dev/html4/chapter-17.htm index 01082f1314a..5a6944d231a 100644 --- a/tests/wpt/css-tests/css21_dev/html4/chapter-17.htm +++ b/tests/wpt/css-tests/css21_dev/html4/chapter-17.htm @@ -30,7 +30,10 @@ <tbody id="s17"> <tr><th colspan="4" scope="rowgroup"> <a href="#s17">+</a> - <a href="https://www.w3.org/TR/CSS21/tables.html">17 Tables</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/tables.html#q17.0">17 Tables</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s17.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="s17.1"> @@ -137,7 +140,7 @@ </ul> </td> </tr> - <tr id="table-intro-example-001-17.1" class="HTMLonly"> + <tr id="table-intro-example-001-17.1" class=""> <td> <a href="table-intro-example-001.htm">table-intro-example-001</a></td> <td></td> @@ -148,7 +151,7 @@ </ul> </td> </tr> - <tr id="table-intro-example-002-17.1" class="HTMLonly"> + <tr id="table-intro-example-002-17.1" class=""> <td> <a href="table-intro-example-002.htm">table-intro-example-002</a></td> <td></td> @@ -159,7 +162,7 @@ </ul> </td> </tr> - <tr id="table-intro-example-003-17.1" class="HTMLonly"> + <tr id="table-intro-example-003-17.1" class=""> <td> <a href="table-intro-example-003.htm">table-intro-example-003</a></td> <td></td> @@ -170,7 +173,7 @@ </ul> </td> </tr> - <tr id="table-intro-example-004-17.1" class="HTMLonly"> + <tr id="table-intro-example-004-17.1" class=""> <td> <a href="table-intro-example-004.htm">table-intro-example-004</a></td> <td></td> @@ -271,7 +274,7 @@ </ul> </td> </tr> - <tr id="basic-html-table-001-17.2" class="HTMLonly"> + <tr id="basic-html-table-001-17.2" class=""> <td> <a href="basic-html-table-001.htm">basic-html-table-001</a></td> <td></td> diff --git a/tests/wpt/css-tests/css21_dev/html4/chapter-18.htm b/tests/wpt/css-tests/css21_dev/html4/chapter-18.htm index ef5fc4b3472..c0c31975e83 100644 --- a/tests/wpt/css-tests/css21_dev/html4/chapter-18.htm +++ b/tests/wpt/css-tests/css21_dev/html4/chapter-18.htm @@ -30,7 +30,10 @@ <tbody id="s18"> <tr><th colspan="4" scope="rowgroup"> <a href="#s18">+</a> - <a href="https://www.w3.org/TR/CSS21/ui.html">18 User interface</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/ui.html#q18.0">18 User interface</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s18.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="s18.1"> diff --git a/tests/wpt/css-tests/css21_dev/html4/chapter-2.htm b/tests/wpt/css-tests/css21_dev/html4/chapter-2.htm index 6f59da1e15c..a3c5fa70035 100644 --- a/tests/wpt/css-tests/css21_dev/html4/chapter-2.htm +++ b/tests/wpt/css-tests/css21_dev/html4/chapter-2.htm @@ -30,7 +30,10 @@ <tbody id="s2"> <tr><th colspan="4" scope="rowgroup"> <a href="#s2">+</a> - <a href="https://www.w3.org/TR/CSS21/intro.html">2 Introduction to CSS 2.1</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/intro.html#q2.0">2 Introduction to CSS 2.1</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s2.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="s2.1"> diff --git a/tests/wpt/css-tests/css21_dev/html4/chapter-3.htm b/tests/wpt/css-tests/css21_dev/html4/chapter-3.htm index 01816f2da4a..20a4f79e853 100644 --- a/tests/wpt/css-tests/css21_dev/html4/chapter-3.htm +++ b/tests/wpt/css-tests/css21_dev/html4/chapter-3.htm @@ -30,7 +30,10 @@ <tbody id="s3"> <tr><th colspan="4" scope="rowgroup"> <a href="#s3">+</a> - <a href="https://www.w3.org/TR/CSS21/conform.html">3 Conformance: Requirements and Recommendations</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/conform.html#q3.0">3 Conformance: Requirements and Recommendations</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s3.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="s3.1"> diff --git a/tests/wpt/css-tests/css21_dev/html4/chapter-4.htm b/tests/wpt/css-tests/css21_dev/html4/chapter-4.htm index 247edefaf60..c148945d845 100644 --- a/tests/wpt/css-tests/css21_dev/html4/chapter-4.htm +++ b/tests/wpt/css-tests/css21_dev/html4/chapter-4.htm @@ -13,7 +13,7 @@ <body> <h1>CSS 2.1 Conformance Test Suite</h1> - <h2>Syntax and basic data types (439 tests)</h2> + <h2>Syntax and basic data types (431 tests)</h2> <table width="100%"> <col id="test-column"> <col id="refs-column"> @@ -30,96 +30,11 @@ <tbody id="s4"> <tr><th colspan="4" scope="rowgroup"> <a href="#s4">+</a> - <a href="https://www.w3.org/TR/CSS21/syndata.html">4 Syntax and basic data types</a></th></tr> - <!-- 8 tests --> - <tr id="counters-001-4" class=""> - <td> - <a href="counters-001.htm">counters-001</a></td> - <td><a href="reference/counters-001-ref.htm">=</a> </td> - <td></td> - <td>Parsing counter functions with just the identifier - <ul class="assert"> - <li>Counters can be referred to using only the identifier.</li> - </ul> - </td> - </tr> - <tr id="counters-002-4" class="invalid"> - <td> - <a href="counters-002.htm">counters-002</a></td> - <td><a href="reference/no-red-filler-text-ref.htm">=</a> </td> - <td><abbr class="invalid" title="Tests invalid CSS">Invalid</abbr></td> - <td>Parsing invalid counter functions - Too many arguments - <ul class="assert"> - <li>A counter is invalid if it has too many arguments.</li> - </ul> - </td> - </tr> - <tr id="ident-014-4" class=""> - <td> - <a href="ident-014.htm">ident-014</a></td> - <td><a href="reference/filler-text-below-green.htm">=</a> </td> - <td></td> - <td>Selector attributes and hyphens - <ul class="assert"> - <li>Attribute selectors can begin with hyphens.</li> - </ul> - </td> - </tr> - <tr id="ident-015-4" class=""> - <td> - <a href="ident-015.htm">ident-015</a></td> - <td><a href="reference/filler-text-below-green.htm">=</a> </td> - <td></td> - <td>Attribute selectors and underscores - <ul class="assert"> - <li>Attribute selectors can begin with underscores.</li> - </ul> - </td> - </tr> - <tr id="ident-016-4" class=""> - <td> - <a href="ident-016.htm">ident-016</a></td> - <td><a href="reference/filler-text-below-green.htm">=</a> </td> - <td></td> - <td>Attribute selectors with hyphens and underscores - <ul class="assert"> - <li>Attribute selectors are valid if they begin with hyphens and then underscores.</li> - </ul> - </td> - </tr> - <tr id="ident-017-4" class="invalid"> - <td> - <a href="ident-017.htm">ident-017</a></td> - <td><a href="reference/no-red-filler-text-ref.htm">=</a> </td> - <td><abbr class="invalid" title="Tests invalid CSS">Invalid</abbr></td> - <td>Attribute selection with digits - <ul class="assert"> - <li>Attribute selectors cannot begin with digits.</li> - </ul> - </td> - </tr> - <tr id="ident-018-4" class="invalid"> - <td> - <a href="ident-018.htm">ident-018</a></td> - <td><a href="reference/no-red-filler-text-ref.htm">=</a> </td> - <td><abbr class="invalid" title="Tests invalid CSS">Invalid</abbr></td> - <td>Attribute selectors starting with hyphens and digits - <ul class="assert"> - <li>Attribute selectors cannot begin with hyphens then digits.</li> - </ul> - </td> - </tr> - <tr id="ident-019-4" class=""> - <td> - <a href="ident-019.htm">ident-019</a></td> - <td><a href="reference/filler-text-below-green.htm">=</a> </td> - <td></td> - <td>Attribute selectors starting with underscore and digits - <ul class="assert"> - <li>Attribute selectors can begin with underscore then digits.</li> - </ul> - </td> - </tr> + <a href="https://www.w3.org/TR/CSS21/syndata.html#q4.0">4 Syntax and basic data types</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s4.#annoying-warning"> + <!-- 0 tests --> </tbody> <tbody id="s4.1"> <tr><th colspan="4" scope="rowgroup"> diff --git a/tests/wpt/css-tests/css21_dev/html4/chapter-5.htm b/tests/wpt/css-tests/css21_dev/html4/chapter-5.htm index 88a32856ae8..30c9d15c272 100644 --- a/tests/wpt/css-tests/css21_dev/html4/chapter-5.htm +++ b/tests/wpt/css-tests/css21_dev/html4/chapter-5.htm @@ -13,7 +13,7 @@ <body> <h1>CSS 2.1 Conformance Test Suite</h1> - <h2>Selectors (677 tests)</h2> + <h2>Selectors (668 tests)</h2> <table width="100%"> <col id="test-column"> <col id="refs-column"> @@ -30,80 +30,11 @@ <tbody id="s5"> <tr><th colspan="4" scope="rowgroup"> <a href="#s5">+</a> - <a href="https://www.w3.org/TR/CSS21/selector.html">5 Selectors</a></th></tr> - <!-- 9 tests --> - <tr id="cascade-import-dynamic-001-5" class=""> - <td> - <a href="cascade-import-dynamic-001.htm">cascade-import-dynamic-001</a></td> - <td><a href="reference/ref-this-text-should-be-green.htm">=</a> </td> - <td></td> - <td>Dynamic sheet append (<style>) - </td> - </tr> - <tr id="cascade-import-dynamic-002-5" class=""> - <td> - <a href="cascade-import-dynamic-002.htm">cascade-import-dynamic-002</a></td> - <td><a href="reference/ref-this-text-should-be-green.htm">=</a> </td> - <td></td> - <td>Dynamic sheet append (<link>) - </td> - </tr> - <tr id="cascade-import-dynamic-003-5" class=""> - <td> - <a href="cascade-import-dynamic-003.htm">cascade-import-dynamic-003</a></td> - <td><a href="reference/ref-this-text-should-be-green.htm">=</a> </td> - <td></td> - <td>Dynamic sheet insertion (<style>) - </td> - </tr> - <tr id="cascade-import-dynamic-004-5" class=""> - <td> - <a href="cascade-import-dynamic-004.htm">cascade-import-dynamic-004</a></td> - <td><a href="reference/ref-this-text-should-be-green.htm">=</a> </td> - <td></td> - <td>Dynamic sheet insertion (<link>) - </td> - </tr> - <tr id="cascade-import-dynamic-005-5" class=""> - <td> - <a href="cascade-import-dynamic-005.htm">cascade-import-dynamic-005</a></td> - <td><a href="reference/ref-this-text-should-be-green.htm">=</a> </td> - <td></td> - <td>Dynamic sheet deletion (<style>) - </td> - </tr> - <tr id="cascade-import-dynamic-006-5" class=""> - <td> - <a href="cascade-import-dynamic-006.htm">cascade-import-dynamic-006</a></td> - <td><a href="reference/ref-this-text-should-be-green.htm">=</a> </td> - <td></td> - <td>Dynamic sheet deletion (<link>) - </td> - </tr> - <tr id="cascade-import-dynamic-control-5" class=""> - <td> - <a href="cascade-import-dynamic-control.htm">cascade-import-dynamic-control</a></td> - <td><a href="reference/ref-this-text-should-be-green.htm">=</a> </td> - <td></td> - <td>Control test - </td> - </tr> - <tr id="html-precedence-004-5" class="userstyle"> - <td> - <a href="html-precedence-004.htm">html-precedence-004</a></td> - <td><a href="reference/html-precedence-004-ref.htm">=</a> </td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>User Stylesheets and non-CSS Presentational Hints - </td> - </tr> - <tr id="html-precedence-005-5" class="userstyle"> - <td> - <a href="html-precedence-005.htm">html-precedence-005</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>User Stylesheets and non-CSS Presentational Hints - </td> - </tr> + <a href="https://www.w3.org/TR/CSS21/selector.html#q5.0">5 Selectors</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s5.#annoying-warning"> + <!-- 0 tests --> </tbody> <tbody id="s5.1"> <tr><th colspan="4" scope="rowgroup"> diff --git a/tests/wpt/css-tests/css21_dev/html4/chapter-6.htm b/tests/wpt/css-tests/css21_dev/html4/chapter-6.htm index 7cdb0ef2d21..04ea8886471 100644 --- a/tests/wpt/css-tests/css21_dev/html4/chapter-6.htm +++ b/tests/wpt/css-tests/css21_dev/html4/chapter-6.htm @@ -13,7 +13,7 @@ <body> <h1>CSS 2.1 Conformance Test Suite</h1> - <h2>Assigning property values, Cascading, and Inheritance (145 tests)</h2> + <h2>Assigning property values, Cascading, and Inheritance (117 tests)</h2> <table width="100%"> <col id="test-column"> <col id="refs-column"> @@ -30,316 +30,11 @@ <tbody id="s6"> <tr><th colspan="4" scope="rowgroup"> <a href="#s6">+</a> - <a href="https://www.w3.org/TR/CSS21/cascade.html">6 Assigning property values, Cascading, and Inheritance</a></th></tr> - <!-- 28 tests --> - <tr id="at-import-001-6" class=""> - <td> - <a href="at-import-001.htm">at-import-001</a></td> - <td></td> - <td></td> - <td>@import not as the first declaration - <ul class="assert"> - <li>An @import is ignored if it is not the first statement in a style block.</li> - </ul> - </td> - </tr> - <tr id="at-import-002-6" class=""> - <td> - <a href="at-import-002.htm">at-import-002</a></td> - <td><a href="reference/filler-text-below-green.htm">=</a> </td> - <td></td> - <td>Importing external stylesheets with @import - <ul class="assert"> - <li>An @import used to import external stylesheets.</li> - </ul> - </td> - </tr> - <tr id="at-import-003-6" class=""> - <td> - <a href="at-import-003.htm">at-import-003</a></td> - <td><a href="reference/filler-text-below-green.htm">=</a> </td> - <td></td> - <td>Importing styles using @import with a string - <ul class="assert"> - <li>An @import used with just a string is interpreted as if it had url(...) around it.</li> - </ul> - </td> - </tr> - <tr id="at-import-004-6" class=""> - <td> - <a href="at-import-004.htm">at-import-004</a></td> - <td><a href="reference/no-red-filler-text-ref.htm">=</a> </td> - <td></td> - <td>Media dependency on @import set to 'print' - <ul class="assert"> - <li>Specifying a media-dependency of print does not apply rules to the user agent display.</li> - </ul> - </td> - </tr> - <tr id="at-import-005-6" class=""> - <td> - <a href="at-import-005.htm">at-import-005</a></td> - <td><a href="reference/filler-text-below-green.htm">=</a> </td> - <td></td> - <td>Media dependency on @import set to 'all' - <ul class="assert"> - <li>Specifying the media-dependency of 'all' applies to all media types including user agent display.</li> - </ul> - </td> - </tr> - <tr id="at-import-006-6" class=""> - <td> - <a href="at-import-006.htm">at-import-006</a></td> - <td><a href="reference/filler-text-below-green.htm">=</a> </td> - <td></td> - <td>Media dependency on @import set to 'screen' - <ul class="assert"> - <li>Specifying the media-dependent import rules to 'screen' applies to user agent display.</li> - </ul> - </td> - </tr> - <tr id="at-import-007-6" class=""> - <td> - <a href="at-import-007.htm">at-import-007</a></td> - <td><a href="reference/filler-text-below-green.htm">=</a> </td> - <td></td> - <td>@import with @charset - <ul class="assert"> - <li>An @import is valid after @charset.</li> - </ul> - </td> - </tr> - <tr id="html-precedence-002-6" class=""> - <td> - <a href="html-precedence-002.htm">html-precedence-002</a></td> - <td></td> - <td></td> - <td>Universal selector precedence - <ul class="assert"> - <li>The universal selector and the 'color' attribute have the same specificity. The universal selector is applied since CSS takes precedence.</li> - </ul> - </td> - </tr> - <tr id="html-precedence-003-6" class="userstyle"> - <td> - <a href="html-precedence-003.htm">html-precedence-003</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>User style sheet precedence - <ul class="assert"> - <li>The 'font' element's 'color' attribute trumps the user stylesheet's universal selector. They have the same specificity but the font element is a virtual author rule.</li> - </ul> - </td> - </tr> - <tr id="inherited-value-002-6" class="ahem"> - <td> - <a href="inherited-value-002.htm">inherited-value-002</a></td> - <td></td> - <td><abbr class="ahem" title="Requires Ahem font">Ahem</abbr></td> - <td>Inheriting computed values - <ul class="assert"> - <li>The computed value of a font-size with a percentage is the percentage of its parent's font-size value. A nested element which also has a percentage applies the parents' specified value (which is inherited).</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-001-6" class="userstyle"> - <td> - <a href="user-stylesheet-001.htm">user-stylesheet-001</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>User defined stylesheet can be applied - <ul class="assert"> - <li>User stylesheet can be applied to the page.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-002-6" class="interact userstyle"> - <td> - <a href="user-stylesheet-002.htm">user-stylesheet-002</a></td> - <td></td> - <td><abbr class="interact" title="Requires user interaction">Interact</abbr><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>User defined stylesheet can be applied and persisted - <ul class="assert"> - <li>The user stylesheet is still applied after close and reopen the user agent window.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-003-6" class="userstyle"> - <td> - <a href="user-stylesheet-003.htm">user-stylesheet-003</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Rules with normal declarations in an user defined stylesheet can be overriden by rules with normal declarations from author in a style block - <ul class="assert"> - <li>A CSS rule (with normal - not !important - declarations) in an author style sheet have more weight than a CSS rule (with normal - not !important -declarations) in an user style sheet.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-004-6" class="userstyle"> - <td> - <a href="user-stylesheet-004.htm">user-stylesheet-004</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Rules with normal declarations in an user defined stylesheet can be overriden by normal declarations from author in an inline style attribute - <ul class="assert"> - <li>A normal - not !important - declaration in an inline style from author have more weight than a CSS rule (with normal - not !important -) declarations in an user style sheet.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-005-6" class="userstyle"> - <td> - <a href="user-stylesheet-005.htm">user-stylesheet-005</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Descendant selector defined in user stylesheet can be applied - <ul class="assert"> - <li>The descendant selector defined in user stylesheet is applied to the appropriate element.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-006-6" class="userstyle"> - <td> - <a href="user-stylesheet-006.htm">user-stylesheet-006</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Child selector defined in user stylesheet can be applied - <ul class="assert"> - <li>The child selector defined in user stylesheet is applied to the appropriate element.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-007-6" class="userstyle"> - <td> - <a href="user-stylesheet-007.htm">user-stylesheet-007</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Adjacent sibling selector defined in user stylesheet can be applied - <ul class="assert"> - <li>The adjacent sibling selector defined in user stylesheet is applied to the appropriate element.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-008-6" class="userstyle"> - <td> - <a href="user-stylesheet-008.htm">user-stylesheet-008</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Attribute selector defined in user stylesheet can be applied - <ul class="assert"> - <li>The attribute selector defined in user stylesheet is applied to the appropriate element.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-009-6" class="userstyle"> - <td> - <a href="user-stylesheet-009.htm">user-stylesheet-009</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>ID selector defined in user stylesheet can be applied - <ul class="assert"> - <li>The ID selector defined in user stylesheet is applied to the appropriate element.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-010-6" class="userstyle"> - <td> - <a href="user-stylesheet-010.htm">user-stylesheet-010</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Pseudo-class selector :first-child defined in user stylesheet can be applied - <ul class="assert"> - <li>The pseudo-class selector :first-child defined in user stylesheet is applied to the first child of an element.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-011-6" class="userstyle"> - <td> - <a href="user-stylesheet-011.htm">user-stylesheet-011</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Pseudo-element first-line selector defined in user stylesheet can be applied - <ul class="assert"> - <li>The pseudo-element selector :first-line defined in user stylesheet is applied to the first line of an element.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-012-6" class="history userstyle"> - <td> - <a href="user-stylesheet-012.htm">user-stylesheet-012</a></td> - <td></td> - <td><abbr class="history" title="Requires session history">History</abbr><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Link defined in user stylesheet can be applied - <ul class="assert"> - <li>The pseudo-class selector :link defined in user stylesheet is applied to all links.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-013-6" class="interact userstyle"> - <td> - <a href="user-stylesheet-013.htm">user-stylesheet-013</a></td> - <td></td> - <td><abbr class="interact" title="Requires user interaction">Interact</abbr><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Visited selector defined in user stylesheet can be applied - <ul class="assert"> - <li>The pseudo-class selector :visited defined in user stylesheet is applied when a link has already been visited.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-014-6" class="interact userstyle"> - <td> - <a href="user-stylesheet-014.htm">user-stylesheet-014</a></td> - <td></td> - <td><abbr class="interact" title="Requires user interaction">Interact</abbr><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Hover defined in user stylesheet can be applied - <ul class="assert"> - <li>The pseudo-class selector :hover defined in user stylesheet is applied when the mouse is above an element.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-015-6" class="interact userstyle"> - <td> - <a href="user-stylesheet-015.htm">user-stylesheet-015</a></td> - <td></td> - <td><abbr class="interact" title="Requires user interaction">Interact</abbr><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Pseudo-class :active defined in user stylesheet can be applied - <ul class="assert"> - <li>The pseudo-class selector :active defined in user stylesheet is implemented.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-016-6" class="userstyle"> - <td> - <a href="user-stylesheet-016.htm">user-stylesheet-016</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Pseudo-element first-letter selector defined in user stylesheet can be applied - <ul class="assert"> - <li>The pseudo-element selector :first-letter defined in user stylesheet is applied to the first letter of an element.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-017-6" class="userstyle"> - <td> - <a href="user-stylesheet-017.htm">user-stylesheet-017</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Pseudo-element before selector defined in user stylesheet can be applied - <ul class="assert"> - <li>The pseudo-element selector :before defined in user stylesheet is inserted before an element.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-018-6" class="userstyle"> - <td> - <a href="user-stylesheet-018.htm">user-stylesheet-018</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Pseudo-element after selector defined in user stylesheet can be applied - <ul class="assert"> - <li>The pseudo-element selector :after defined in user stylesheet is inserted after an element.</li> - </ul> - </td> - </tr> + <a href="https://www.w3.org/TR/CSS21/cascade.html#q6.0">6 Assigning property values, Cascading, and Inheritance</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s6.#annoying-warning"> + <!-- 0 tests --> </tbody> <tbody id="s6.1"> <tr><th colspan="4" scope="rowgroup"> diff --git a/tests/wpt/css-tests/css21_dev/html4/chapter-7.htm b/tests/wpt/css-tests/css21_dev/html4/chapter-7.htm index 8832ea24e00..ea11d5cd967 100644 --- a/tests/wpt/css-tests/css21_dev/html4/chapter-7.htm +++ b/tests/wpt/css-tests/css21_dev/html4/chapter-7.htm @@ -13,7 +13,7 @@ <body> <h1>CSS 2.1 Conformance Test Suite</h1> - <h2>Media types (22 tests)</h2> + <h2>Media types (5 tests)</h2> <table width="100%"> <col id="test-column"> <col id="refs-column"> @@ -30,195 +30,11 @@ <tbody id="s7"> <tr><th colspan="4" scope="rowgroup"> <a href="#s7">+</a> - <a href="https://www.w3.org/TR/CSS21/media.html">7 Media types</a></th></tr> - <!-- 17 tests --> - <tr id="media-dependency-001-7" class=""> - <td> - <a href="media-dependency-001.htm">media-dependency-001</a></td> - <td><a href="reference/filler-text-below-green.htm">=</a> </td> - <td></td> - <td>@media and target mediums - <ul class="assert"> - <li>@media with a target medium applies styles on that target medium (screen).</li> - </ul> - </td> - </tr> - <tr id="media-dependency-002-7" class=""> - <td> - <a href="media-dependency-002.htm">media-dependency-002</a></td> - <td><a href="reference/filler-text-below-green.htm">=</a> </td> - <td></td> - <td>@import and target mediums - <ul class="assert"> - <li>@media with a target medium applies styles on that target medium (screen).</li> - </ul> - </td> - </tr> - <tr id="media-dependency-003-7" class=""> - <td> - <a href="media-dependency-003.htm">media-dependency-003</a></td> - <td><a href="reference/filler-text-below-green.htm">=</a> </td> - <td></td> - <td>Link tags and target mediums - <ul class="assert"> - <li>Link with a target medium applies styles on that target medium (screen).</li> - </ul> - </td> - </tr> - <tr id="media-dependency-004-7" class=""> - <td> - <a href="media-dependency-004.htm">media-dependency-004</a></td> - <td><a href="reference/filler-text-below-green.htm">=</a> </td> - <td></td> - <td>Case-insensitive media types - <ul class="assert"> - <li>Media types are case-insensitive.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-005-7" class="invalid"> - <td> - <a href="media-dependency-005.htm">media-dependency-005</a></td> - <td><a href="reference/filler-text-below-green.htm">=</a> </td> - <td><abbr class="invalid" title="Tests invalid CSS">Invalid</abbr></td> - <td>Ignoring bad media types with @import - <ul class="assert"> - <li>User agent ignores media types it does not understand with @import.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-006-7" class="invalid"> - <td> - <a href="media-dependency-006.htm">media-dependency-006</a></td> - <td><a href="reference/filler-text-below-green.htm">=</a> </td> - <td><abbr class="invalid" title="Tests invalid CSS">Invalid</abbr></td> - <td>Ignoring bad media types with @media - <ul class="assert"> - <li>User agent ignores media types it does not understand with @media.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-007-7" class=""> - <td> - <a href="media-dependency-007.htm">media-dependency-007</a></td> - <td><a href="reference/no-red-filler-text-ref.htm">=</a> </td> - <td></td> - <td>Non-matching target mediums - <ul class="assert"> - <li>The @media block does not apply because it does not match the target medium.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-008-7" class=""> - <td> - <a href="media-dependency-008.htm">media-dependency-008</a></td> - <td><a href="reference/no-red-filler-text-ref.htm">=</a> </td> - <td></td> - <td>Non-matching target mediums and @import - <ul class="assert"> - <li>The @import command does not apply because it does not match the target medium.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-009-7" class=""> - <td> - <a href="media-dependency-009.htm">media-dependency-009</a></td> - <td><a href="reference/filler-text-below-green.htm">=</a> </td> - <td></td> - <td>Matching the 'All' target medium - <ul class="assert"> - <li>The 'all' media type applies to the screen medium.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-010-7" class=""> - <td> - <a href="media-dependency-010.htm">media-dependency-010</a></td> - <td><a href="reference/no-red-filler-text-ref.htm">=</a> </td> - <td></td> - <td>Non-matching target mediums (braille) - <ul class="assert"> - <li>The 'braille' media type does not apply to the screen medium.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-011-7" class=""> - <td> - <a href="media-dependency-011.htm">media-dependency-011</a></td> - <td><a href="reference/no-red-filler-text-ref.htm">=</a> </td> - <td></td> - <td>Non-matching target mediums (embossed) - <ul class="assert"> - <li>The 'embossed' media type does not apply to the screen medium.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-012-7" class=""> - <td> - <a href="media-dependency-012.htm">media-dependency-012</a></td> - <td><a href="reference/no-red-filler-text-ref.htm">=</a> </td> - <td></td> - <td>Non-matching target mediums (handheld) - <ul class="assert"> - <li>The 'handheld' media type does not apply to the screen medium.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-013-7" class=""> - <td> - <a href="media-dependency-013.htm">media-dependency-013</a></td> - <td><a href="reference/no-red-filler-text-ref.htm">=</a> </td> - <td></td> - <td>Non-matching target mediums (projection) - <ul class="assert"> - <li>The 'projection' media type does not apply to the screen medium.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-014-7" class=""> - <td> - <a href="media-dependency-014.htm">media-dependency-014</a></td> - <td><a href="reference/no-red-filler-text-ref.htm">=</a> </td> - <td></td> - <td>Non-matching target mediums (speech) - <ul class="assert"> - <li>The 'speech' media type does not apply to the screen medium.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-015-7" class=""> - <td> - <a href="media-dependency-015.htm">media-dependency-015</a></td> - <td><a href="reference/no-red-filler-text-ref.htm">=</a> </td> - <td></td> - <td>Non-matching target mediums (tty) - <ul class="assert"> - <li>The 'tty' media type does not apply to the screen medium.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-016-7" class=""> - <td> - <a href="media-dependency-016.htm">media-dependency-016</a></td> - <td><a href="reference/no-red-filler-text-ref.htm">=</a> </td> - <td></td> - <td>Non-matching target mediums (tv) - <ul class="assert"> - <li>The 'tv' media type does not apply to the screen medium.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-017-7" class=""> - <td> - <a href="media-dependency-017.htm">media-dependency-017</a></td> - <td><a href="reference/filler-text-below-green.htm">=</a> </td> - <td></td> - <td>Multiple target mediums - <ul class="assert"> - <li>An '@media' rule specifies the target media types separated by commas.</li> - </ul> - </td> - </tr> + <a href="https://www.w3.org/TR/CSS21/media.html#q7.0">7 Media types</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s7.#annoying-warning"> + <!-- 0 tests --> </tbody> <tbody id="s7.1"> <tr><th colspan="4" scope="rowgroup"> diff --git a/tests/wpt/css-tests/css21_dev/html4/chapter-8.htm b/tests/wpt/css-tests/css21_dev/html4/chapter-8.htm index 9bfb23d9a95..30e3e8c279f 100644 --- a/tests/wpt/css-tests/css21_dev/html4/chapter-8.htm +++ b/tests/wpt/css-tests/css21_dev/html4/chapter-8.htm @@ -33,6 +33,9 @@ <a href="https://www.w3.org/TR/CSS21/box.html#box-model">8 Box model</a></th></tr> <!-- 0 tests --> </tbody> + <tbody id="s8.#annoying-warning"> + <!-- 0 tests --> + </tbody> <tbody id="s8.1"> <tr><th colspan="4" scope="rowgroup"> <a href="#s8.1">+</a> diff --git a/tests/wpt/css-tests/css21_dev/html4/chapter-9.htm b/tests/wpt/css-tests/css21_dev/html4/chapter-9.htm index 21bd6a382a8..bdddc615005 100644 --- a/tests/wpt/css-tests/css21_dev/html4/chapter-9.htm +++ b/tests/wpt/css-tests/css21_dev/html4/chapter-9.htm @@ -13,7 +13,7 @@ <body> <h1>CSS 2.1 Conformance Test Suite</h1> - <h2>Visual formatting model (1247 tests)</h2> + <h2>Visual formatting model (1246 tests)</h2> <table width="100%"> <col id="test-column"> <col id="refs-column"> @@ -30,16 +30,11 @@ <tbody id="s9"> <tr><th colspan="4" scope="rowgroup"> <a href="#s9">+</a> - <a href="https://www.w3.org/TR/CSS21/visuren.html">9 Visual formatting model</a></th></tr> - <!-- 1 tests --> - <tr id="c5526c-display-000-9" class=""> - <td> - <a href="c5526c-display-000.htm">c5526c-display-000</a></td> - <td></td> - <td></td> - <td>display/box/float/clear test - </td> - </tr> + <a href="https://www.w3.org/TR/CSS21/visuren.html#q9.0">9 Visual formatting model</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s9.#annoying-warning"> + <!-- 0 tests --> </tbody> <tbody id="s9.1"> <tr><th colspan="4" scope="rowgroup"> diff --git a/tests/wpt/css-tests/css21_dev/html4/chapter-A.htm b/tests/wpt/css-tests/css21_dev/html4/chapter-A.htm index 3fdde888e57..784edbb8a65 100644 --- a/tests/wpt/css-tests/css21_dev/html4/chapter-A.htm +++ b/tests/wpt/css-tests/css21_dev/html4/chapter-A.htm @@ -30,7 +30,10 @@ <tbody id="sA"> <tr><th colspan="4" scope="rowgroup"> <a href="#sA">+</a> - <a href="https://www.w3.org/TR/CSS21/aural.html">A Aural style sheets</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/aural.html#q19.0">A Aural style sheets</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="sA.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="sA.1"> diff --git a/tests/wpt/css-tests/css21_dev/html4/chapter-B.htm b/tests/wpt/css-tests/css21_dev/html4/chapter-B.htm index 035b229cd65..00ba706167b 100644 --- a/tests/wpt/css-tests/css21_dev/html4/chapter-B.htm +++ b/tests/wpt/css-tests/css21_dev/html4/chapter-B.htm @@ -30,7 +30,10 @@ <tbody id="sB"> <tr><th colspan="4" scope="rowgroup"> <a href="#sB">+</a> - <a href="https://www.w3.org/TR/CSS21/refs.html">B Bibliography</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/refs.html#q20.0">B Bibliography</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="sB.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="sB.1"> diff --git a/tests/wpt/css-tests/css21_dev/html4/chapter-C.htm b/tests/wpt/css-tests/css21_dev/html4/chapter-C.htm index 6ce8a92d6f8..280e4ecac7f 100644 --- a/tests/wpt/css-tests/css21_dev/html4/chapter-C.htm +++ b/tests/wpt/css-tests/css21_dev/html4/chapter-C.htm @@ -13,7 +13,7 @@ <body> <h1>CSS 2.1 Conformance Test Suite</h1> - <h2>Changes (5 tests)</h2> + <h2>Changes (0 tests)</h2> <table width="100%"> <col id="test-column"> <col id="refs-column"> @@ -30,7 +30,10 @@ <tbody id="sC"> <tr><th colspan="4" scope="rowgroup"> <a href="#sC">+</a> - <a href="https://www.w3.org/TR/CSS21/changes.html">C Changes</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/changes.html#q21.0">C Changes</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="sC.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="sC.1"> @@ -45,7 +48,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#a4.3.6">C.1.1 Section 4.3.6 Colors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.1.1.#q2"> + <tbody id="sC.1.1.#q21.2"> <!-- 0 tests --> </tbody> <tbody id="sC.1.2"> @@ -54,7 +57,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#a9.2.4">C.1.2 Section 9.2.4 The 'display' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.1.2.#q3"> + <tbody id="sC.1.2.#q21.3"> <!-- 0 tests --> </tbody> <tbody id="sC.1.3"> @@ -63,7 +66,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#a12.2">C.1.3 Section 12.2 The 'content' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.1.3.#q4"> + <tbody id="sC.1.3.#q21.4"> <!-- 0 tests --> </tbody> <tbody id="sC.1.4"> @@ -72,7 +75,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#a16.6">C.1.4 Section 16.6 White space: the 'white-space' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.1.4.#q5"> + <tbody id="sC.1.4.#q21.5"> <!-- 0 tests --> </tbody> <tbody id="sC.1.5"> @@ -81,7 +84,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#a18.1">C.1.5 Section 18.1 Cursors: the 'cursor' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.1.5.#q6"> + <tbody id="sC.1.5.#q21.6"> <!-- 0 tests --> </tbody> <tbody id="sC.2"> @@ -96,7 +99,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c1.1">C.2.1 Section 1.1 CSS 2.1 vs CSS 2</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.1.#q8"> + <tbody id="sC.2.1.#q21.8"> <!-- 0 tests --> </tbody> <tbody id="sC.2.2"> @@ -105,7 +108,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c1.2">C.2.2 Section 1.2 Reading the specification</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.2.#q9"> + <tbody id="sC.2.2.#q21.9"> <!-- 0 tests --> </tbody> <tbody id="sC.2.3"> @@ -114,7 +117,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c1.3">C.2.3 Section 1.3 How the specification is organized</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.3.#q10"> + <tbody id="sC.2.3.#q21.10"> <!-- 0 tests --> </tbody> <tbody id="sC.2.4"> @@ -123,7 +126,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c1.4.2.1">C.2.4 Section 1.4.2.1 Value</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.4.#q11"> + <tbody id="sC.2.4.#q21.11"> <!-- 0 tests --> </tbody> <tbody id="sC.2.5"> @@ -132,7 +135,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c1.4.2.6">C.2.5 Section 1.4.2.6 Media groups</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.5.#q12"> + <tbody id="sC.2.5.#q21.12"> <!-- 0 tests --> </tbody> <tbody id="sC.2.6"> @@ -141,7 +144,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c1.4.2.7">C.2.6 Section 1.4.2.7 Computed value</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.6.#q13"> + <tbody id="sC.2.6.#q21.13"> <!-- 0 tests --> </tbody> <tbody id="sC.2.7"> @@ -150,7 +153,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c1.4.4">C.2.7 Section 1.4.4 Notes and examples</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.7.#q14"> + <tbody id="sC.2.7.#q21.14"> <!-- 0 tests --> </tbody> <tbody id="sC.2.8"> @@ -159,7 +162,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c1.5">C.2.8 Section 1.5 Acknowledgments</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.8.#q15"> + <tbody id="sC.2.8.#q21.15"> <!-- 0 tests --> </tbody> <tbody id="sC.2.9"> @@ -168,7 +171,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c3.2">C.2.9 Section 3.2 Conformance</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.9.#q16"> + <tbody id="sC.2.9.#q21.16"> <!-- 0 tests --> </tbody> <tbody id="sC.2.10"> @@ -177,7 +180,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c3.3">C.2.10 Section 3.3 Error Conditions</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.10.#q17"> + <tbody id="sC.2.10.#q21.17"> <!-- 0 tests --> </tbody> <tbody id="sC.2.11"> @@ -186,7 +189,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c4.1.1">C.2.11 Section 4.1.1 Tokenization</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.11.#q18"> + <tbody id="sC.2.11.#q21.18"> <!-- 0 tests --> </tbody> <tbody id="sC.2.11.#underscore"> @@ -198,7 +201,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c4.1.3">C.2.12 Section 4.1.3 Characters and case</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.12.#q19"> + <tbody id="sC.2.12.#q21.19"> <!-- 0 tests --> </tbody> <tbody id="sC.2.13"> @@ -207,7 +210,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c4.2">C.2.13 Section 4.2 Rules for handling parsing errors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.13.#q20"> + <tbody id="sC.2.13.#q21.20"> <!-- 0 tests --> </tbody> <tbody id="sC.2.14"> @@ -216,7 +219,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c4.3">C.2.14 Section 4.3 Values</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.14.#q21"> + <tbody id="sC.2.14.#q21.21"> <!-- 0 tests --> </tbody> <tbody id="sC.2.15"> @@ -225,7 +228,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c4.3.2">C.2.15 Section 4.3.2 Lengths</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.15.#q22"> + <tbody id="sC.2.15.#q21.22"> <!-- 0 tests --> </tbody> <tbody id="sC.2.16"> @@ -234,7 +237,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c4.3.4">C.2.16 Section 4.3.4 URLs and URIs</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.16.#q23"> + <tbody id="sC.2.16.#q21.23"> <!-- 0 tests --> </tbody> <tbody id="sC.2.17"> @@ -243,7 +246,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c4.3.5">C.2.17 Section 4.3.5 Counters</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.17.#q24"> + <tbody id="sC.2.17.#q21.24"> <!-- 0 tests --> </tbody> <tbody id="sC.2.18"> @@ -252,7 +255,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c4.3.6">C.2.18 Section 4.3.6 Colors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.18.#q25"> + <tbody id="sC.2.18.#q21.25"> <!-- 0 tests --> </tbody> <tbody id="sC.2.19"> @@ -261,7 +264,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c4.3.8">C.2.19 Section 4.3.8 Unsupported Values</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.19.#q26"> + <tbody id="sC.2.19.#q21.26"> <!-- 0 tests --> </tbody> <tbody id="sC.2.20"> @@ -270,7 +273,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c4.4">C.2.20 Section 4.4 CSS style sheet representation</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.20.#q27"> + <tbody id="sC.2.20.#q21.27"> <!-- 0 tests --> </tbody> <tbody id="sC.2.21"> @@ -279,7 +282,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c5.8.1">C.2.21 Section 5.8.1 Matching attributes and attribute values</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.21.#q28"> + <tbody id="sC.2.21.#q21.28"> <!-- 0 tests --> </tbody> <tbody id="sC.2.22"> @@ -288,7 +291,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c5.8.3">C.2.22 Section 5.8.3 Class selectors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.22.#q29"> + <tbody id="sC.2.22.#q21.29"> <!-- 0 tests --> </tbody> <tbody id="sC.2.23"> @@ -297,7 +300,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c5.9">C.2.23 Section 5.9 ID selectors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.23.#q30"> + <tbody id="sC.2.23.#q21.30"> <!-- 0 tests --> </tbody> <tbody id="sC.2.24"> @@ -306,7 +309,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c5.10">C.2.24 Section 5.10 Pseudo-elements and pseudo-classes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.24.#q31"> + <tbody id="sC.2.24.#q21.31"> <!-- 0 tests --> </tbody> <tbody id="sC.2.25"> @@ -315,7 +318,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c5.11.2">C.2.25 Section 5.11.2 The link pseudo-classes: :link and :visited</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.25.#q32"> + <tbody id="sC.2.25.#q21.32"> <!-- 0 tests --> </tbody> <tbody id="sC.2.26"> @@ -324,7 +327,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c5.11.4">C.2.26 Section 5.11.4 The language pseudo-class: :lang</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.26.#q33"> + <tbody id="sC.2.26.#q21.33"> <!-- 0 tests --> </tbody> <tbody id="sC.2.27"> @@ -333,7 +336,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c5.12.1">C.2.27 Section 5.12.1 The :first-line pseudo-element</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.27.#q34"> + <tbody id="sC.2.27.#q21.34"> <!-- 0 tests --> </tbody> <tbody id="sC.2.28"> @@ -342,7 +345,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c5.12.2">C.2.28 Section 5.12.2 The :first-letter pseudo-element</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.28.#q35"> + <tbody id="sC.2.28.#q21.35"> <!-- 0 tests --> </tbody> <tbody id="sC.2.29"> @@ -351,7 +354,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c6.1">C.2.29 Section 6.1 Specified, computed, and actual values</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.29.#q36"> + <tbody id="sC.2.29.#q21.36"> <!-- 0 tests --> </tbody> <tbody id="sC.2.30"> @@ -360,7 +363,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c6.4.1">C.2.30 Section 6.4.1 Cascading order</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.30.#q37"> + <tbody id="sC.2.30.#q21.37"> <!-- 0 tests --> </tbody> <tbody id="sC.2.31"> @@ -369,7 +372,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c6.4.3">C.2.31 Section 6.4.3 Calculating a selector's specificity</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.31.#q38"> + <tbody id="sC.2.31.#q21.38"> <!-- 0 tests --> </tbody> <tbody id="sC.2.32"> @@ -378,7 +381,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c6.4.4">C.2.32 Section 6.4.4 Precedence of non-CSS presentational hints</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.32.#q39"> + <tbody id="sC.2.32.#q21.39"> <!-- 0 tests --> </tbody> <tbody id="sC.2.33"> @@ -387,7 +390,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c7.3">C.2.33 Section 7.3 Recognized Media Types</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.33.#q40"> + <tbody id="sC.2.33.#q21.40"> <!-- 0 tests --> </tbody> <tbody id="sC.2.34"> @@ -396,7 +399,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c7.3.1">C.2.34 Section 7.3.1 Media Groups</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.34.#q41"> + <tbody id="sC.2.34.#q21.41"> <!-- 0 tests --> </tbody> <tbody id="sC.2.35"> @@ -405,7 +408,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c8.3">C.2.35 Section 8.3 Margin properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.35.#q42"> + <tbody id="sC.2.35.#q21.42"> <!-- 0 tests --> </tbody> <tbody id="sC.2.36"> @@ -414,7 +417,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c8.3.1">C.2.36 Section 8.3.1 Collapsing margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.36.#q43"> + <tbody id="sC.2.36.#q21.43"> <!-- 0 tests --> </tbody> <tbody id="sC.2.37"> @@ -423,7 +426,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c8.4">C.2.37 Section 8.4 Padding properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.37.#q44"> + <tbody id="sC.2.37.#q21.44"> <!-- 0 tests --> </tbody> <tbody id="sC.2.38"> @@ -432,7 +435,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c8.5.2">C.2.38 Section 8.5.2 Border color</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.38.#q45"> + <tbody id="sC.2.38.#q21.45"> <!-- 0 tests --> </tbody> <tbody id="sC.2.39"> @@ -441,7 +444,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c8.5.3">C.2.39 Section 8.5.3 Border style</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.39.#q46"> + <tbody id="sC.2.39.#q21.46"> <!-- 0 tests --> </tbody> <tbody id="sC.2.40"> @@ -450,7 +453,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c8.6">C.2.40 Section 8.6 The box model for inline elements in bidirectional context</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.40.#q47"> + <tbody id="sC.2.40.#q21.47"> <!-- 0 tests --> </tbody> <tbody id="sC.2.41"> @@ -459,7 +462,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.1.2">C.2.41 Section 9.1.2 Containing blocks</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.41.#q48"> + <tbody id="sC.2.41.#q21.48"> <!-- 0 tests --> </tbody> <tbody id="sC.2.42"> @@ -468,7 +471,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.2.1.1">C.2.42 Section 9.2.1.1 Anonymous block boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.42.#q49"> + <tbody id="sC.2.42.#q21.49"> <!-- 0 tests --> </tbody> <tbody id="sC.2.43"> @@ -477,7 +480,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.2.2.1">C.2.43 Section 9.2.2.1 Anonymous inline boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.43.#q50"> + <tbody id="sC.2.43.#q21.50"> <!-- 0 tests --> </tbody> <tbody id="sC.2.44"> @@ -486,7 +489,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.2.3">C.2.44 Section 9.2.3 Run-in boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.44.#q51"> + <tbody id="sC.2.44.#q21.51"> <!-- 0 tests --> </tbody> <tbody id="sC.2.45"> @@ -495,7 +498,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.2.4">C.2.45 Section 9.2.4 The 'display' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.45.#q52"> + <tbody id="sC.2.45.#q21.52"> <!-- 0 tests --> </tbody> <tbody id="sC.2.46"> @@ -504,7 +507,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.3.1">C.2.46 Section 9.3.1 Choosing a positioning scheme</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.46.#q53"> + <tbody id="sC.2.46.#q21.53"> <!-- 0 tests --> </tbody> <tbody id="sC.2.47"> @@ -513,7 +516,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.3.2">C.2.47 Section 9.3.2 Box offsets</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.47.#q54"> + <tbody id="sC.2.47.#q21.54"> <!-- 0 tests --> </tbody> <tbody id="sC.2.48"> @@ -522,7 +525,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.4.1">C.2.48 Section 9.4.1 Block formatting contexts</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.48.#q55"> + <tbody id="sC.2.48.#q21.55"> <!-- 0 tests --> </tbody> <tbody id="sC.2.49"> @@ -531,7 +534,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.4.2">C.2.49 Section 9.4.2 Inline formatting context</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.49.#q56"> + <tbody id="sC.2.49.#q21.56"> <!-- 0 tests --> </tbody> <tbody id="sC.2.50"> @@ -540,7 +543,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.4.3">C.2.50 Section 9.4.3 Relative positioning</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.50.#q57"> + <tbody id="sC.2.50.#q21.57"> <!-- 0 tests --> </tbody> <tbody id="sC.2.51"> @@ -549,7 +552,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.5">C.2.51 Section 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.51.#q58"> + <tbody id="sC.2.51.#q21.58"> <!-- 0 tests --> </tbody> <tbody id="sC.2.52"> @@ -558,7 +561,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.5.1">C.2.52 Section 9.5.1 Positioning the float</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.52.#q59"> + <tbody id="sC.2.52.#q21.59"> <!-- 0 tests --> </tbody> <tbody id="sC.2.53"> @@ -567,7 +570,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.5.2">C.2.53 Section 9.5.2 Controlling flow next to floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.53.#q60"> + <tbody id="sC.2.53.#q21.60"> <!-- 0 tests --> </tbody> <tbody id="sC.2.54"> @@ -576,7 +579,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.7">C.2.54 Section 9.7 Relationships between 'display', 'position', and 'float'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.54.#q61"> + <tbody id="sC.2.54.#q21.61"> <!-- 0 tests --> </tbody> <tbody id="sC.2.55"> @@ -585,7 +588,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.9">C.2.55 Section 9.9 Layered presentation</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.55.#q62"> + <tbody id="sC.2.55.#q21.62"> <!-- 0 tests --> </tbody> <tbody id="sC.2.56"> @@ -594,7 +597,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.10">C.2.56 Section 9.10 Text direction</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.56.#q63"> + <tbody id="sC.2.56.#q21.63"> <!-- 0 tests --> </tbody> <tbody id="sC.2.57"> @@ -603,7 +606,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10">C.2.57 Chapter 10 Visual formatting model details</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.57.#q64"> + <tbody id="sC.2.57.#q21.64"> <!-- 0 tests --> </tbody> <tbody id="sC.2.58"> @@ -615,7 +618,7 @@ <tbody id="sC.2.58.#initial-containing-block"> <!-- 0 tests --> </tbody> - <tbody id="sC.2.58.#q65"> + <tbody id="sC.2.58.#q21.65"> <!-- 0 tests --> </tbody> <tbody id="sC.2.59"> @@ -624,7 +627,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.2">C.2.59 Section 10.2 Content width</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.59.#q66"> + <tbody id="sC.2.59.#q21.66"> <!-- 0 tests --> </tbody> <tbody id="sC.2.60"> @@ -633,7 +636,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.3">C.2.60 Section 10.3 Calculating widths and margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.60.#q67"> + <tbody id="sC.2.60.#q21.67"> <!-- 0 tests --> </tbody> <tbody id="sC.2.61"> @@ -642,7 +645,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.3.2">C.2.61 Section 10.3.2 Inline, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.61.#q68"> + <tbody id="sC.2.61.#q21.68"> <!-- 0 tests --> </tbody> <tbody id="sC.2.62"> @@ -651,7 +654,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.3.3">C.2.62 Section 10.3.3 Block-level, non-replaced elements in normal flow</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.62.#q69"> + <tbody id="sC.2.62.#q21.69"> <!-- 0 tests --> </tbody> <tbody id="sC.2.63"> @@ -660,7 +663,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.3.4">C.2.63 Section 10.3.4 Block-level, replaced elements in normal flow</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.63.#q70"> + <tbody id="sC.2.63.#q21.70"> <!-- 0 tests --> </tbody> <tbody id="sC.2.64"> @@ -669,7 +672,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.3.5">C.2.64 Section 10.3.5 Floating, non-replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.64.#q71"> + <tbody id="sC.2.64.#q21.71"> <!-- 0 tests --> </tbody> <tbody id="sC.2.65"> @@ -678,7 +681,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.3.6">C.2.65 Section 10.3.6 Floating, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.65.#q72"> + <tbody id="sC.2.65.#q21.72"> <!-- 0 tests --> </tbody> <tbody id="sC.2.66"> @@ -687,7 +690,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.3.7">C.2.66 Section 10.3.7 Absolutely positioned, non-replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.66.#q73"> + <tbody id="sC.2.66.#q21.73"> <!-- 0 tests --> </tbody> <tbody id="sC.2.67"> @@ -696,7 +699,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.3.8">C.2.67 Section 10.3.8 Absolutely positioned, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.67.#q74"> + <tbody id="sC.2.67.#q21.74"> <!-- 0 tests --> </tbody> <tbody id="sC.2.68"> @@ -705,7 +708,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.4">C.2.68 Section 10.4 Minimum and maximum widths</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.68.#q75"> + <tbody id="sC.2.68.#q21.75"> <!-- 0 tests --> </tbody> <tbody id="sC.2.69"> @@ -714,7 +717,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.5">C.2.69 Section 10.5 Content height</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.69.#q76"> + <tbody id="sC.2.69.#q21.76"> <!-- 0 tests --> </tbody> <tbody id="sC.2.70"> @@ -723,7 +726,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.6">C.2.70 Section 10.6 Calculating heights and margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.70.#q77"> + <tbody id="sC.2.70.#q21.77"> <!-- 0 tests --> </tbody> <tbody id="sC.2.71"> @@ -732,7 +735,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.6.1">C.2.71 Section 10.6.1 Inline, non-replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.71.#q78"> + <tbody id="sC.2.71.#q21.78"> <!-- 0 tests --> </tbody> <tbody id="sC.2.72"> @@ -741,7 +744,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.6.2">C.2.72 Section 10.6.2 Inline replaced elements, block-level replaced elements in normal flow, 'inline-block' replaced elements in normal flow and floating replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.72.#q79"> + <tbody id="sC.2.72.#q21.79"> <!-- 0 tests --> </tbody> <tbody id="sC.2.73"> @@ -750,7 +753,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.6.3">C.2.73 Section 10.6.3 Block-level non-replaced elements in normal flow when 'overflow' computes to 'visible'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.73.#q80"> + <tbody id="sC.2.73.#q21.80"> <!-- 0 tests --> </tbody> <tbody id="sC.2.74"> @@ -759,7 +762,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.6.4">C.2.74 Section 10.6.4 Absolutely positioned, non-replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.74.#q81"> + <tbody id="sC.2.74.#q21.81"> <!-- 0 tests --> </tbody> <tbody id="sC.2.75"> @@ -768,7 +771,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.6.5">C.2.75 Section 10.6.5 Absolutely positioned, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.75.#q82"> + <tbody id="sC.2.75.#q21.82"> <!-- 0 tests --> </tbody> <tbody id="sC.2.76"> @@ -777,7 +780,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.7">C.2.76 Section 10.7 Minimum and maximum heights</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.76.#q83"> + <tbody id="sC.2.76.#q21.83"> <!-- 0 tests --> </tbody> <tbody id="sC.2.77"> @@ -786,7 +789,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.8">C.2.77 Section 10.8 Line height calculations</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.77.#q84"> + <tbody id="sC.2.77.#q21.84"> <!-- 0 tests --> </tbody> <tbody id="sC.2.78"> @@ -795,7 +798,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.8.1">C.2.78 Section 10.8.1 Leading and half-leading</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.78.#q85"> + <tbody id="sC.2.78.#q21.85"> <!-- 0 tests --> </tbody> <tbody id="sC.2.79"> @@ -804,7 +807,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c11.1">C.2.79 Section 11.1 Overflow and clipping</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.79.#q86"> + <tbody id="sC.2.79.#q21.86"> <!-- 0 tests --> </tbody> <tbody id="sC.2.80"> @@ -813,7 +816,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c11.1.1">C.2.80 Section 11.1.1 Overflow</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.80.#q87"> + <tbody id="sC.2.80.#q21.87"> <!-- 0 tests --> </tbody> <tbody id="sC.2.81"> @@ -822,7 +825,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c11.1.2">C.2.81 Section 11.1.2 Clipping: the 'clip' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.81.#q88"> + <tbody id="sC.2.81.#q21.88"> <!-- 0 tests --> </tbody> <tbody id="sC.2.82"> @@ -831,7 +834,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c11.2">C.2.82 Section 11.2 Visibility</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.82.#q89"> + <tbody id="sC.2.82.#q21.89"> <!-- 0 tests --> </tbody> <tbody id="sC.2.83"> @@ -840,7 +843,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c12">C.2.83 Chapter 12 Generated content, automatic numbering, and lists</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.83.#q90"> + <tbody id="sC.2.83.#q21.90"> <!-- 0 tests --> </tbody> <tbody id="sC.2.84"> @@ -849,7 +852,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c12.1">C.2.84 Section 12.1 The :before and :after pseudo-elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.84.#q91"> + <tbody id="sC.2.84.#q21.91"> <!-- 0 tests --> </tbody> <tbody id="sC.2.85"> @@ -858,7 +861,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c12.2">C.2.85 Section 12.2 The 'content' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.85.#q92"> + <tbody id="sC.2.85.#q21.92"> <!-- 0 tests --> </tbody> <tbody id="sC.2.86"> @@ -867,7 +870,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c12.3.2">C.2.86 Section 12.3.2 Inserting quotes with the 'content' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.86.#q93"> + <tbody id="sC.2.86.#q21.93"> <!-- 0 tests --> </tbody> <tbody id="sC.2.87"> @@ -876,7 +879,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c12.4">C.2.87 Section 12.4 Automatic counters and numbering</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.87.#q94"> + <tbody id="sC.2.87.#q21.94"> <!-- 0 tests --> </tbody> <tbody id="sC.2.88"> @@ -885,7 +888,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c12.4.1">C.2.88 Section 12.4.1 Nested counters and scope</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.88.#q95"> + <tbody id="sC.2.88.#q21.95"> <!-- 0 tests --> </tbody> <tbody id="sC.2.89"> @@ -894,7 +897,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c12.5">C.2.89 Section 12.5 Lists</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.89.#q96"> + <tbody id="sC.2.89.#q21.96"> <!-- 0 tests --> </tbody> <tbody id="sC.2.90"> @@ -903,7 +906,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c12.5.1">C.2.90 Section 12.5.1 Lists</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.90.#q97"> + <tbody id="sC.2.90.#q21.97"> <!-- 0 tests --> </tbody> <tbody id="sC.2.91"> @@ -912,7 +915,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c13.1">C.2.91 Chapter 13 Paged media</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.91.#q98"> + <tbody id="sC.2.91.#q21.98"> <!-- 0 tests --> </tbody> <tbody id="sC.2.92"> @@ -921,7 +924,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c13.2.2">C.2.92 Section 13.2.2 Page selectors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.92.#q99"> + <tbody id="sC.2.92.#q21.99"> <!-- 0 tests --> </tbody> <tbody id="sC.2.93"> @@ -930,7 +933,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c13.3.1">C.2.93 Section 13.3.1 Page break properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.93.#q100"> + <tbody id="sC.2.93.#q21.100"> <!-- 0 tests --> </tbody> <tbody id="sC.2.94"> @@ -939,7 +942,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c13.3.3">C.2.94 Section 13.3.3 Allowed page breaks</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.94.#q101"> + <tbody id="sC.2.94.#q21.101"> <!-- 0 tests --> </tbody> <tbody id="sC.2.95"> @@ -948,7 +951,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c14.2.1">C.2.95 Section 14.2.1 Background properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.95.#q102"> + <tbody id="sC.2.95.#q21.102"> <!-- 0 tests --> </tbody> <tbody id="sC.2.96"> @@ -957,7 +960,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c14.3">C.2.96 Section 14.3 Gamma correction</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.96.#q103"> + <tbody id="sC.2.96.#q21.103"> <!-- 0 tests --> </tbody> <tbody id="sC.2.97"> @@ -966,7 +969,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c15">C.2.97 Chapter 15 Fonts</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.97.#q104"> + <tbody id="sC.2.97.#q21.104"> <!-- 0 tests --> </tbody> <tbody id="sC.2.98"> @@ -975,7 +978,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c15.2">C.2.98 Section 15.2 Font matching algorithm</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.98.#q105"> + <tbody id="sC.2.98.#q21.105"> <!-- 0 tests --> </tbody> <tbody id="sC.2.99"> @@ -984,7 +987,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c15.3">C.2.99 Section 15.2.2 Font family</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.99.#q106"> + <tbody id="sC.2.99.#q21.106"> <!-- 0 tests --> </tbody> <tbody id="sC.2.100"> @@ -993,7 +996,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c15.5">C.2.100 Section 15.5 Small-caps</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.100.#q107"> + <tbody id="sC.2.100.#q21.107"> <!-- 0 tests --> </tbody> <tbody id="sC.2.101"> @@ -1002,7 +1005,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c15.6">C.2.101 Section 15.6 Font boldness</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.101.#q108"> + <tbody id="sC.2.101.#q21.108"> <!-- 0 tests --> </tbody> <tbody id="sC.2.102"> @@ -1011,7 +1014,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c15.7">C.2.102 Section 15.7 Font size</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.102.#q109"> + <tbody id="sC.2.102.#q21.109"> <!-- 0 tests --> </tbody> <tbody id="sC.2.103"> @@ -1020,7 +1023,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c16">C.2.103 Chapter 16 Text</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.103.#q110"> + <tbody id="sC.2.103.#q21.110"> <!-- 0 tests --> </tbody> <tbody id="sC.2.104"> @@ -1029,7 +1032,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c16.2">C.2.104 Section 16.2 Alignment</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.104.#q111"> + <tbody id="sC.2.104.#q21.111"> <!-- 0 tests --> </tbody> <tbody id="sC.2.105"> @@ -1038,7 +1041,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c16.3.1">C.2.105 Section 16.3.1 Underlining, over lining, striking, and blinking</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.105.#q112"> + <tbody id="sC.2.105.#q21.112"> <!-- 0 tests --> </tbody> <tbody id="sC.2.106"> @@ -1047,7 +1050,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c16.4">C.2.106 Section 16.4 Letter and word spacing</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.106.#q113"> + <tbody id="sC.2.106.#q21.113"> <!-- 0 tests --> </tbody> <tbody id="sC.2.107"> @@ -1056,7 +1059,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c16.5">C.2.107 Section 16.5 Capitalization</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.107.#q114"> + <tbody id="sC.2.107.#q21.114"> <!-- 0 tests --> </tbody> <tbody id="sC.2.108"> @@ -1065,7 +1068,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c16.6">C.2.108 Section 16.6 White space</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.108.#q115"> + <tbody id="sC.2.108.#q21.115"> <!-- 0 tests --> </tbody> <tbody id="sC.2.109"> @@ -1074,7 +1077,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17">C.2.109 Chapter 17 Tables</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.109.#q116"> + <tbody id="sC.2.109.#q21.116"> <!-- 0 tests --> </tbody> <tbody id="sC.2.110"> @@ -1083,7 +1086,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.2">C.2.110 Section 17.2 The CSS table model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.110.#q117"> + <tbody id="sC.2.110.#q21.117"> <!-- 0 tests --> </tbody> <tbody id="sC.2.111"> @@ -1092,7 +1095,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.2.1">C.2.111 Section 17.2.1 Anonymous table objects</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.111.#q118"> + <tbody id="sC.2.111.#q21.118"> <!-- 0 tests --> </tbody> <tbody id="sC.2.112"> @@ -1101,7 +1104,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.4">C.2.112 Section 17.4 Tables in the visual formatting model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.112.#q119"> + <tbody id="sC.2.112.#q21.119"> <!-- 0 tests --> </tbody> <tbody id="sC.2.113"> @@ -1110,7 +1113,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.4.1">C.2.113 Section 17.4.1 Caption position and alignment</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.113.#q120"> + <tbody id="sC.2.113.#q21.120"> <!-- 0 tests --> </tbody> <tbody id="sC.2.114"> @@ -1119,7 +1122,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.5">C.2.114 Section 17.5 Visual layout of table contents</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.114.#q121"> + <tbody id="sC.2.114.#q21.121"> <!-- 0 tests --> </tbody> <tbody id="sC.2.115"> @@ -1128,7 +1131,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.5.1">C.2.115 Section 17.5.1 Table layers and transparency</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.115.#q122"> + <tbody id="sC.2.115.#q21.122"> <!-- 0 tests --> </tbody> <tbody id="sC.2.116"> @@ -1137,7 +1140,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.5.2.1">C.2.116 Section 17.5.2.1 Fixed table layout</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.116.#q123"> + <tbody id="sC.2.116.#q21.123"> <!-- 0 tests --> </tbody> <tbody id="sC.2.117"> @@ -1146,7 +1149,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.5.2.2">C.2.117 Section 17.5.2.2 Automatic table layout</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.117.#q124"> + <tbody id="sC.2.117.#q21.124"> <!-- 0 tests --> </tbody> <tbody id="sC.2.118"> @@ -1155,7 +1158,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.5.3">C.2.118 Section 17.5.3 Table height algorithms</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.118.#q125"> + <tbody id="sC.2.118.#q21.125"> <!-- 0 tests --> </tbody> <tbody id="sC.2.119"> @@ -1164,7 +1167,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.5.4">C.2.119 Section 17.5.4 Horizontal alignment in a column</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.119.#q126"> + <tbody id="sC.2.119.#q21.126"> <!-- 0 tests --> </tbody> <tbody id="sC.2.120"> @@ -1173,7 +1176,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.6">C.2.120 Section 17.6 Borders</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.120.#q127"> + <tbody id="sC.2.120.#q21.127"> <!-- 0 tests --> </tbody> <tbody id="sC.2.121"> @@ -1182,7 +1185,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.6.1">C.2.121 Section 17.6.1 The separated borders model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.121.#q128"> + <tbody id="sC.2.121.#q21.128"> <!-- 0 tests --> </tbody> <tbody id="sC.2.122"> @@ -1191,7 +1194,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.6.1.1">C.2.122 Section 17.6.1.1 Borders and Backgrounds around empty cells</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.122.#q129"> + <tbody id="sC.2.122.#q21.129"> <!-- 0 tests --> </tbody> <tbody id="sC.2.123"> @@ -1200,7 +1203,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.6.2">C.2.123 Section 17.6.2 The collapsing border model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.123.#q130"> + <tbody id="sC.2.123.#q21.130"> <!-- 0 tests --> </tbody> <tbody id="sC.2.124"> @@ -1209,7 +1212,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.6.2.1">C.2.124 Section 17.6.2.1 Border conflict resolution</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.124.#q131"> + <tbody id="sC.2.124.#q21.131"> <!-- 0 tests --> </tbody> <tbody id="sC.2.125"> @@ -1218,7 +1221,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c18.1">C.2.125 Section 18.1 Cursors: the 'cursor' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.125.#q132"> + <tbody id="sC.2.125.#q21.132"> <!-- 0 tests --> </tbody> <tbody id="sC.2.126"> @@ -1227,7 +1230,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c18.4">C.2.126 Section 18.4 Dynamic outlines</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.126.#q133"> + <tbody id="sC.2.126.#q21.133"> <!-- 0 tests --> </tbody> <tbody id="sC.2.127"> @@ -1236,7 +1239,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s-12">C.2.127 Chapter 12 Generated content, automatic numbering, and lists</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.127.#q134"> + <tbody id="sC.2.127.#q21.134"> <!-- 0 tests --> </tbody> <tbody id="sC.2.128"> @@ -1245,7 +1248,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#cA">C.2.128 Appendix A. Aural style sheets</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.128.#q135"> + <tbody id="sC.2.128.#q21.135"> <!-- 0 tests --> </tbody> <tbody id="sC.2.129"> @@ -1254,7 +1257,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#cA.5">C.2.129 Appendix A Section 5 Pause properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.129.#q136"> + <tbody id="sC.2.129.#q21.136"> <!-- 0 tests --> </tbody> <tbody id="sC.2.130"> @@ -1263,7 +1266,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#cA.6">C.2.130 Appendix A Section 6 Cue properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.130.#q137"> + <tbody id="sC.2.130.#q21.137"> <!-- 0 tests --> </tbody> <tbody id="sC.2.131"> @@ -1272,7 +1275,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#cA.7">C.2.131 Appendix A Section 7 Mixing properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.131.#q138"> + <tbody id="sC.2.131.#q21.138"> <!-- 0 tests --> </tbody> <tbody id="sC.2.132"> @@ -1281,7 +1284,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#cB">C.2.132 Appendix B Bibliography</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.132.#q139"> + <tbody id="sC.2.132.#q21.139"> <!-- 0 tests --> </tbody> <tbody id="sC.2.133"> @@ -1290,7 +1293,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#other">C.2.133 Other</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.133.#q140"> + <tbody id="sC.2.133.#q21.140"> <!-- 0 tests --> </tbody> <tbody id="sC.3"> @@ -1305,19 +1308,8 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x-shorthand-inherit">C.3.1 Shorthand properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.1.#q142"> - <!-- 1 tests --> - <tr id="font-045-C.3.1.#q142" class="ahem invalid"> - <td> - <a href="font-045.htm">font-045</a></td> - <td></td> - <td><abbr class="ahem" title="Requires Ahem font">Ahem</abbr><abbr class="invalid" title="Tests invalid CSS">Invalid</abbr></td> - <td>font - inherit keyword value - <ul class="assert"> - <li>The inherit keyword value cannot mix with other subproperty values</li> - </ul> - </td> - </tr> + <tbody id="sC.3.1.#q21.142"> + <!-- 0 tests --> </tbody> <tbody id="sC.3.2"> <tr><th colspan="4" scope="rowgroup"> @@ -1325,7 +1317,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x-applies-table">C.3.2 Applies to</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.2.#q143"> + <tbody id="sC.3.2.#q21.143"> <!-- 0 tests --> </tbody> <tbody id="sC.3.3"> @@ -1334,7 +1326,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x4.1.1">C.3.3 Section 4.1.1 (and G2)</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.3.#q144"> + <tbody id="sC.3.3.#q21.144"> <!-- 0 tests --> </tbody> <tbody id="sC.3.4"> @@ -1343,7 +1335,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x4.1.3">C.3.4 Section 4.1.3 Characters and case</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.4.#q145"> + <tbody id="sC.3.4.#q21.145"> <!-- 0 tests --> </tbody> <tbody id="sC.3.5"> @@ -1352,7 +1344,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x4.3">C.3.5 Section 4.3 (Double sign problem)</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.5.#q146"> + <tbody id="sC.3.5.#q21.146"> <!-- 0 tests --> </tbody> <tbody id="sC.3.6"> @@ -1361,7 +1353,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x4.3.2">C.3.6 Section 4.3.2 Lengths</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.6.#q147"> + <tbody id="sC.3.6.#q21.147"> <!-- 0 tests --> </tbody> <tbody id="sC.3.7"> @@ -1370,7 +1362,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x4.3.3">C.3.7 Section 4.3.3 Percentages</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.7.#q148"> + <tbody id="sC.3.7.#q21.148"> <!-- 0 tests --> </tbody> <tbody id="sC.3.8"> @@ -1379,7 +1371,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x4.3.4">C.3.8 Section 4.3.4 URLs and URIs</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.8.#q149"> + <tbody id="sC.3.8.#q21.149"> <!-- 0 tests --> </tbody> <tbody id="sC.3.9"> @@ -1388,7 +1380,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x4.3.5">C.3.9 Section 4.3.5 Counters</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.9.#q150"> + <tbody id="sC.3.9.#q21.150"> <!-- 0 tests --> </tbody> <tbody id="sC.3.10"> @@ -1397,7 +1389,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x4.3.6">C.3.10 Section 4.3.6 Colors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.10.#q151"> + <tbody id="sC.3.10.#q21.151"> <!-- 0 tests --> </tbody> <tbody id="sC.3.11"> @@ -1406,7 +1398,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x4.3.7">C.3.11 Section 4.3.7 Strings</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.11.#q152"> + <tbody id="sC.3.11.#q21.152"> <!-- 0 tests --> </tbody> <tbody id="sC.3.12"> @@ -1415,7 +1407,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x5.10">C.3.12 Section 5.10 Pseudo-elements and pseudo-classes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.12.#q153"> + <tbody id="sC.3.12.#q21.153"> <!-- 0 tests --> </tbody> <tbody id="sC.3.13"> @@ -1424,7 +1416,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x6.4">C.3.13 Section 6.4 The cascade</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.13.#q154"> + <tbody id="sC.3.13.#q21.154"> <!-- 0 tests --> </tbody> <tbody id="sC.3.14"> @@ -1433,7 +1425,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x8.1">C.3.14 Section 8.1 Box Dimensions</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.14.#q155"> + <tbody id="sC.3.14.#q21.155"> <!-- 0 tests --> </tbody> <tbody id="sC.3.15"> @@ -1442,7 +1434,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x8.2">C.3.15 Section 8.2 Example of margins, padding, and borders</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.15.#q156"> + <tbody id="sC.3.15.#q21.156"> <!-- 0 tests --> </tbody> <tbody id="sC.3.16"> @@ -1451,7 +1443,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x8.5.4">C.3.16 Section 8.5.4 Border shorthand properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.16.#q157"> + <tbody id="sC.3.16.#q21.157"> <!-- 0 tests --> </tbody> <tbody id="sC.3.17"> @@ -1460,7 +1452,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.2.1">C.3.17 Section 9.2.1 Block-level elements and block boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.17.#q158"> + <tbody id="sC.3.17.#q21.158"> <!-- 0 tests --> </tbody> <tbody id="sC.3.18"> @@ -1469,7 +1461,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.3.1">C.3.18 Section 9.3.1 Choosing a positioning scheme</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.18.#q159"> + <tbody id="sC.3.18.#q21.159"> <!-- 0 tests --> </tbody> <tbody id="sC.3.19"> @@ -1478,7 +1470,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.3.2">C.3.19 Section 9.3.2 Box offsets</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.19.#q160"> + <tbody id="sC.3.19.#q21.160"> <!-- 0 tests --> </tbody> <tbody id="sC.3.20"> @@ -1487,7 +1479,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.4.1">C.3.20 Section 9.4.1 Block formatting contexts</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.20.#q161"> + <tbody id="sC.3.20.#q21.161"> <!-- 0 tests --> </tbody> <tbody id="sC.3.21"> @@ -1496,7 +1488,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.4.2">C.3.21 Section 9.4.2 Inline formatting context</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.21.#q162"> + <tbody id="sC.3.21.#q21.162"> <!-- 0 tests --> </tbody> <tbody id="sC.3.22"> @@ -1505,7 +1497,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.4.3">C.3.22 Section 9.4.3 Relative positioning</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.22.#q163"> + <tbody id="sC.3.22.#q21.163"> <!-- 0 tests --> </tbody> <tbody id="sC.3.23"> @@ -1514,7 +1506,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.5">C.3.23 Section 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.23.#q164"> + <tbody id="sC.3.23.#q21.164"> <!-- 0 tests --> </tbody> <tbody id="sC.3.24"> @@ -1523,7 +1515,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.5.1">C.3.24 Section 9.5.1 Positioning the float</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.24.#q165"> + <tbody id="sC.3.24.#q21.165"> <!-- 0 tests --> </tbody> <tbody id="sC.3.25"> @@ -1532,7 +1524,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.5.2">C.3.25 Section 9.5.2 Controlling flow next to floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.25.#q166"> + <tbody id="sC.3.25.#q21.166"> <!-- 0 tests --> </tbody> <tbody id="sC.3.26"> @@ -1541,7 +1533,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.6">C.3.26 Section 9.6 Absolute positioning</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.26.#q167"> + <tbody id="sC.3.26.#q21.167"> <!-- 0 tests --> </tbody> <tbody id="sC.3.27"> @@ -1550,7 +1542,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.7">C.3.27 Section 9.7 Relationships between 'display', 'position', and 'float'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.27.#q168"> + <tbody id="sC.3.27.#q21.168"> <!-- 0 tests --> </tbody> <tbody id="sC.3.28"> @@ -1559,7 +1551,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.10">C.3.28 Section 9.10 Text direction</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.28.#q169"> + <tbody id="sC.3.28.#q21.169"> <!-- 0 tests --> </tbody> <tbody id="sC.3.29"> @@ -1568,7 +1560,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x10.1">C.3.29 Section 10.1 Definition of "containing block"</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.29.#q170"> + <tbody id="sC.3.29.#q21.170"> <!-- 0 tests --> </tbody> <tbody id="sC.3.30"> @@ -1577,7 +1569,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x10.3.3">C.3.30 Section 10.3.3 Block-level, non-replaced elements in normal flow</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.30.#q171"> + <tbody id="sC.3.30.#q21.171"> <!-- 0 tests --> </tbody> <tbody id="sC.3.31"> @@ -1586,7 +1578,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x10.4">C.3.31 Section 10.4 Minimum and maximum widths</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.31.#q172"> + <tbody id="sC.3.31.#q21.172"> <!-- 0 tests --> </tbody> <tbody id="sC.3.32"> @@ -1595,7 +1587,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x10.6.3">C.3.32 Section 10.6.3 Block-level non-replaced elements in normal flow when 'overflow' computes to 'visible'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.32.#q173"> + <tbody id="sC.3.32.#q21.173"> <!-- 0 tests --> </tbody> <tbody id="sC.3.33"> @@ -1604,7 +1596,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x10.7">C.3.33 Section 10.7 Minimum and maximum heights</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.33.#q174"> + <tbody id="sC.3.33.#q21.174"> <!-- 0 tests --> </tbody> <tbody id="sC.3.34"> @@ -1613,7 +1605,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x11.1.1">C.3.34 Section 11.1.1 Overflow</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.34.#q175"> + <tbody id="sC.3.34.#q21.175"> <!-- 0 tests --> </tbody> <tbody id="sC.3.35"> @@ -1622,7 +1614,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x11.1.2">C.3.35 Section 11.1.2 Clipping: the 'clip' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.35.#q176"> + <tbody id="sC.3.35.#q21.176"> <!-- 0 tests --> </tbody> <tbody id="sC.3.36"> @@ -1631,7 +1623,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x11.2">C.3.36 Section 11.2 Visibility</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.36.#q177"> + <tbody id="sC.3.36.#q21.177"> <!-- 0 tests --> </tbody> <tbody id="sC.3.37"> @@ -1640,7 +1632,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x12.4.2">C.3.37 Section 12.4.2 Counter styles</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.37.#q178"> + <tbody id="sC.3.37.#q21.178"> <!-- 0 tests --> </tbody> <tbody id="sC.3.38"> @@ -1649,7 +1641,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x12.6.2">C.3.38 Section 12.6.2 Lists</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.38.#q179"> + <tbody id="sC.3.38.#q21.179"> <!-- 0 tests --> </tbody> <tbody id="sC.3.39"> @@ -1658,7 +1650,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x14.2">C.3.39 Section 14.2 The background</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.39.#q180"> + <tbody id="sC.3.39.#q21.180"> <!-- 0 tests --> </tbody> <tbody id="sC.3.40"> @@ -1667,7 +1659,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x14.2.1">C.3.40 Section 14.2.1 Background properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.40.#q181"> + <tbody id="sC.3.40.#q21.181"> <!-- 0 tests --> </tbody> <tbody id="sC.3.41"> @@ -1676,7 +1668,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x15.2">C.3.41 Section 15.2 Font matching algorithm</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.41.#q182"> + <tbody id="sC.3.41.#q21.182"> <!-- 0 tests --> </tbody> <tbody id="sC.3.42"> @@ -1685,7 +1677,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x15.7">C.3.42 Section 15.7 Font size</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.42.#q183"> + <tbody id="sC.3.42.#q21.183"> <!-- 0 tests --> </tbody> <tbody id="sC.3.43"> @@ -1694,7 +1686,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x16.1">C.3.43 Section 16.1 Indentation</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.43.#q184"> + <tbody id="sC.3.43.#q21.184"> <!-- 0 tests --> </tbody> <tbody id="sC.3.44"> @@ -1703,7 +1695,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x16.2">C.3.44 Section 16.2 Alignment</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.44.#q185"> + <tbody id="sC.3.44.#q21.185"> <!-- 0 tests --> </tbody> <tbody id="sC.3.45"> @@ -1712,7 +1704,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x17.2">C.3.45 Section 17.2 The CSS table model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.45.#q186"> + <tbody id="sC.3.45.#q21.186"> <!-- 0 tests --> </tbody> <tbody id="sC.3.46"> @@ -1721,7 +1713,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x17.2.1">C.3.46 Section 17.2.1 Anonymous table objects</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.46.#q187"> + <tbody id="sC.3.46.#q21.187"> <!-- 0 tests --> </tbody> <tbody id="sC.3.47"> @@ -1730,7 +1722,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x17.4">C.3.47 Section 17.4 Tables in the visual formatting model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.47.#q188"> + <tbody id="sC.3.47.#q21.188"> <!-- 0 tests --> </tbody> <tbody id="sC.3.48"> @@ -1739,7 +1731,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x17.5">C.3.48 Section 17.5 Visual layout of table contents</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.48.#q189"> + <tbody id="sC.3.48.#q21.189"> <!-- 0 tests --> </tbody> <tbody id="sC.3.49"> @@ -1748,7 +1740,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x17.5.1">C.3.49 Section 17.5.1 Table layers and transparency</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.49.#q190"> + <tbody id="sC.3.49.#q21.190"> <!-- 0 tests --> </tbody> <tbody id="sC.3.50"> @@ -1757,7 +1749,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x17.6.1">C.3.50 Section 17.6.1 The separated borders model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.50.#q191"> + <tbody id="sC.3.50.#q21.191"> <!-- 0 tests --> </tbody> <tbody id="sC.3.51"> @@ -1766,7 +1758,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x18.2">C.3.51 Section 18.2 System Colors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.51.#q192"> + <tbody id="sC.3.51.#q21.192"> <!-- 0 tests --> </tbody> <tbody id="sC.3.52"> @@ -1775,7 +1767,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#xE.2">C.3.52 Section E.2 Painting order</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.52.#q193"> + <tbody id="sC.3.52.#q21.193"> <!-- 0 tests --> </tbody> <tbody id="sC.4"> @@ -1790,7 +1782,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r2.1">C.4.1 Section 2.1 A brief CSS 2.1 tutorial for HTML</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.1.#q195"> + <tbody id="sC.4.1.#q21.195"> <!-- 0 tests --> </tbody> <tbody id="sC.4.2"> @@ -1799,7 +1791,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r2.2">C.4.2 Section 2.2 A brief CSS 2.1 tutorial for XML</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.2.#q196"> + <tbody id="sC.4.2.#q21.196"> <!-- 0 tests --> </tbody> <tbody id="sC.4.3"> @@ -1808,7 +1800,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r2.3">C.4.3 Section 2.3 The CSS 2.1 processing model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.3.#q197"> + <tbody id="sC.4.3.#q21.197"> <!-- 0 tests --> </tbody> <tbody id="sC.4.4"> @@ -1817,7 +1809,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r3.1">C.4.4 Section 3.1 Definitions</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.4.#q198"> + <tbody id="sC.4.4.#q21.198"> <!-- 0 tests --> </tbody> <tbody id="sC.4.5"> @@ -1826,7 +1818,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r4.1">C.4.5 Section 4.1 Syntax</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.5.#q199"> + <tbody id="sC.4.5.#q21.199"> <!-- 0 tests --> </tbody> <tbody id="sC.4.6"> @@ -1835,7 +1827,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r4.1.1">C.4.6 Section 4.1.1 Tokenization</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.6.#q200"> + <tbody id="sC.4.6.#q21.200"> <!-- 0 tests --> </tbody> <tbody id="sC.4.7"> @@ -1844,7 +1836,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r4.1.3">C.4.7 Section 4.1.3 Characters and case</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.7.#q201"> + <tbody id="sC.4.7.#q21.201"> <!-- 0 tests --> </tbody> <tbody id="sC.4.8"> @@ -1853,7 +1845,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r4.1.7">C.4.8 Section 4.1.7 Rule sets, declaration blocks, and selectors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.8.#q202"> + <tbody id="sC.4.8.#q21.202"> <!-- 0 tests --> </tbody> <tbody id="sC.4.9"> @@ -1862,7 +1854,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r4.2">C.4.9 Section 4.2 Rules for handling parsing errors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.9.#q203"> + <tbody id="sC.4.9.#q21.203"> <!-- 0 tests --> </tbody> <tbody id="sC.4.10"> @@ -1871,7 +1863,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r4.3.1">C.4.10 Section 4.3.1 Integers and real numbers</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.10.#q204"> + <tbody id="sC.4.10.#q21.204"> <!-- 0 tests --> </tbody> <tbody id="sC.4.11"> @@ -1880,7 +1872,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r4.3.2">C.4.11 Section 4.3.2 Lengths</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.11.#q205"> + <tbody id="sC.4.11.#q21.205"> <!-- 0 tests --> </tbody> <tbody id="sC.4.12"> @@ -1889,7 +1881,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r4.3.4">C.4.12 Section 4.3.4 URLs and URIs</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.12.#q206"> + <tbody id="sC.4.12.#q21.206"> <!-- 0 tests --> </tbody> <tbody id="sC.4.13"> @@ -1898,7 +1890,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r5.1">C.4.13 Section 5.1 Pattern matching</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.13.#q207"> + <tbody id="sC.4.13.#q21.207"> <!-- 0 tests --> </tbody> <tbody id="sC.4.14"> @@ -1907,7 +1899,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r5.7">C.4.14 Section 5.7 Adjacent sibling selectors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.14.#q208"> + <tbody id="sC.4.14.#q21.208"> <!-- 0 tests --> </tbody> <tbody id="sC.4.15"> @@ -1916,7 +1908,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r5.8.1">C.4.15 Section 5.8.1 Matching attributes and attribute values</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.15.#q209"> + <tbody id="sC.4.15.#q21.209"> <!-- 0 tests --> </tbody> <tbody id="sC.4.16"> @@ -1925,7 +1917,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r5.8.2">C.4.16 Section 5.8.2 Default attribute values in DTDs</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.16.#q210"> + <tbody id="sC.4.16.#q21.210"> <!-- 0 tests --> </tbody> <tbody id="sC.4.17"> @@ -1934,7 +1926,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r5.9">C.4.17 Section 5.9 ID selectors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.17.#q211"> + <tbody id="sC.4.17.#q21.211"> <!-- 0 tests --> </tbody> <tbody id="sC.4.18"> @@ -1943,7 +1935,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r5.11.3">C.4.18 Section 5.11.3 The dynamic pseudo-classes: :hover, :active, and :focus</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.18.#q212"> + <tbody id="sC.4.18.#q21.212"> <!-- 0 tests --> </tbody> <tbody id="sC.4.19"> @@ -1952,7 +1944,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r5.11.4">C.4.19 Section 5.11.4 The language pseudo-class: :lang</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.19.#q213"> + <tbody id="sC.4.19.#q21.213"> <!-- 0 tests --> </tbody> <tbody id="sC.4.20"> @@ -1961,7 +1953,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r5.12.2">C.4.20 Section 5.12.2 The :first-letter pseudo-element</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.20.#q214"> + <tbody id="sC.4.20.#q21.214"> <!-- 0 tests --> </tbody> <tbody id="sC.4.21"> @@ -1970,7 +1962,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r6.2">C.4.21 Section 6.2 Inheritance</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.21.#q215"> + <tbody id="sC.4.21.#q21.215"> <!-- 0 tests --> </tbody> <tbody id="sC.4.22"> @@ -1979,7 +1971,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r6.2.1">C.4.22 Section 6.2.1 The 'inherit' value</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.22.#q216"> + <tbody id="sC.4.22.#q21.216"> <!-- 0 tests --> </tbody> <tbody id="sC.4.23"> @@ -1988,7 +1980,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r6.3">C.4.23 Section 6.3 The @import rule</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.23.#q217"> + <tbody id="sC.4.23.#q21.217"> <!-- 0 tests --> </tbody> <tbody id="sC.4.24"> @@ -1997,7 +1989,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r6.4">C.4.24 Section 6.4 The Cascade</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.24.#q218"> + <tbody id="sC.4.24.#q21.218"> <!-- 0 tests --> </tbody> <tbody id="sC.4.25"> @@ -2006,7 +1998,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r6.4.1">C.4.25 Section 6.4.1 Cascading order</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.25.#q219"> + <tbody id="sC.4.25.#q21.219"> <!-- 0 tests --> </tbody> <tbody id="sC.4.26"> @@ -2015,7 +2007,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r6.4.3">C.4.26 Section 6.4.3 Calculating a selector's specificity</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.26.#q220"> + <tbody id="sC.4.26.#q21.220"> <!-- 0 tests --> </tbody> <tbody id="sC.4.27"> @@ -2024,7 +2016,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r7.2.1">C.4.27 Section 7.2.1 The @media rule</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.27.#q221"> + <tbody id="sC.4.27.#q21.221"> <!-- 0 tests --> </tbody> <tbody id="sC.4.28"> @@ -2033,7 +2025,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r7.3">C.4.28 Section 7.3 Recognized media types</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.28.#q222"> + <tbody id="sC.4.28.#q21.222"> <!-- 0 tests --> </tbody> <tbody id="sC.4.29"> @@ -2042,7 +2034,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r7.3.1">C.4.29 Section 7.3.1 Media groups</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.29.#q223"> + <tbody id="sC.4.29.#q21.223"> <!-- 0 tests --> </tbody> <tbody id="sC.4.30"> @@ -2051,7 +2043,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r8.1">C.4.30 Section 8.1 Box dimensions</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.30.#q224"> + <tbody id="sC.4.30.#q21.224"> <!-- 0 tests --> </tbody> <tbody id="sC.4.31"> @@ -2060,7 +2052,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r8.3">C.4.31 Section 8.3 Margin properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.31.#q225"> + <tbody id="sC.4.31.#q21.225"> <!-- 0 tests --> </tbody> <tbody id="sC.4.32"> @@ -2069,7 +2061,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r8.3.1">C.4.32 Section 8.3.1 Collapsing margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.32.#q226"> + <tbody id="sC.4.32.#q21.226"> <!-- 0 tests --> </tbody> <tbody id="sC.4.33"> @@ -2078,7 +2070,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r8.5.3">C.4.33 Section 8.5.3 Border style</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.33.#q227"> + <tbody id="sC.4.33.#q21.227"> <!-- 0 tests --> </tbody> <tbody id="sC.4.34"> @@ -2087,7 +2079,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r9.1.1">C.4.34 Section 9.1.1 The viewport</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.34.#q228"> + <tbody id="sC.4.34.#q21.228"> <!-- 0 tests --> </tbody> <tbody id="sC.4.35"> @@ -2096,7 +2088,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r9.2.4">C.4.35 Section 9.2.4 The 'display' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.35.#q229"> + <tbody id="sC.4.35.#q21.229"> <!-- 0 tests --> </tbody> <tbody id="sC.4.36"> @@ -2105,7 +2097,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r9.3.1">C.4.36 Section 9.3.1 Choosing a positioning scheme</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.36.#q230"> + <tbody id="sC.4.36.#q21.230"> <!-- 0 tests --> </tbody> <tbody id="sC.4.37"> @@ -2114,7 +2106,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r9.3.2">C.4.37 Section 9.3.2 Box offsets</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.37.#q231"> + <tbody id="sC.4.37.#q21.231"> <!-- 0 tests --> </tbody> <tbody id="sC.4.38"> @@ -2123,7 +2115,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r9.4.2">C.4.38 Section 9.4.2 Inline formatting context</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.38.#q232"> + <tbody id="sC.4.38.#q21.232"> <!-- 0 tests --> </tbody> <tbody id="sC.4.39"> @@ -2132,7 +2124,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r9.4.3">C.4.39 Section 9.4.3 Relative positioning</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.39.#q233"> + <tbody id="sC.4.39.#q21.233"> <!-- 0 tests --> </tbody> <tbody id="sC.4.40"> @@ -2141,7 +2133,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r9.5">C.4.40 Section 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.40.#q234"> + <tbody id="sC.4.40.#q21.234"> <!-- 0 tests --> </tbody> <tbody id="sC.4.41"> @@ -2150,7 +2142,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r9.5.1">C.4.41 Section 9.5.1 Positioning the float</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.41.#q235"> + <tbody id="sC.4.41.#q21.235"> <!-- 0 tests --> </tbody> <tbody id="sC.4.42"> @@ -2159,7 +2151,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r9.5.2">C.4.42 Section 9.5.2 Controlling flow next to floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.42.#q236"> + <tbody id="sC.4.42.#q21.236"> <!-- 0 tests --> </tbody> <tbody id="sC.4.43"> @@ -2168,7 +2160,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r9.8">C.4.43 Section 9.8 Comparison of normal flow, floats, and absolute positioning</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.43.#q237"> + <tbody id="sC.4.43.#q21.237"> <!-- 0 tests --> </tbody> <tbody id="sC.4.44"> @@ -2177,7 +2169,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r10.1">C.4.44 Section 10.1 Definition of "containing block"</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.44.#q238"> + <tbody id="sC.4.44.#q21.238"> <!-- 0 tests --> </tbody> <tbody id="sC.4.45"> @@ -2186,7 +2178,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r10.2">C.4.45 Section 10.2 Content width</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.45.#q239"> + <tbody id="sC.4.45.#q21.239"> <!-- 0 tests --> </tbody> <tbody id="sC.4.46"> @@ -2195,7 +2187,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r10.3.3">C.4.46 Section 10.3.3 Block-level, non-replaced elements in normal flow</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.46.#q240"> + <tbody id="sC.4.46.#q21.240"> <!-- 0 tests --> </tbody> <tbody id="sC.4.47"> @@ -2204,7 +2196,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r10.3.8">C.4.47 Section 10.3.8 Absolutely positioning, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.47.#q241"> + <tbody id="sC.4.47.#q21.241"> <!-- 0 tests --> </tbody> <tbody id="sC.4.48"> @@ -2213,7 +2205,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r10.4">C.4.48 Section 10.4 Minimum and maximum widths</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.48.#q242"> + <tbody id="sC.4.48.#q21.242"> <!-- 0 tests --> </tbody> <tbody id="sC.4.49"> @@ -2222,7 +2214,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r10.6.1">C.4.49 Section 10.6 Calculating heights and margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.49.#q243"> + <tbody id="sC.4.49.#q21.243"> <!-- 0 tests --> </tbody> <tbody id="sC.4.50"> @@ -2231,7 +2223,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r10.7">C.4.50 Section 10.7 Minimum and maximum heights</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.50.#q244"> + <tbody id="sC.4.50.#q21.244"> <!-- 0 tests --> </tbody> <tbody id="sC.4.51"> @@ -2240,7 +2232,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r10.8">C.4.51 Section 10.8 Line height calculations</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.51.#q245"> + <tbody id="sC.4.51.#q21.245"> <!-- 0 tests --> </tbody> <tbody id="sC.4.52"> @@ -2249,7 +2241,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r10.8.1">C.4.52 Section 10.8.1 Leading and half-leading</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.52.#q246"> + <tbody id="sC.4.52.#q21.246"> <!-- 0 tests --> </tbody> <tbody id="sC.4.53"> @@ -2258,7 +2250,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r11.1">C.4.53 Section 11.1 Overflow and clipping</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.53.#q247"> + <tbody id="sC.4.53.#q21.247"> <!-- 0 tests --> </tbody> <tbody id="sC.4.54"> @@ -2267,7 +2259,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r11.1.1">C.4.54 Section 11.1.1 Overflow</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.54.#q248"> + <tbody id="sC.4.54.#q21.248"> <!-- 0 tests --> </tbody> <tbody id="sC.4.55"> @@ -2276,7 +2268,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r11.1.2">C.4.55 Section 11.1.2 Clipping</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.55.#q249"> + <tbody id="sC.4.55.#q21.249"> <!-- 0 tests --> </tbody> <tbody id="sC.4.56"> @@ -2285,19 +2277,8 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r11.2">C.4.56 Section 11.2 Visibility</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.56.#q250"> - <!-- 1 tests --> - <tr id="visibility-005-C.4.56.#q250" class="ahem"> - <td> - <a href="visibility-005.htm">visibility-005</a></td> - <td><a href="reference/ref-filled-green-100px-square.htm">=</a> </td> - <td><abbr class="ahem" title="Requires Ahem font">Ahem</abbr></td> - <td>visibility - descendants of a 'visibility: hidden' element - <ul class="assert"> - <li>Descendants of a 'visibility: hidden' element will be visible if they have 'visibility: visible'</li> - </ul> - </td> - </tr> + <tbody id="sC.4.56.#q21.250"> + <!-- 0 tests --> </tbody> <tbody id="sC.4.57"> <tr><th colspan="4" scope="rowgroup"> @@ -2305,7 +2286,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r12.1">C.4.57 Section 12.1 The :before and :after pseudo-elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.57.#q251"> + <tbody id="sC.4.57.#q21.251"> <!-- 0 tests --> </tbody> <tbody id="sC.4.58"> @@ -2314,7 +2295,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r12.2">C.4.58 Section 12.2 The 'content' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.58.#q252"> + <tbody id="sC.4.58.#q21.252"> <!-- 0 tests --> </tbody> <tbody id="sC.4.59"> @@ -2323,7 +2304,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r12.3.2">C.4.59 Section 12.3.2 Inserting quotes with the 'content' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.59.#q253"> + <tbody id="sC.4.59.#q21.253"> <!-- 0 tests --> </tbody> <tbody id="sC.4.60"> @@ -2332,7 +2313,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r12.4">C.4.60 Section 12.4 Automatic counters and numbering</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.60.#q254"> + <tbody id="sC.4.60.#q21.254"> <!-- 0 tests --> </tbody> <tbody id="sC.4.61"> @@ -2341,7 +2322,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r12.4.3">C.4.61 Section 12.4.3 Counters in elements with 'display: none'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.61.#q255"> + <tbody id="sC.4.61.#q21.255"> <!-- 0 tests --> </tbody> <tbody id="sC.4.62"> @@ -2350,7 +2331,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r14.2">C.4.62 Section 14.2 The background</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.62.#q256"> + <tbody id="sC.4.62.#q21.256"> <!-- 0 tests --> </tbody> <tbody id="sC.4.63"> @@ -2359,7 +2340,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r15.1">C.4.63 Section 15.1 Fonts Introduction</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.63.#q257"> + <tbody id="sC.4.63.#q21.257"> <!-- 0 tests --> </tbody> <tbody id="sC.4.64"> @@ -2368,7 +2349,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r15.2">C.4.64 Section 15.2 Font matching algorithm</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.64.#q258"> + <tbody id="sC.4.64.#q21.258"> <!-- 0 tests --> </tbody> <tbody id="sC.4.65"> @@ -2377,7 +2358,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r15.3">C.4.65 Section 15.2.2 Font family</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.65.#q259"> + <tbody id="sC.4.65.#q21.259"> <!-- 0 tests --> </tbody> <tbody id="sC.4.66"> @@ -2386,7 +2367,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r15.3.1">C.4.66 Section 15.3.1 Generic font families</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.66.#q260"> + <tbody id="sC.4.66.#q21.260"> <!-- 0 tests --> </tbody> <tbody id="sC.4.67"> @@ -2395,7 +2376,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r15.4">C.4.67 Section 15.4 Font styling</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.67.#q261"> + <tbody id="sC.4.67.#q21.261"> <!-- 0 tests --> </tbody> <tbody id="sC.4.68"> @@ -2404,7 +2385,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r15.5">C.4.68 Section 15.5 Small-caps</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.68.#q262"> + <tbody id="sC.4.68.#q21.262"> <!-- 0 tests --> </tbody> <tbody id="sC.4.69"> @@ -2413,7 +2394,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r15.6">C.4.69 Section 15.6 Font boldness</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.69.#q263"> + <tbody id="sC.4.69.#q21.263"> <!-- 0 tests --> </tbody> <tbody id="sC.4.70"> @@ -2422,7 +2403,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r15.7">C.4.70 Section 15.7 Font size</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.70.#q264"> + <tbody id="sC.4.70.#q21.264"> <!-- 0 tests --> </tbody> <tbody id="sC.4.71"> @@ -2431,7 +2412,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r16.1">C.4.71 Section 16.1 Indentation</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.71.#q265"> + <tbody id="sC.4.71.#q21.265"> <!-- 0 tests --> </tbody> <tbody id="sC.4.72"> @@ -2440,7 +2421,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r16.2">C.4.72 Section 16.2 Alignment</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.72.#q266"> + <tbody id="sC.4.72.#q21.266"> <!-- 0 tests --> </tbody> <tbody id="sC.4.73"> @@ -2449,7 +2430,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r16.3.1">C.4.73 Section 16.3.1 Underlining, over lining, striking, and blinking</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.73.#q267"> + <tbody id="sC.4.73.#q21.267"> <!-- 0 tests --> </tbody> <tbody id="sC.4.74"> @@ -2458,7 +2439,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r16.5">C.4.74 Section 16.5 Capitalization</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.74.#q268"> + <tbody id="sC.4.74.#q21.268"> <!-- 0 tests --> </tbody> <tbody id="sC.4.75"> @@ -2467,7 +2448,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r16.6">C.4.75 Section 16.6 White space</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.75.#q269"> + <tbody id="sC.4.75.#q21.269"> <!-- 0 tests --> </tbody> <tbody id="sC.4.76"> @@ -2476,7 +2457,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.1">C.4.76 Section 17.1 Introduction to tables</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.76.#q270"> + <tbody id="sC.4.76.#q21.270"> <!-- 0 tests --> </tbody> <tbody id="sC.4.77"> @@ -2485,7 +2466,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.2">C.4.77 Section 17.2 The CSS table model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.77.#q271"> + <tbody id="sC.4.77.#q21.271"> <!-- 0 tests --> </tbody> <tbody id="sC.4.78"> @@ -2494,7 +2475,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.2.1">C.4.78 Section 17.2.1 Anonymous table objects</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.78.#q272"> + <tbody id="sC.4.78.#q21.272"> <!-- 0 tests --> </tbody> <tbody id="sC.4.79"> @@ -2503,7 +2484,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.4">C.4.79 Section 17.4 Tables in the visual formatting model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.79.#q273"> + <tbody id="sC.4.79.#q21.273"> <!-- 0 tests --> </tbody> <tbody id="sC.4.80"> @@ -2512,7 +2493,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.5">C.4.80 Section 17.5 Visual layout of table contents</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.80.#q274"> + <tbody id="sC.4.80.#q21.274"> <!-- 0 tests --> </tbody> <tbody id="sC.4.81"> @@ -2521,7 +2502,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.5.1">C.4.81 Section 17.5.1 Table layers and transparency</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.81.#q275"> + <tbody id="sC.4.81.#q21.275"> <!-- 0 tests --> </tbody> <tbody id="sC.4.82"> @@ -2530,7 +2511,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.5.2">C.4.82 Section 17.5.2 Table width algorithms</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.82.#q276"> + <tbody id="sC.4.82.#q21.276"> <!-- 0 tests --> </tbody> <tbody id="sC.4.83"> @@ -2539,7 +2520,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.5.2.1">C.4.83 Section 17.5.2.1 Fixed table layout</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.83.#q277"> + <tbody id="sC.4.83.#q21.277"> <!-- 0 tests --> </tbody> <tbody id="sC.4.84"> @@ -2548,7 +2529,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.5.2.2">C.4.84 Section 17.5.2.2 Automatic table layout</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.84.#q278"> + <tbody id="sC.4.84.#q21.278"> <!-- 0 tests --> </tbody> <tbody id="sC.4.85"> @@ -2557,7 +2538,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.5.4">C.4.85 Section 17.5.4 Horizontal alignment in a column</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.85.#q279"> + <tbody id="sC.4.85.#q21.279"> <!-- 0 tests --> </tbody> <tbody id="sC.4.86"> @@ -2566,7 +2547,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.5.5">C.4.86 Section 17.5.5 Dynamic row and column effects</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.86.#q280"> + <tbody id="sC.4.86.#q21.280"> <!-- 0 tests --> </tbody> <tbody id="sC.4.87"> @@ -2575,7 +2556,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.6.1">C.4.87 Section 17.6.1 The separated borders model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.87.#q281"> + <tbody id="sC.4.87.#q21.281"> <!-- 0 tests --> </tbody> <tbody id="sC.4.88"> @@ -2584,7 +2565,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.6.2">C.4.88 Section 17.6.2 The collapsing borders model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.88.#q282"> + <tbody id="sC.4.88.#q21.282"> <!-- 0 tests --> </tbody> <tbody id="sC.4.89"> @@ -2593,7 +2574,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r18.2">C.4.89 Section 18.2 System Colors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.89.#q283"> + <tbody id="sC.4.89.#q21.283"> <!-- 0 tests --> </tbody> <tbody id="sC.4.90"> @@ -2602,7 +2583,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r18.4">C.4.90 Section 18.4 Dynamic outlines</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.90.#q284"> + <tbody id="sC.4.90.#q21.284"> <!-- 0 tests --> </tbody> <tbody id="sC.4.91"> @@ -2611,7 +2592,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r18.4.1">C.4.91 Section 18.4.1 Outlines and the focus</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.91.#q285"> + <tbody id="sC.4.91.#q21.285"> <!-- 0 tests --> </tbody> <tbody id="sC.4.92"> @@ -2620,7 +2601,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#rD">C.4.92 Appendix D Default style sheet for HTML 4</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.92.#q286"> + <tbody id="sC.4.92.#q21.286"> <!-- 0 tests --> </tbody> <tbody id="sC.5"> @@ -2635,7 +2616,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.1.4.2.1">C.5.1 Section 1.4.2.1 Value</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.1.#q288"> + <tbody id="sC.5.1.#q21.288"> <!-- 0 tests --> </tbody> <tbody id="sC.5.2"> @@ -2644,7 +2625,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.2.3">C.5.2 Section 2.3 The CSS 2.1 processing model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.2.#q289"> + <tbody id="sC.5.2.#q21.289"> <!-- 0 tests --> </tbody> <tbody id="sC.5.3"> @@ -2653,7 +2634,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.3.1">C.5.3 Section 3.1 Definitions</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.3.#q290"> + <tbody id="sC.5.3.#q21.290"> <!-- 0 tests --> </tbody> <tbody id="sC.5.4"> @@ -2662,7 +2643,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.1.1">C.5.4 Section 4.1.1 Tokenization</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.4.#q291"> + <tbody id="sC.5.4.#q21.291"> <!-- 0 tests --> </tbody> <tbody id="sC.5.5"> @@ -2671,7 +2652,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.1.2.2">C.5.5 Section 4.1.2.2 Informative Historical Notes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.5.#q292"> + <tbody id="sC.5.5.#q21.292"> <!-- 0 tests --> </tbody> <tbody id="sC.5.6"> @@ -2680,7 +2661,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.1.3">C.5.6 Section 4.1.3 Characters and case</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.6.#q293"> + <tbody id="sC.5.6.#q21.293"> <!-- 0 tests --> </tbody> <tbody id="sC.5.7"> @@ -2689,7 +2670,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.1.3a">C.5.7 Section 4.1.3 Characters and case</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.7.#q294"> + <tbody id="sC.5.7.#q21.294"> <!-- 0 tests --> </tbody> <tbody id="sC.5.8"> @@ -2698,7 +2679,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.1.3b">C.5.8 Section 4.1.3 Characters and case</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.8.#q295"> + <tbody id="sC.5.8.#q21.295"> <!-- 0 tests --> </tbody> <tbody id="sC.5.9"> @@ -2707,7 +2688,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.1.3c">C.5.9 Section 4.1.3 Characters and case</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.9.#q296"> + <tbody id="sC.5.9.#q21.296"> <!-- 0 tests --> </tbody> <tbody id="sC.5.10"> @@ -2716,7 +2697,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.1.5">C.5.10 Section 4.1.5 At-rules</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.10.#q297"> + <tbody id="sC.5.10.#q21.297"> <!-- 0 tests --> </tbody> <tbody id="sC.5.11"> @@ -2725,7 +2706,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.1.7">C.5.11 Section 4.1.7 Rule sets, declaration blocks, and selectors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.11.#q298"> + <tbody id="sC.5.11.#q21.298"> <!-- 0 tests --> </tbody> <tbody id="sC.5.12"> @@ -2734,7 +2715,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.2">C.5.12 Section 4.2 Rules for handling parsing errors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.12.#q299"> + <tbody id="sC.5.12.#q21.299"> <!-- 0 tests --> </tbody> <tbody id="sC.5.13"> @@ -2743,7 +2724,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.2a">C.5.13 Section 4.2 Rules for handling parsing errors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.13.#q300"> + <tbody id="sC.5.13.#q21.300"> <!-- 0 tests --> </tbody> <tbody id="sC.5.14"> @@ -2752,7 +2733,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.3.2">C.5.14 Section 4.3.2 Lengths</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.14.#q301"> + <tbody id="sC.5.14.#q21.301"> <!-- 0 tests --> </tbody> <tbody id="sC.5.15"> @@ -2761,7 +2742,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.3.5">C.5.15 Section 4.3.5 Counters</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.15.#q302"> + <tbody id="sC.5.15.#q21.302"> <!-- 0 tests --> </tbody> <tbody id="sC.5.16"> @@ -2770,7 +2751,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.5.8.1">C.5.16 Section 5.8.1 Matching attributes and attribute values</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.16.#q303"> + <tbody id="sC.5.16.#q21.303"> <!-- 0 tests --> </tbody> <tbody id="sC.5.17"> @@ -2779,7 +2760,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.5.8.2">C.5.17 Section 5.8.2 Default attribute values in DTDs</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.17.#q304"> + <tbody id="sC.5.17.#q21.304"> <!-- 0 tests --> </tbody> <tbody id="sC.5.18"> @@ -2788,7 +2769,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.5.11.4">C.5.18 Section 5.11.4 The language pseudo-class: :lang</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.18.#q305"> + <tbody id="sC.5.18.#q21.305"> <!-- 0 tests --> </tbody> <tbody id="sC.5.19"> @@ -2797,7 +2778,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.5.12.3">C.5.19 Section 5.12.3 The :before and :after pseudo-elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.19.#q306"> + <tbody id="sC.5.19.#q21.306"> <!-- 0 tests --> </tbody> <tbody id="sC.5.20"> @@ -2806,7 +2787,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.6.3">C.5.20 Section 6.3 The @import rule</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.20.#q307"> + <tbody id="sC.5.20.#q21.307"> <!-- 0 tests --> </tbody> <tbody id="sC.5.21"> @@ -2815,7 +2796,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.6.3a">C.5.21 Section 6.3 The @import rule</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.21.#q308"> + <tbody id="sC.5.21.#q21.308"> <!-- 0 tests --> </tbody> <tbody id="sC.5.22"> @@ -2824,7 +2805,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.6.4.1">C.5.22 Section 6.4.1 Cascading order</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.22.#q309"> + <tbody id="sC.5.22.#q21.309"> <!-- 0 tests --> </tbody> <tbody id="sC.5.23"> @@ -2833,7 +2814,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.6.4.1a">C.5.23 Section 6.4.1 Cascading order</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.23.#q310"> + <tbody id="sC.5.23.#q21.310"> <!-- 0 tests --> </tbody> <tbody id="sC.5.24"> @@ -2842,7 +2823,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.7.2.1">C.5.24 Section 7.2.1 The @media rule</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.24.#q311"> + <tbody id="sC.5.24.#q21.311"> <!-- 0 tests --> </tbody> <tbody id="sC.5.25"> @@ -2851,7 +2832,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.8.3.1">C.5.25 Section 8.3.1 Collapsing margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.25.#q312"> + <tbody id="sC.5.25.#q21.312"> <!-- 0 tests --> </tbody> <tbody id="sC.5.26"> @@ -2860,30 +2841,8 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.8.3.1a">C.5.26 Section 8.3.1 Collapsing margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.26.#q313"> - <!-- 2 tests --> - <tr id="margin-collapse-037-C.5.26.#q313" class=""> - <td> - <a href="margin-collapse-037.htm">margin-collapse-037</a></td> - <td><a href="reference/margin-collapse-037-ref.htm">=</a> </td> - <td></td> - <td>Collapsing margins - margin-bottom of the last in-flow child block collapsing with its parent min-height block's bottom margin - <ul class="assert"> - <li>The 'min-height' of a parent block element should have no influence over whether such parent block element's bottom margin is adjoining to its last child's bottom margin. In such situation, the bottom margin of the parent block element and the bottom margin of its last child should collapse as long as such parent block element has no bottom padding and has no bottom border.</li> - </ul> - </td> - </tr> - <tr id="margin-collapse-038-C.5.26.#q313" class=""> - <td> - <a href="margin-collapse-038.htm">margin-collapse-038</a></td> - <td><a href="reference/margin-collapse-038-ref.htm">=</a> </td> - <td></td> - <td>Collapsing margins - margin-bottom of the last in-flow child block collapsing with its max-height parent block's bottom margin - <ul class="assert"> - <li>The 'max-height' of a parent block element should have no influence over whether such parent block element's bottom margin is adjoining to its last child's bottom margin. In such situation, the bottom margin of the parent block element and the bottom margin of its last child should collapse as long as such parent block element has no bottom padding and has no bottom border.</li> - </ul> - </td> - </tr> + <tbody id="sC.5.26.#q21.313"> + <!-- 0 tests --> </tbody> <tbody id="sC.5.27"> <tr><th colspan="4" scope="rowgroup"> @@ -2891,7 +2850,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.8.3.1b">C.5.27 Section 8.3.1 Collapsing margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.27.#q314"> + <tbody id="sC.5.27.#q21.314"> <!-- 0 tests --> </tbody> <tbody id="sC.5.28"> @@ -2900,7 +2859,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.9.2.2">C.5.28 Section 9.2.2 Inline-level elements and inline boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.28.#q315"> + <tbody id="sC.5.28.#q21.315"> <!-- 0 tests --> </tbody> <tbody id="sC.5.29"> @@ -2909,7 +2868,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.9.2.4">C.5.29 Section 9.2.4 The 'display' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.29.#q316"> + <tbody id="sC.5.29.#q21.316"> <!-- 0 tests --> </tbody> <tbody id="sC.5.30"> @@ -2918,7 +2877,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.9.3.2">C.5.30 Section 9.3.2 Box offsets: 'top', 'right', 'bottom', 'left'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.30.#q317"> + <tbody id="sC.5.30.#q21.317"> <!-- 0 tests --> </tbody> <tbody id="sC.5.31"> @@ -2927,7 +2886,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.9.5">C.5.31 Section 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.31.#q318"> + <tbody id="sC.5.31.#q21.318"> <!-- 0 tests --> </tbody> <tbody id="sC.5.32"> @@ -2936,7 +2895,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.9.5a">C.5.32 Section 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.32.#q319"> + <tbody id="sC.5.32.#q21.319"> <!-- 0 tests --> </tbody> <tbody id="sC.5.33"> @@ -2945,7 +2904,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.9.5.2">C.5.33 Section 9.5.2 Controlling flow next to floats: the 'clear' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.33.#q320"> + <tbody id="sC.5.33.#q21.320"> <!-- 0 tests --> </tbody> <tbody id="sC.5.34"> @@ -2954,7 +2913,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.9.6.1">C.5.34 Section 9.6.1 Fixed positioning</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.34.#q321"> + <tbody id="sC.5.34.#q21.321"> <!-- 0 tests --> </tbody> <tbody id="sC.5.35"> @@ -2963,7 +2922,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.9.9.1">C.5.35 Section 9.9.1 Specifying the stack level: the 'z-index' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.35.#q322"> + <tbody id="sC.5.35.#q21.322"> <!-- 0 tests --> </tbody> <tbody id="sC.5.36"> @@ -2972,7 +2931,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.1">C.5.36 Section 10.1 Definition of "containing block"</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.36.#q323"> + <tbody id="sC.5.36.#q21.323"> <!-- 0 tests --> </tbody> <tbody id="sC.5.37"> @@ -2981,7 +2940,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.3">C.5.37 Section 10.3 Calculating widths and margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.37.#q324"> + <tbody id="sC.5.37.#q21.324"> <!-- 0 tests --> </tbody> <tbody id="sC.5.38"> @@ -2990,7 +2949,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.3.1">C.5.38 Section 10.3.1 Inline, non-replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.38.#q325"> + <tbody id="sC.5.38.#q21.325"> <!-- 0 tests --> </tbody> <tbody id="sC.5.39"> @@ -2999,7 +2958,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.3.2">C.5.39 Section 10.3.2 Inline, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.39.#q326"> + <tbody id="sC.5.39.#q21.326"> <!-- 0 tests --> </tbody> <tbody id="sC.5.40"> @@ -3008,7 +2967,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.3.2a">C.5.40 Section 10.3.2 Inline, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.40.#q327"> + <tbody id="sC.5.40.#q21.327"> <!-- 0 tests --> </tbody> <tbody id="sC.5.41"> @@ -3017,7 +2976,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.3.3">C.5.41 Section 10.3.3 Block-level, non-replaced elements in normal flow</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.41.#q328"> + <tbody id="sC.5.41.#q21.328"> <!-- 0 tests --> </tbody> <tbody id="sC.5.42"> @@ -3026,7 +2985,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.3.7">C.5.42 Section 10.3.7 Absolutely positioned, non-replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.42.#q329"> + <tbody id="sC.5.42.#q21.329"> <!-- 0 tests --> </tbody> <tbody id="sC.5.43"> @@ -3035,7 +2994,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.3.7a">C.5.43 Section 10.3.7 Absolutely positioned, non-replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.43.#q330"> + <tbody id="sC.5.43.#q21.330"> <!-- 0 tests --> </tbody> <tbody id="sC.5.44"> @@ -3044,7 +3003,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.3.8">C.5.44 Section 10.3.8 Absolutely positioned, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.44.#q331"> + <tbody id="sC.5.44.#q21.331"> <!-- 0 tests --> </tbody> <tbody id="sC.5.45"> @@ -3053,7 +3012,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.3.8a">C.5.45 Section 10.3.8 Absolutely positioned, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.45.#q332"> + <tbody id="sC.5.45.#q21.332"> <!-- 0 tests --> </tbody> <tbody id="sC.5.46"> @@ -3062,7 +3021,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.3.8c">C.5.46 Section 10.3.8 Absolutely positioned, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.46.#q333"> + <tbody id="sC.5.46.#q21.333"> <!-- 0 tests --> </tbody> <tbody id="sC.5.47"> @@ -3071,7 +3030,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.5">C.5.47 Section 10.5 Content height: the 'height' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.47.#q334"> + <tbody id="sC.5.47.#q21.334"> <!-- 0 tests --> </tbody> <tbody id="sC.5.48"> @@ -3080,7 +3039,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.6.2">C.5.48 Section 10.6.2 Inline replaced elements […]</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.48.#q335"> + <tbody id="sC.5.48.#q21.335"> <!-- 0 tests --> </tbody> <tbody id="sC.5.49"> @@ -3089,7 +3048,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.6.4">C.5.49 Section 10.6.4 Absolutely positioned, non-replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.49.#q336"> + <tbody id="sC.5.49.#q21.336"> <!-- 0 tests --> </tbody> <tbody id="sC.5.50"> @@ -3098,7 +3057,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.6.5">C.5.50 Section 10.6.5 Absolutely positioned, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.50.#q337"> + <tbody id="sC.5.50.#q21.337"> <!-- 0 tests --> </tbody> <tbody id="sC.5.51"> @@ -3107,7 +3066,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.8.1">C.5.51 Section 10.8.1 Leading and half-leading</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.51.#q338"> + <tbody id="sC.5.51.#q21.338"> <!-- 0 tests --> </tbody> <tbody id="sC.5.52"> @@ -3116,7 +3075,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.11.1.1">C.5.52 Section 11.1.1 Overflow: the 'overflow' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.52.#q339"> + <tbody id="sC.5.52.#q21.339"> <!-- 0 tests --> </tbody> <tbody id="sC.5.53"> @@ -3125,7 +3084,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.11.1.2">C.5.53 Section 11.1.2 Clipping: the 'clip' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.53.#q340"> + <tbody id="sC.5.53.#q21.340"> <!-- 0 tests --> </tbody> <tbody id="sC.5.54"> @@ -3134,7 +3093,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.12.2">C.5.54 Section 12.2 The 'content' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.54.#q341"> + <tbody id="sC.5.54.#q21.341"> <!-- 0 tests --> </tbody> <tbody id="sC.5.55"> @@ -3143,7 +3102,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.12.4.2">C.5.55 Section 12.4.2 Counter styles</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.55.#q342"> + <tbody id="sC.5.55.#q21.342"> <!-- 0 tests --> </tbody> <tbody id="sC.5.56"> @@ -3152,7 +3111,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.12.5">C.5.56 Section 12.5 Lists</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.56.#q343"> + <tbody id="sC.5.56.#q21.343"> <!-- 0 tests --> </tbody> <tbody id="sC.5.57"> @@ -3161,7 +3120,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.12.5.1">C.5.57 Section 12.5.1 Lists: the 'list-style-type', 'list-style-image', 'list-style-position', and 'list-style' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.57.#q344"> + <tbody id="sC.5.57.#q21.344"> <!-- 0 tests --> </tbody> <tbody id="sC.5.58"> @@ -3170,7 +3129,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.12.5.1a">C.5.58 Section 12.5.1 Lists: the 'list-style-type', 'list-style-image', 'list-style-position', and 'list-style' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.58.#q345"> + <tbody id="sC.5.58.#q21.345"> <!-- 0 tests --> </tbody> <tbody id="sC.5.59"> @@ -3179,7 +3138,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.12.5.1b">C.5.59 Section 12.5.1 Lists: the 'list-style-type', 'list-style-image', 'list-style-position', and 'list-style' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.59.#q346"> + <tbody id="sC.5.59.#q21.346"> <!-- 0 tests --> </tbody> <tbody id="sC.5.60"> @@ -3188,7 +3147,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.2">C.5.60 Section 13.2 Page boxes: the @page rule</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.60.#q347"> + <tbody id="sC.5.60.#q21.347"> <!-- 0 tests --> </tbody> <tbody id="sC.5.61"> @@ -3197,7 +3156,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.2.1.1">C.5.61 Section 13.2.1.1 Rendering page boxes that do not fit a target sheet</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.61.#q348"> + <tbody id="sC.5.61.#q21.348"> <!-- 0 tests --> </tbody> <tbody id="sC.5.62"> @@ -3206,7 +3165,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.2.3">C.5.62 Section 13.2.3 Content outside the page box</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.62.#q349"> + <tbody id="sC.5.62.#q21.349"> <!-- 0 tests --> </tbody> <tbody id="sC.5.63"> @@ -3215,7 +3174,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.3.1">C.5.63 Section 13.3.1 Page break properties: 'page-break-before', 'page-break-after', 'page-break-inside'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.63.#q350"> + <tbody id="sC.5.63.#q21.350"> <!-- 0 tests --> </tbody> <tbody id="sC.5.64"> @@ -3224,7 +3183,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.3.1a">C.5.64 Section 13.3.1 Page break properties: 'page-break-before', 'page-break-after', 'page-break-inside'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.64.#q351"> + <tbody id="sC.5.64.#q21.351"> <!-- 0 tests --> </tbody> <tbody id="sC.5.65"> @@ -3233,7 +3192,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.3.2">C.5.65 Section 13.3.2 Breaks inside elements: 'orphans', 'widows'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.65.#q352"> + <tbody id="sC.5.65.#q21.352"> <!-- 0 tests --> </tbody> <tbody id="sC.5.66"> @@ -3242,7 +3201,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.3.2a">C.5.66 Section 13.3.2 Breaks inside elements: 'orphans', 'widows'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.66.#q353"> + <tbody id="sC.5.66.#q21.353"> <!-- 0 tests --> </tbody> <tbody id="sC.5.67"> @@ -3251,7 +3210,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.3.3">C.5.67 Section 13.3.3 Allowed page breaks</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.67.#q354"> + <tbody id="sC.5.67.#q21.354"> <!-- 0 tests --> </tbody> <tbody id="sC.5.68"> @@ -3260,7 +3219,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.3.3a">C.5.68 Section 13.3.3 Allowed page breaks</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.68.#q355"> + <tbody id="sC.5.68.#q21.355"> <!-- 0 tests --> </tbody> <tbody id="sC.5.69"> @@ -3269,7 +3228,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.3.3b">C.5.69 Section 13.3.3 Allowed page breaks</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.69.#q356"> + <tbody id="sC.5.69.#q21.356"> <!-- 0 tests --> </tbody> <tbody id="sC.5.70"> @@ -3278,7 +3237,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.3.5">C.5.70 Section 13.3.5 "Best" page breaks</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.70.#q357"> + <tbody id="sC.5.70.#q21.357"> <!-- 0 tests --> </tbody> <tbody id="sC.5.71"> @@ -3287,7 +3246,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.14.2">C.5.71 Section 14.2 The background</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.71.#q358"> + <tbody id="sC.5.71.#q21.358"> <!-- 0 tests --> </tbody> <tbody id="sC.5.72"> @@ -3296,7 +3255,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.14.2a">C.5.72 Section 14.2 The background</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.72.#q359"> + <tbody id="sC.5.72.#q21.359"> <!-- 0 tests --> </tbody> <tbody id="sC.5.73"> @@ -3305,7 +3264,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.14.2.1a">C.5.73 Section 14.2.1 Background properties: 'background-color', 'background-image', 'background-repeat', 'background-attachment', 'background-position', and 'background'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.73.#q360"> + <tbody id="sC.5.73.#q21.360"> <!-- 0 tests --> </tbody> <tbody id="sC.5.74"> @@ -3314,7 +3273,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.15.6">C.5.74 Section 15.6 Font boldness: the 'font-weight' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.74.#q361"> + <tbody id="sC.5.74.#q21.361"> <!-- 0 tests --> </tbody> <tbody id="sC.5.75"> @@ -3323,7 +3282,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.16.6">C.5.75 Section 16.6 Whitespace: the 'white-space' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.75.#q362"> + <tbody id="sC.5.75.#q21.362"> <!-- 0 tests --> </tbody> <tbody id="sC.5.76"> @@ -3332,19 +3291,8 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.16.6.1">C.5.76 Section 16.6.1 The 'white-space' processing model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.76.#q363"> - <!-- 1 tests --> - <tr id="white-space-007-C.5.76.#q363" class="ahem"> - <td> - <a href="white-space-007.htm">white-space-007</a></td> - <td></td> - <td><abbr class="ahem" title="Requires Ahem font">Ahem</abbr></td> - <td>white-space - <ul class="assert"> - <li>'white-space: normal' and 'white-space: nowrap' should collapse sequences of white space. Regarding wrapping, line breaking opportunities are determined on the text prior to white space collapsing steps.</li> - </ul> - </td> - </tr> + <tbody id="sC.5.76.#q21.363"> + <!-- 0 tests --> </tbody> <tbody id="sC.5.77"> <tr><th colspan="4" scope="rowgroup"> @@ -3352,7 +3300,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.17.2.1">C.5.77 Section 17.2.1 Anonymous table objects</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.77.#q364"> + <tbody id="sC.5.77.#q21.364"> <!-- 0 tests --> </tbody> <tbody id="sC.5.78"> @@ -3361,7 +3309,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.17.2.1a">C.5.78 Section 17.2.1 Anonymous table objects</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.78.#q365"> + <tbody id="sC.5.78.#q21.365"> <!-- 0 tests --> </tbody> <tbody id="sC.5.79"> @@ -3370,7 +3318,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.17.4">C.5.79 Section 17.4 Tables in the visual formatting model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.79.#q366"> + <tbody id="sC.5.79.#q21.366"> <!-- 0 tests --> </tbody> <tbody id="sC.5.80"> @@ -3379,7 +3327,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.17.5.4a">C.5.80 Section 17.5.4 Horizontal alignment in a column</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.80.#q367"> + <tbody id="sC.5.80.#q21.367"> <!-- 0 tests --> </tbody> <tbody id="sC.5.81"> @@ -3388,7 +3336,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.18.1">C.5.81 Section 18.1 Cursors: the 'cursor' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.81.#q368"> + <tbody id="sC.5.81.#q21.368"> <!-- 0 tests --> </tbody> <tbody id="sC.5.82"> @@ -3397,7 +3345,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.B.2">C.5.82 Section B.2 Informative references</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.82.#q369"> + <tbody id="sC.5.82.#q21.369"> <!-- 0 tests --> </tbody> <tbody id="sC.5.83"> @@ -3406,7 +3354,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.D">C.5.83 Appendix D. Default style sheet for HTML 4</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.83.#q370"> + <tbody id="sC.5.83.#q21.370"> <!-- 0 tests --> </tbody> <tbody id="sC.5.84"> @@ -3415,7 +3363,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.Da">C.5.84 Appendix D. Default style sheet for HTML 4</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.84.#q371"> + <tbody id="sC.5.84.#q21.371"> <!-- 0 tests --> </tbody> <tbody id="sC.5.85"> @@ -3424,7 +3372,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.E.2">C.5.85 Section E.2 Painting order</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.85.#q372"> + <tbody id="sC.5.85.#q21.372"> <!-- 0 tests --> </tbody> <tbody id="sC.5.86"> @@ -3433,7 +3381,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.G">C.5.86 Appendix G. Grammar of CSS 2.1</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.86.#q373"> + <tbody id="sC.5.86.#q21.373"> <!-- 0 tests --> </tbody> <tbody id="sC.5.87"> @@ -3442,7 +3390,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.G.1">C.5.87 Section G.1 Grammar</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.87.#q374"> + <tbody id="sC.5.87.#q21.374"> <!-- 0 tests --> </tbody> <tbody id="sC.5.88"> @@ -3451,7 +3399,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.G.2">C.5.88 Section G.2 Lexical scanner</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.88.#q375"> + <tbody id="sC.5.88.#q21.375"> <!-- 0 tests --> </tbody> <tbody id="sC.5.89"> @@ -3460,7 +3408,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.G.2a">C.5.89 Section G.2 Lexical scanner</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.89.#q376"> + <tbody id="sC.5.89.#q21.376"> <!-- 0 tests --> </tbody> <tbody id="sC.5.90"> @@ -3469,7 +3417,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.G.2b">C.5.90 Section G.2 Lexical scanner</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.90.#q377"> + <tbody id="sC.5.90.#q21.377"> <!-- 0 tests --> </tbody> <tbody id="sC.5.91"> @@ -3478,7 +3426,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.G.2c">C.5.91 Section G.2 Lexical scanner</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.91.#q378"> + <tbody id="sC.5.91.#q21.378"> <!-- 0 tests --> </tbody> <tbody id="sC.5.92"> @@ -3487,7 +3435,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.I">C.5.92 Appendix I. Index</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.92.#q379"> + <tbody id="sC.5.92.#q21.379"> <!-- 0 tests --> </tbody> <tbody id="sC.6"> @@ -3502,7 +3450,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.2b">C.6.1 Section 4.2 Rules for handling parsing errors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.6.1.#q381"> + <tbody id="sC.6.1.#q21.381"> <!-- 0 tests --> </tbody> <tbody id="sC.6.2"> @@ -3511,7 +3459,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.3.3c">C.6.2 Section 13.3.3 Allowed page breaks</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.6.2.#q382"> + <tbody id="sC.6.2.#q21.382"> <!-- 0 tests --> </tbody> <tbody id="sC.6.3"> @@ -3520,7 +3468,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.15.3">C.6.3 Section 15.3 Font family: the 'font-family' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.6.3.#q383"> + <tbody id="sC.6.3.#q21.383"> <!-- 0 tests --> </tbody> <tbody id="sC.6.4"> @@ -3529,7 +3477,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.15.3.1.1">C.6.4 Section 15.3.1.1 serif</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.6.4.#q384"> + <tbody id="sC.6.4.#q21.384"> <!-- 0 tests --> </tbody> <tbody id="sC.6.5"> @@ -3538,7 +3486,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.15.7">C.6.5 Section 15.7 Font size: the 'font-size' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.6.5.#q385"> + <tbody id="sC.6.5.#q21.385"> <!-- 0 tests --> </tbody> <tbody id="sC.6.6"> @@ -3547,7 +3495,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.17.5.2.1">C.6.6 Section 17.5.2.1 Fixed table layout</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.6.6.#q386"> + <tbody id="sC.6.6.#q21.386"> <!-- 0 tests --> </tbody> <tbody id="sC.6.7"> @@ -3556,7 +3504,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.17.5.3">C.6.7 Section 17.5.3 Table height layout</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.6.7.#q387"> + <tbody id="sC.6.7.#q21.387"> <!-- 0 tests --> </tbody> <tbody id="sC.6.8"> @@ -3565,7 +3513,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.Ga">C.6.8 Appendix G. Grammar of CSS 2.1</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.6.8.#q388"> + <tbody id="sC.6.8.#q21.388"> <!-- 0 tests --> </tbody> <tbody id="sC.7"> @@ -3580,7 +3528,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.1">C.7.1 Section 1.4.2.1 Value</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.1.#q390"> + <tbody id="sC.7.1.#q21.390"> <!-- 0 tests --> </tbody> <tbody id="sC.7.2"> @@ -3589,7 +3537,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.3.1">C.7.2 Section 3.1 Definitions</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.2.#q391"> + <tbody id="sC.7.2.#q21.391"> <!-- 0 tests --> </tbody> <tbody id="sC.7.3"> @@ -3598,7 +3546,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.1.1">C.7.3 Section 4.1.1 Tokenization</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.3.#q392"> + <tbody id="sC.7.3.#q21.392"> <!-- 0 tests --> </tbody> <tbody id="sC.7.4"> @@ -3607,7 +3555,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.1.1a">C.7.4 Section 4.1.1 Tokenization</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.4.#q393"> + <tbody id="sC.7.4.#q21.393"> <!-- 0 tests --> </tbody> <tbody id="sC.7.5"> @@ -3616,7 +3564,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.1.1b">C.7.5 Section 4.1.1 Tokenization</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.5.#q394"> + <tbody id="sC.7.5.#q21.394"> <!-- 0 tests --> </tbody> <tbody id="sC.7.6"> @@ -3625,7 +3573,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.1.1c">C.7.6 Section 4.1.1 Tokenization</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.6.#q395"> + <tbody id="sC.7.6.#q21.395"> <!-- 0 tests --> </tbody> <tbody id="sC.7.7"> @@ -3634,7 +3582,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.1.2.2">C.7.7 Section 4.1.2.2 Informative Historical Notes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.7.#q396"> + <tbody id="sC.7.7.#q21.396"> <!-- 0 tests --> </tbody> <tbody id="sC.7.8"> @@ -3643,7 +3591,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.1.3">C.7.8 Section 4.1.3 Characters and case</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.8.#q397"> + <tbody id="sC.7.8.#q21.397"> <!-- 0 tests --> </tbody> <tbody id="sC.7.9"> @@ -3652,7 +3600,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.1.3a">C.7.9 Section 4.1.3 Characters and case</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.9.#q398"> + <tbody id="sC.7.9.#q21.398"> <!-- 0 tests --> </tbody> <tbody id="sC.7.10"> @@ -3661,7 +3609,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.1.8">C.7.10 Section 4.1.8 Declarations and properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.10.#q399"> + <tbody id="sC.7.10.#q21.399"> <!-- 0 tests --> </tbody> <tbody id="sC.7.11"> @@ -3670,7 +3618,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.2">C.7.11 Section 4.2 Rules for handling parsing errors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.11.#q400"> + <tbody id="sC.7.11.#q21.400"> <!-- 0 tests --> </tbody> <tbody id="sC.7.12"> @@ -3679,7 +3627,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.3.2">C.7.12 Section 4.3.2 Lengths</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.12.#q401"> + <tbody id="sC.7.12.#q21.401"> <!-- 0 tests --> </tbody> <tbody id="sC.7.13"> @@ -3688,7 +3636,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.3.2a">C.7.13 Section 4.3.2 Lengths</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.13.#q402"> + <tbody id="sC.7.13.#q21.402"> <!-- 0 tests --> </tbody> <tbody id="sC.7.14"> @@ -3697,7 +3645,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.3.4a">C.7.14 Section 4.3.4 URLs and URIs</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.14.#q403"> + <tbody id="sC.7.14.#q21.403"> <!-- 0 tests --> </tbody> <tbody id="sC.7.15"> @@ -3706,7 +3654,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.3.4">C.7.15 Section 4.3.4 URLs and URIs</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.15.#q404"> + <tbody id="sC.7.15.#q21.404"> <!-- 0 tests --> </tbody> <tbody id="sC.7.16"> @@ -3715,7 +3663,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.5.8.2">C.7.16 Section 5.8.2 Default attribute values in DTDs</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.16.#q405"> + <tbody id="sC.7.16.#q21.405"> <!-- 0 tests --> </tbody> <tbody id="sC.7.17"> @@ -3724,7 +3672,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.5.11.4">C.7.17 Section 5.11.4 The language pseudo-class: :lang</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.17.#q406"> + <tbody id="sC.7.17.#q21.406"> <!-- 0 tests --> </tbody> <tbody id="sC.7.18"> @@ -3733,7 +3681,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.5.12">C.7.18 Section 5.12 Pseudo-elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.18.#q407"> + <tbody id="sC.7.18.#q21.407"> <!-- 0 tests --> </tbody> <tbody id="sC.7.19"> @@ -3742,7 +3690,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.5.12.1">C.7.19 Section 5.12.1 The :first-line pseudo-element</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.19.#q408"> + <tbody id="sC.7.19.#q21.408"> <!-- 0 tests --> </tbody> <tbody id="sC.7.20"> @@ -3751,7 +3699,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.5.12.2">C.7.20 Section 5.12.2 The :first-letter pseudo-element</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.20.#q409"> + <tbody id="sC.7.20.#q21.409"> <!-- 0 tests --> </tbody> <tbody id="sC.7.21"> @@ -3760,7 +3708,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.6.2">C.7.21 Section 6.2 Inheritance</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.21.#q410"> + <tbody id="sC.7.21.#q21.410"> <!-- 0 tests --> </tbody> <tbody id="sC.7.22"> @@ -3769,7 +3717,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.6.4.4">C.7.22 Section 6.4.4 Precedence of non-CSS presentational hints</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.22.#q411"> + <tbody id="sC.7.22.#q21.411"> <!-- 0 tests --> </tbody> <tbody id="sC.7.23"> @@ -3778,7 +3726,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.7.3">C.7.23 Section 7.3 Recognized media types</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.23.#q412"> + <tbody id="sC.7.23.#q21.412"> <!-- 0 tests --> </tbody> <tbody id="sC.7.24"> @@ -3787,7 +3735,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.8.3.1">C.7.24 Section 8.3.1 Collapsing margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.24.#q413"> + <tbody id="sC.7.24.#q21.413"> <!-- 0 tests --> </tbody> <tbody id="sC.7.25"> @@ -3796,7 +3744,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.8.3.1a">C.7.25 Section 8.3.1 Collapsing margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.25.#q414"> + <tbody id="sC.7.25.#q21.414"> <!-- 0 tests --> </tbody> <tbody id="sC.7.26"> @@ -3805,7 +3753,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.2.1">C.7.26 Section 9.2.1 Block-level elements and block boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.26.#q415"> + <tbody id="sC.7.26.#q21.415"> <!-- 0 tests --> </tbody> <tbody id="sC.7.27"> @@ -3814,7 +3762,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.2.1.1">C.7.27 Section 9.2.1.1 Anonymous block boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.27.#q416"> + <tbody id="sC.7.27.#q21.416"> <!-- 0 tests --> </tbody> <tbody id="sC.7.28"> @@ -3823,7 +3771,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.2.1.1a">C.7.28 Section 9.2.1.1 Anonymous block boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.28.#q417"> + <tbody id="sC.7.28.#q21.417"> <!-- 0 tests --> </tbody> <tbody id="sC.7.29"> @@ -3832,7 +3780,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.2.1.1b">C.7.29 Section 9.2.1.1 Anonymous block boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.29.#q418"> + <tbody id="sC.7.29.#q21.418"> <!-- 0 tests --> </tbody> <tbody id="sC.7.30"> @@ -3841,7 +3789,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.2.1.1c">C.7.30 Section 9.2.1.1 Anonymous block boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.30.#q419"> + <tbody id="sC.7.30.#q21.419"> <!-- 0 tests --> </tbody> <tbody id="sC.7.31"> @@ -3850,7 +3798,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.2.2">C.7.31 Section 9.2.2 Inline-level elements and inline boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.31.#q420"> + <tbody id="sC.7.31.#q21.420"> <!-- 0 tests --> </tbody> <tbody id="sC.7.32"> @@ -3859,7 +3807,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.2.3a">C.7.32 Section 9.2.3 Run-in boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.32.#q421"> + <tbody id="sC.7.32.#q21.421"> <!-- 0 tests --> </tbody> <tbody id="sC.7.33"> @@ -3868,7 +3816,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.2.4">C.7.33 Section 9.2.4 The 'display' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.33.#q422"> + <tbody id="sC.7.33.#q21.422"> <!-- 0 tests --> </tbody> <tbody id="sC.7.34"> @@ -3877,7 +3825,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.2.4a">C.7.34 Section 9.2.4 The 'display' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.34.#q423"> + <tbody id="sC.7.34.#q21.423"> <!-- 0 tests --> </tbody> <tbody id="sC.7.35"> @@ -3886,7 +3834,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.3">C.7.35 Section 9.3 Positioning schemes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.35.#q424"> + <tbody id="sC.7.35.#q21.424"> <!-- 0 tests --> </tbody> <tbody id="sC.7.36"> @@ -3895,7 +3843,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.4">C.7.36 Section 9.4 Normal flow</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.36.#q425"> + <tbody id="sC.7.36.#q21.425"> <!-- 0 tests --> </tbody> <tbody id="sC.7.37"> @@ -3904,7 +3852,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.3.2">C.7.37 Section 9.3.2 Box offsets: 'top', 'right', 'bottom', 'left'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.37.#q426"> + <tbody id="sC.7.37.#q21.426"> <!-- 0 tests --> </tbody> <tbody id="sC.7.38"> @@ -3913,7 +3861,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.5">C.7.38 Section 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.38.#q427"> + <tbody id="sC.7.38.#q21.427"> <!-- 0 tests --> </tbody> <tbody id="sC.7.39"> @@ -3922,7 +3870,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.5a">C.7.39 Section 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.39.#q428"> + <tbody id="sC.7.39.#q21.428"> <!-- 0 tests --> </tbody> <tbody id="sC.7.40"> @@ -3931,7 +3879,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.5.2">C.7.40 Section 9.5.2 Controlling flow next to floats: the 'clear' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.40.#q429"> + <tbody id="sC.7.40.#q21.429"> <!-- 0 tests --> </tbody> <tbody id="sC.7.41"> @@ -3940,7 +3888,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.5.2a">C.7.41 Section 9.5.2 Controlling flow next to floats: the 'clear' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.41.#q430"> + <tbody id="sC.7.41.#q21.430"> <!-- 0 tests --> </tbody> <tbody id="sC.7.42"> @@ -3949,7 +3897,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.5.2b">C.7.42 Section 9.5.2 Controlling flow next to floats: the 'clear' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.42.#q431"> + <tbody id="sC.7.42.#q21.431"> <!-- 0 tests --> </tbody> <tbody id="sC.7.43"> @@ -3958,7 +3906,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.5.2c">C.7.43 Section 9.5.2 Controlling flow next to floats: the 'clear' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.43.#q432"> + <tbody id="sC.7.43.#q21.432"> <!-- 0 tests --> </tbody> <tbody id="sC.7.44"> @@ -3967,7 +3915,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.14.2.1">C.7.44 Section 14.2.1 Background properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.44.#q433"> + <tbody id="sC.7.44.#q21.433"> <!-- 0 tests --> </tbody> <tbody id="sC.7.45"> @@ -3976,7 +3924,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.9.1">C.7.45 Section 9.9.1 Specifying the stack level: the 'z-index' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.45.#q434"> + <tbody id="sC.7.45.#q21.434"> <!-- 0 tests --> </tbody> <tbody id="sC.7.46"> @@ -3985,7 +3933,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.10">C.7.46 Section 9.10 Text direction: the 'direction' and 'unicode-bidi' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.46.#q435"> + <tbody id="sC.7.46.#q21.435"> <!-- 0 tests --> </tbody> <tbody id="sC.7.47"> @@ -3994,7 +3942,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.10a">C.7.47 Section 9.10 Text direction: the 'direction' and 'unicode-bidi' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.47.#q436"> + <tbody id="sC.7.47.#q21.436"> <!-- 0 tests --> </tbody> <tbody id="sC.7.48"> @@ -4003,7 +3951,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.10b">C.7.48 Section 9.10 Text direction: the 'direction' and 'unicode-bidi' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.48.#q437"> + <tbody id="sC.7.48.#q21.437"> <!-- 0 tests --> </tbody> <tbody id="sC.7.49"> @@ -4012,7 +3960,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.1">C.7.49 Section 10.1 Definition of "containing block"</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.49.#q438"> + <tbody id="sC.7.49.#q21.438"> <!-- 0 tests --> </tbody> <tbody id="sC.7.50"> @@ -4021,7 +3969,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.2">C.7.50 Section 10.2 Content width: the 'width' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.50.#q439"> + <tbody id="sC.7.50.#q21.439"> <!-- 0 tests --> </tbody> <tbody id="sC.7.51"> @@ -4030,7 +3978,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.2a">C.7.51 Section 10.2 Content width: the 'width' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.51.#q440"> + <tbody id="sC.7.51.#q21.440"> <!-- 0 tests --> </tbody> <tbody id="sC.7.52"> @@ -4039,7 +3987,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.2b">C.7.52 Section 10.2 Content width: the 'width' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.52.#q441"> + <tbody id="sC.7.52.#q21.441"> <!-- 0 tests --> </tbody> <tbody id="sC.7.53"> @@ -4048,7 +3996,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.5">C.7.53 Section 10.5 Content height: the 'height' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.53.#q442"> + <tbody id="sC.7.53.#q21.442"> <!-- 0 tests --> </tbody> <tbody id="sC.7.54"> @@ -4057,7 +4005,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.5a">C.7.54 Section 10.5 Content height: the 'height' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.54.#q443"> + <tbody id="sC.7.54.#q21.443"> <!-- 0 tests --> </tbody> <tbody id="sC.7.55"> @@ -4066,7 +4014,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.6.7">C.7.55 Section 10.6.7 'Auto' heights for block formatting context roots</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.55.#q444"> + <tbody id="sC.7.55.#q21.444"> <!-- 0 tests --> </tbody> <tbody id="sC.7.56"> @@ -4075,7 +4023,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.7">C.7.56 Section 10.7 Minimum and maximum heights: 'min-height' and 'max-height'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.56.#q445"> + <tbody id="sC.7.56.#q21.445"> <!-- 0 tests --> </tbody> <tbody id="sC.7.57"> @@ -4084,7 +4032,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.8">C.7.57 Section 10.8 Line height calculations: the 'line-height' and 'vertical-align' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.57.#q446"> + <tbody id="sC.7.57.#q21.446"> <!-- 0 tests --> </tbody> <tbody id="sC.7.58"> @@ -4093,7 +4041,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.8a">C.7.58 Section 10.8 Line height calculations: the 'line-height' and 'vertical-align' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.58.#q447"> + <tbody id="sC.7.58.#q21.447"> <!-- 0 tests --> </tbody> <tbody id="sC.7.59"> @@ -4102,7 +4050,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.8.1">C.7.59 Section 10.8.1 Leading and half-leading</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.59.#q448"> + <tbody id="sC.7.59.#q21.448"> <!-- 0 tests --> </tbody> <tbody id="sC.7.60"> @@ -4111,7 +4059,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.8.1a">C.7.60 Section 10.8.1 Leading and half-leading</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.60.#q449"> + <tbody id="sC.7.60.#q21.449"> <!-- 0 tests --> </tbody> <tbody id="sC.7.61"> @@ -4120,7 +4068,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.8.1b">C.7.61 Section 10.8.1 Leading and half-leading</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.61.#q450"> + <tbody id="sC.7.61.#q21.450"> <!-- 0 tests --> </tbody> <tbody id="sC.7.62"> @@ -4129,7 +4077,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.11.1">C.7.62 Section 11.1 Overflow and clipping</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.62.#q451"> + <tbody id="sC.7.62.#q21.451"> <!-- 0 tests --> </tbody> <tbody id="sC.7.63"> @@ -4138,7 +4086,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.11.1.1">C.7.63 Section 11.1.1 Overflow: the 'overflow' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.63.#q452"> + <tbody id="sC.7.63.#q21.452"> <!-- 0 tests --> </tbody> <tbody id="sC.7.64"> @@ -4147,7 +4095,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.11.1.1a">C.7.64 Section 11.1.1 Overflow: the 'overflow' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.64.#q453"> + <tbody id="sC.7.64.#q21.453"> <!-- 0 tests --> </tbody> <tbody id="sC.7.65"> @@ -4156,7 +4104,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.11.1.1b">C.7.65 Section 11.1.1 Overflow: the 'overflow' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.65.#q454"> + <tbody id="sC.7.65.#q21.454"> <!-- 0 tests --> </tbody> <tbody id="sC.7.66"> @@ -4165,7 +4113,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.11.1.2">C.7.66 Section 11.1.2 Clipping: the 'clip' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.66.#q455"> + <tbody id="sC.7.66.#q21.455"> <!-- 0 tests --> </tbody> <tbody id="sC.7.67"> @@ -4174,7 +4122,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.12.5">C.7.67 Section 12.5 Lists</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.67.#q456"> + <tbody id="sC.7.67.#q21.456"> <!-- 0 tests --> </tbody> <tbody id="sC.7.68"> @@ -4183,7 +4131,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.12.5.1">C.7.68 Section 12.5.1 Lists: the 'list-style-type', 'list-style-image', 'list-style-position', and 'list-style' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.68.#q457"> + <tbody id="sC.7.68.#q21.457"> <!-- 0 tests --> </tbody> <tbody id="sC.7.69"> @@ -4192,7 +4140,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.12.5.1a">C.7.69 Section 12.5.1 Lists: the 'list-style-type', 'list-style-image', 'list-style-position', and 'list-style' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.69.#q458"> + <tbody id="sC.7.69.#q21.458"> <!-- 0 tests --> </tbody> <tbody id="sC.7.70"> @@ -4201,7 +4149,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.12.5.1b">C.7.70 Section 12.5.1 Lists: the 'list-style-type', 'list-style-image', 'list-style-position', and 'list-style' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.70.#q459"> + <tbody id="sC.7.70.#q21.459"> <!-- 0 tests --> </tbody> <tbody id="sC.7.71"> @@ -4210,7 +4158,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.12.5.1c">C.7.71 Section 12.5.1 Lists: the 'list-style-type', 'list-style-image', 'list-style-position', and 'list-style' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.71.#q460"> + <tbody id="sC.7.71.#q21.460"> <!-- 0 tests --> </tbody> <tbody id="sC.7.72"> @@ -4219,7 +4167,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.12.5.1d">C.7.72 Section 12.5.1 Lists: the 'list-style-type', 'list-style-image', 'list-style-position', and 'list-style' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.72.#q461"> + <tbody id="sC.7.72.#q21.461"> <!-- 0 tests --> </tbody> <tbody id="sC.7.73"> @@ -4228,7 +4176,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.13.2">C.7.73 Section 13.2 Page boxes: the @page rule</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.73.#q462"> + <tbody id="sC.7.73.#q21.462"> <!-- 0 tests --> </tbody> <tbody id="sC.7.74"> @@ -4237,7 +4185,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.13.2.2">C.7.74 Section 13.2.2 Page selectors: selecting left, right, and first pages</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.74.#q463"> + <tbody id="sC.7.74.#q21.463"> <!-- 0 tests --> </tbody> <tbody id="sC.7.75"> @@ -4246,7 +4194,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.13.3.2">C.7.75 Section 13.3.2 Breaks inside elements: 'orphans', 'widows'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.75.#q464"> + <tbody id="sC.7.75.#q21.464"> <!-- 0 tests --> </tbody> <tbody id="sC.7.76"> @@ -4255,7 +4203,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.13.3.3">C.7.76 Section 13.3.3 Allowed page breaks</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.76.#q465"> + <tbody id="sC.7.76.#q21.465"> <!-- 0 tests --> </tbody> <tbody id="sC.7.77"> @@ -4264,7 +4212,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.15.3">C.7.77 Section 15.3 Font family: the 'font-family' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.77.#q466"> + <tbody id="sC.7.77.#q21.466"> <!-- 0 tests --> </tbody> <tbody id="sC.7.78"> @@ -4273,7 +4221,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.15.3.1">C.7.78 Section 15.3.1 Generic font families</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.78.#q467"> + <tbody id="sC.7.78.#q21.467"> <!-- 0 tests --> </tbody> <tbody id="sC.7.79"> @@ -4282,7 +4230,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.15.6">C.7.79 Section 15.6 Font boldness: the 'font-weight' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.79.#q468"> + <tbody id="sC.7.79.#q21.468"> <!-- 0 tests --> </tbody> <tbody id="sC.7.80"> @@ -4291,7 +4239,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.15.6q">C.7.80 Section 15.6 Font boldness: the 'font-weight' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.80.#q469"> + <tbody id="sC.7.80.#q21.469"> <!-- 0 tests --> </tbody> <tbody id="sC.7.81"> @@ -4300,7 +4248,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.15.7">C.7.81 Section 15.7 Font size: the 'font-size' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.81.#q470"> + <tbody id="sC.7.81.#q21.470"> <!-- 0 tests --> </tbody> <tbody id="sC.7.82"> @@ -4309,7 +4257,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.16.1">C.7.82 Section 16.1 Indentation: the 'text-indent' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.82.#q471"> + <tbody id="sC.7.82.#q21.471"> <!-- 0 tests --> </tbody> <tbody id="sC.7.83"> @@ -4318,7 +4266,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.16.1a">C.7.83 Section 16.1 Indentation: the 'text-indent' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.83.#q472"> + <tbody id="sC.7.83.#q21.472"> <!-- 0 tests --> </tbody> <tbody id="sC.7.84"> @@ -4327,7 +4275,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.16.2">C.7.84 Section 16.2 Alignment: the 'text-align' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.84.#q473"> + <tbody id="sC.7.84.#q21.473"> <!-- 0 tests --> </tbody> <tbody id="sC.7.85"> @@ -4336,7 +4284,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.16.2a">C.7.85 Section 16.2 Alignment: the 'text-align' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.85.#q474"> + <tbody id="sC.7.85.#q21.474"> <!-- 0 tests --> </tbody> <tbody id="sC.7.86"> @@ -4345,7 +4293,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.16.3.1">C.7.86 Section 16.3.1 Underlining, overlining, striking, and blinking: the 'text-decoration' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.86.#q475"> + <tbody id="sC.7.86.#q21.475"> <!-- 0 tests --> </tbody> <tbody id="sC.7.87"> @@ -4354,7 +4302,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.16.3.1a">C.7.87 Section 16.3.1 Underlining, overlining, striking, and blinking: the 'text-decoration' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.87.#q476"> + <tbody id="sC.7.87.#q21.476"> <!-- 0 tests --> </tbody> <tbody id="sC.7.88"> @@ -4363,7 +4311,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.16.4">C.7.88 Section 16.4 Letter and word spacing: the 'letter-spacing' and 'word-spacing' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.88.#q477"> + <tbody id="sC.7.88.#q21.477"> <!-- 0 tests --> </tbody> <tbody id="sC.7.89"> @@ -4372,7 +4320,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.16.6">C.7.89 Section 16.6 White space: the 'white-space' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.89.#q478"> + <tbody id="sC.7.89.#q21.478"> <!-- 0 tests --> </tbody> <tbody id="sC.7.90"> @@ -4381,7 +4329,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.16.6.1">C.7.90 Section 16.6.1 The 'white-space' processing model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.90.#q479"> + <tbody id="sC.7.90.#q21.479"> <!-- 0 tests --> </tbody> <tbody id="sC.7.91"> @@ -4390,7 +4338,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.16.6.1a">C.7.91 Section 16.6.1 The 'white-space' processing model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.91.#q480"> + <tbody id="sC.7.91.#q21.480"> <!-- 0 tests --> </tbody> <tbody id="sC.7.92"> @@ -4399,7 +4347,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.16.6.1b">C.7.92 Section 16.6.1 The 'white-space' processing model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.92.#q481"> + <tbody id="sC.7.92.#q21.481"> <!-- 0 tests --> </tbody> <tbody id="sC.7.93"> @@ -4408,7 +4356,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.17.2">C.7.93 Section 17.2 The CSS table model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.93.#q482"> + <tbody id="sC.7.93.#q21.482"> <!-- 0 tests --> </tbody> <tbody id="sC.7.94"> @@ -4417,7 +4365,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.17.2.1">C.7.94 Section 17.2.1 Anonymous table objects</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.94.#q483"> + <tbody id="sC.7.94.#q21.483"> <!-- 0 tests --> </tbody> <tbody id="sC.7.95"> @@ -4426,7 +4374,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.17.2.1a">C.7.95 Section 17.2.1 Anonymous table objects</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.95.#q484"> + <tbody id="sC.7.95.#q21.484"> <!-- 0 tests --> </tbody> <tbody id="sC.7.96"> @@ -4435,7 +4383,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.17.4">C.7.96 Section 17.4 Tables in the visual formatting model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.96.#q485"> + <tbody id="sC.7.96.#q21.485"> <!-- 0 tests --> </tbody> <tbody id="sC.7.97"> @@ -4444,7 +4392,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.17.4a">C.7.97 Section 17.4 Tables in the visual formatting model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.97.#q486"> + <tbody id="sC.7.97.#q21.486"> <!-- 0 tests --> </tbody> <tbody id="sC.7.98"> @@ -4453,7 +4401,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.17.5.2.2">C.7.98 Section 17.5.2.2 Automatic table layout</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.98.#q487"> + <tbody id="sC.7.98.#q21.487"> <!-- 0 tests --> </tbody> <tbody id="sC.7.99"> @@ -4462,7 +4410,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.17.5.3">C.7.99 Section 17.5.3 Table height algorithms</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.99.#q488"> + <tbody id="sC.7.99.#q21.488"> <!-- 0 tests --> </tbody> <tbody id="sC.7.100"> @@ -4471,7 +4419,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.17.5.4">C.7.100 Section 17.5.4 Horizontal alignment in a column</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.100.#q489"> + <tbody id="sC.7.100.#q21.489"> <!-- 0 tests --> </tbody> <tbody id="sC.7.101"> @@ -4480,7 +4428,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.B.2">C.7.101 Section B.2 Informative references</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.101.#q490"> + <tbody id="sC.7.101.#q21.490"> <!-- 0 tests --> </tbody> <tbody id="sC.7.102"> @@ -4489,7 +4437,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.D">C.7.102 Section D. Default style sheet for HTML 4</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.102.#q491"> + <tbody id="sC.7.102.#q21.491"> <!-- 0 tests --> </tbody> <tbody id="sC.7.103"> @@ -4498,7 +4446,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.E.2">C.7.103 Section E.2 Painting order</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.103.#q492"> + <tbody id="sC.7.103.#q21.492"> <!-- 0 tests --> </tbody> <tbody id="sC.7.104"> @@ -4507,7 +4455,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.G">C.7.104 Appendix G Grammar of CSS 2.1</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.104.#q493"> + <tbody id="sC.7.104.#q21.493"> <!-- 0 tests --> </tbody> <tbody id="sC.8"> @@ -4516,7 +4464,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#errata4">C.8 Changes since the working draft of 7 December 2010</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.#q494"> + <tbody id="sC.8.#q21.494"> <!-- 0 tests --> </tbody> <tbody id="sC.8.1"> @@ -4525,7 +4473,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.8.3.1">C.8.1 8.3.1 Collapsing margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.1.#q495"> + <tbody id="sC.8.1.#q21.495"> <!-- 0 tests --> </tbody> <tbody id="sC.8.2"> @@ -4534,7 +4482,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.10.8.1">C.8.2 10.8.1 Leading and half-leading</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.2.#q496"> + <tbody id="sC.8.2.#q21.496"> <!-- 0 tests --> </tbody> <tbody id="sC.8.3"> @@ -4543,7 +4491,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.10.3">C.8.3 10.3 Calculating widths and margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.3.#q497"> + <tbody id="sC.8.3.#q21.497"> <!-- 0 tests --> </tbody> <tbody id="sC.8.4"> @@ -4552,7 +4500,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.14.3">C.8.4 14.3 Gamma correction</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.4.#q498"> + <tbody id="sC.8.4.#q21.498"> <!-- 0 tests --> </tbody> <tbody id="sC.8.5"> @@ -4561,7 +4509,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.11.1.2">C.8.5 11.1.2 Clipping: the 'clip' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.5.#q499"> + <tbody id="sC.8.5.#q21.499"> <!-- 0 tests --> </tbody> <tbody id="sC.8.6"> @@ -4570,7 +4518,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.4.2">C.8.6 9.4.2 Inline formatting contexts</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.6.#q500"> + <tbody id="sC.8.6.#q21.500"> <!-- 0 tests --> </tbody> <tbody id="sC.8.7"> @@ -4579,7 +4527,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.10.3.2">C.8.7 10.3.2 Inline, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.7.#q501"> + <tbody id="sC.8.7.#q21.501"> <!-- 0 tests --> </tbody> <tbody id="sC.8.8"> @@ -4588,7 +4536,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.10.1">C.8.8 10.1 Definition of "containing block"</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.8.#q502"> + <tbody id="sC.8.8.#q21.502"> <!-- 0 tests --> </tbody> <tbody id="sC.8.9"> @@ -4597,7 +4545,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.13.2.2">C.8.9 13.2.2 Page selectors: selecting left, right, and first pages</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.9.#q503"> + <tbody id="sC.8.9.#q21.503"> <!-- 0 tests --> </tbody> <tbody id="sC.8.10"> @@ -4606,7 +4554,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.8.3.1a">C.8.10 8.3.1 Collapsing margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.10.#q504"> + <tbody id="sC.8.10.#q21.504"> <!-- 0 tests --> </tbody> <tbody id="sC.8.11"> @@ -4615,7 +4563,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.10.8">C.8.11 10.8 Line height calculations: the 'line-height' and 'vertical-align' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.11.#q505"> + <tbody id="sC.8.11.#q21.505"> <!-- 0 tests --> </tbody> <tbody id="sC.8.12"> @@ -4624,7 +4572,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.10.8.1a">C.8.12 10.8.1 Leading and half-leading</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.12.#q506"> + <tbody id="sC.8.12.#q21.506"> <!-- 0 tests --> </tbody> <tbody id="sC.8.13"> @@ -4633,7 +4581,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.10.6.1a">C.8.13 10.6.1 Inline, non-replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.13.#q507"> + <tbody id="sC.8.13.#q21.507"> <!-- 0 tests --> </tbody> <tbody id="sC.8.14"> @@ -4642,7 +4590,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.5.1">C.8.14 9.5.1 Positioning the float: the 'float' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.14.#q508"> + <tbody id="sC.8.14.#q21.508"> <!-- 0 tests --> </tbody> <tbody id="sC.8.15"> @@ -4651,7 +4599,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.2.1.1">C.8.15 9.2.1.1 Anonymous block boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.15.#q509"> + <tbody id="sC.8.15.#q21.509"> <!-- 0 tests --> </tbody> <tbody id="sC.8.16"> @@ -4660,7 +4608,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.5.12.1">C.8.16 5.12.1 The :first-line pseudo-element</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.16.#q510"> + <tbody id="sC.8.16.#q21.510"> <!-- 0 tests --> </tbody> <tbody id="sC.8.17"> @@ -4669,7 +4617,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.16.6">C.8.17 16.6 White space: the 'white-space' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.17.#q511"> + <tbody id="sC.8.17.#q21.511"> <!-- 0 tests --> </tbody> <tbody id="sC.8.18"> @@ -4678,7 +4626,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.12.5.1">C.8.18 12.5.1 Lists: the 'list-style-type', 'list-style-image', 'list-style-position', and 'list-style' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.18.#q512"> + <tbody id="sC.8.18.#q21.512"> <!-- 0 tests --> </tbody> <tbody id="sC.8.19"> @@ -4687,7 +4635,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.7">C.8.19 9.7 Relationships between 'display', 'position', and 'float'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.19.#q513"> + <tbody id="sC.8.19.#q21.513"> <!-- 0 tests --> </tbody> <tbody id="sC.8.20"> @@ -4696,7 +4644,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.4.2a">C.8.20 9.4.2 Inline formatting contexts</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.20.#q514"> + <tbody id="sC.8.20.#q21.514"> <!-- 0 tests --> </tbody> <tbody id="sC.8.21"> @@ -4705,7 +4653,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.4.1.9">C.8.21 4.1.9 Comments</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.21.#q515"> + <tbody id="sC.8.21.#q21.515"> <!-- 0 tests --> </tbody> <tbody id="sC.8.22"> @@ -4714,7 +4662,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.12.5.1a">C.8.22 12.5.1 Lists: the 'list-style-type', 'list-style-image', 'list-style-position', and 'list-style' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.22.#q516"> + <tbody id="sC.8.22.#q21.516"> <!-- 0 tests --> </tbody> <tbody id="sC.8.23"> @@ -4723,7 +4671,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.5.1a">C.8.23 9.5.1 Positioning the float: the 'float' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.23.#q517"> + <tbody id="sC.8.23.#q21.517"> <!-- 0 tests --> </tbody> <tbody id="sC.8.24"> @@ -4732,7 +4680,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.3">C.8.24 9.3 Positioning schemes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.24.#q518"> + <tbody id="sC.8.24.#q21.518"> <!-- 0 tests --> </tbody> <tbody id="sC.8.25"> @@ -4741,7 +4689,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.10">C.8.25 9.10 Text direction: the 'direction' and 'unicode-bidi' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.25.#q519"> + <tbody id="sC.8.25.#q21.519"> <!-- 0 tests --> </tbody> <tbody id="sC.8.26"> @@ -4750,7 +4698,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.16.3.1">C.8.26 16.3.1 Underlining, overlining, striking, and blinking: the 'text-decoration' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.26.#q520"> + <tbody id="sC.8.26.#q21.520"> <!-- 0 tests --> </tbody> <tbody id="sC.8.27"> @@ -4759,7 +4707,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.16.3.1a">C.8.27 16.3.1 Underlining, overlining, striking, and blinking: the 'text-decoration' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.27.#q521"> + <tbody id="sC.8.27.#q21.521"> <!-- 0 tests --> </tbody> <tbody id="sC.8.28"> @@ -4768,7 +4716,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.10.4">C.8.28 10.4 Minimum and maximum widths: 'min-width' and 'max-width'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.28.#q522"> + <tbody id="sC.8.28.#q21.522"> <!-- 0 tests --> </tbody> <tbody id="sC.8.29"> @@ -4777,7 +4725,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.3.2">C.8.29 9.3.2 Box offsets: 'top', 'right', 'bottom', 'left'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.29.#q523"> + <tbody id="sC.8.29.#q21.523"> <!-- 0 tests --> </tbody> <tbody id="sC.8.30"> @@ -4786,7 +4734,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.2.1.1a">C.8.30 9.2.1.1 Anonymous block boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.30.#q524"> + <tbody id="sC.8.30.#q21.524"> <!-- 0 tests --> </tbody> <tbody id="sC.8.31"> @@ -4795,7 +4743,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.2.1.1b">C.8.31 17.4 Tables in the visual formatting model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.31.#q525"> + <tbody id="sC.8.31.#q21.525"> <!-- 0 tests --> </tbody> <tbody id="sC.8.32"> @@ -4807,7 +4755,7 @@ <tbody id="sC.8.32.#img-clip"> <!-- 0 tests --> </tbody> - <tbody id="sC.8.32.#q526"> + <tbody id="sC.8.32.#q21.526"> <!-- 0 tests --> </tbody> <tbody id="sC.8.33"> @@ -4816,7 +4764,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.13.2">C.8.33 13.2 Page boxes: the @page rule</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.33.#q527"> + <tbody id="sC.8.33.#q21.527"> <!-- 0 tests --> </tbody> <tbody id="sC.8.34"> @@ -4825,7 +4773,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.4.1.1">C.8.34 4.1.1 Tokenization</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.34.#q528"> + <tbody id="sC.8.34.#q21.528"> <!-- 0 tests --> </tbody> <tbody id="sC.8.35"> @@ -4834,7 +4782,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.4.2">C.8.35 4.2 Rules for handling parsing errors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.35.#q529"> + <tbody id="sC.8.35.#q21.529"> <!-- 0 tests --> </tbody> <tbody id="sC.8.36"> @@ -4843,7 +4791,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.3.1">C.8.36 3.1 Definitions</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.36.#q530"> + <tbody id="sC.8.36.#q21.530"> <!-- 0 tests --> </tbody> <tbody id="sC.8.37"> @@ -4852,7 +4800,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.4.3.4">C.8.37 4.3.4 URLs and URIs</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.37.#q531"> + <tbody id="sC.8.37.#q21.531"> <!-- 0 tests --> </tbody> <tbody id="sC.8.38"> @@ -4861,7 +4809,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.5">C.8.38 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.38.#q532"> + <tbody id="sC.8.38.#q21.532"> <!-- 0 tests --> </tbody> <tbody id="sC.8.39"> @@ -4870,7 +4818,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.11.1.1">C.8.39 11.1.1 Overflow: the 'overflow' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.39.#q533"> + <tbody id="sC.8.39.#q21.533"> <!-- 0 tests --> </tbody> <tbody id="sC.8.40"> @@ -4879,7 +4827,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.2.1.1c">C.8.40 9.2.1.1 Anonymous block boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.40.#q534"> + <tbody id="sC.8.40.#q21.534"> <!-- 0 tests --> </tbody> <tbody id="sC.8.41"> @@ -4888,7 +4836,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.16.2">C.8.41 16.2 Alignment: the 'text-align' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.41.#q535"> + <tbody id="sC.8.41.#q21.535"> <!-- 0 tests --> </tbody> <tbody id="sC.8.42"> @@ -4897,7 +4845,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.5a">C.8.42 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.42.#q536"> + <tbody id="sC.8.42.#q21.536"> <!-- 0 tests --> </tbody> <tbody id="sC.8.43"> @@ -4906,7 +4854,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.4.2b">C.8.43 9.4.2 Inline formatting contexts</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.43.#q537"> + <tbody id="sC.8.43.#q21.537"> <!-- 0 tests --> </tbody> <tbody id="sC.8.44"> @@ -4915,7 +4863,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.5.12">C.8.44 5.12 Pseudo-elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.44.#q538"> + <tbody id="sC.8.44.#q21.538"> <!-- 0 tests --> </tbody> <tbody id="sC.8.45"> @@ -4924,7 +4872,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.5b">C.8.45 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.45.#q539"> + <tbody id="sC.8.45.#q21.539"> <!-- 0 tests --> </tbody> <tbody id="sC.8.46"> @@ -4933,7 +4881,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.5c">C.8.46 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.46.#q540"> + <tbody id="sC.8.46.#q21.540"> <!-- 0 tests --> </tbody> <tbody id="sC.8.47"> @@ -4942,7 +4890,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.14.2.1">C.8.47 14.2.1 Background properties: 'background-color', 'background-image', 'background-repeat', 'background-attachment', 'background-position', and 'background'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.47.#q541"> + <tbody id="sC.8.47.#q21.541"> <!-- 0 tests --> </tbody> <tbody id="sC.8.48"> @@ -4951,7 +4899,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.2.4">C.8.48 9.2.4 The 'display' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.48.#q542"> + <tbody id="sC.8.48.#q21.542"> <!-- 0 tests --> </tbody> <tbody id="sC.8.49"> @@ -4960,7 +4908,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.6.1.2">C.8.49 6.1.2 Computed values</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.49.#q543"> + <tbody id="sC.8.49.#q21.543"> <!-- 0 tests --> </tbody> <tbody id="sC.8.50"> @@ -4969,7 +4917,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.10.3.2a">C.8.50 10.3.2 Inline, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.50.#q544"> + <tbody id="sC.8.50.#q21.544"> <!-- 0 tests --> </tbody> <tbody id="sC.8.51"> @@ -4978,7 +4926,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.5.2d">C.8.51 Section 9.5.2 Controlling flow next to floats: the 'clear' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.51.#q545"> + <tbody id="sC.8.51.#q21.545"> <!-- 0 tests --> </tbody> <tbody id="sC.8.52"> @@ -4987,7 +4935,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.G.2">C.8.52 G.2 Lexical scanner</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.52.#q546"> + <tbody id="sC.8.52.#q21.546"> <!-- 0 tests --> </tbody> <tbody id="sC.8.53"> @@ -4996,7 +4944,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.5.2e">C.8.53 Section 9.5.2 Controlling flow next to floats: the 'clear' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.53.#q547"> + <tbody id="sC.8.53.#q21.547"> <!-- 0 tests --> </tbody> <tbody id="sC.8.54"> @@ -5005,7 +4953,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.5b">C.8.54 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.54.#q548"> + <tbody id="sC.8.54.#q21.548"> <!-- 0 tests --> </tbody> <tbody id="sC.8.55"> @@ -5014,7 +4962,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.6.3">C.8.55 10.6.3 Block-level non-replaced elements in normal flow when 'overflow' computes to 'visible'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.55.#q549"> + <tbody id="sC.8.55.#q21.549"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css21_dev/html4/chapter-D.htm b/tests/wpt/css-tests/css21_dev/html4/chapter-D.htm index de8db09a85f..a250e40f34e 100644 --- a/tests/wpt/css-tests/css21_dev/html4/chapter-D.htm +++ b/tests/wpt/css-tests/css21_dev/html4/chapter-D.htm @@ -30,7 +30,10 @@ <tbody id="sD"> <tr><th colspan="4" scope="rowgroup"> <a href="#sD">+</a> - <a href="https://www.w3.org/TR/CSS21/sample.html">D Default style sheet for HTML 4</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/sample.html#q22.0">D Default style sheet for HTML 4</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="sD.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="sD.#bidi"> diff --git a/tests/wpt/css-tests/css21_dev/html4/chapter-E.htm b/tests/wpt/css-tests/css21_dev/html4/chapter-E.htm index 2657bb0acd8..1b77c5e0bcd 100644 --- a/tests/wpt/css-tests/css21_dev/html4/chapter-E.htm +++ b/tests/wpt/css-tests/css21_dev/html4/chapter-E.htm @@ -30,7 +30,10 @@ <tbody id="sE"> <tr><th colspan="4" scope="rowgroup"> <a href="#sE">+</a> - <a href="https://www.w3.org/TR/CSS21/zindex.html">E Elaborate description of Stacking Contexts</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/zindex.html#q23.0">E Elaborate description of Stacking Contexts</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="sE.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="sE.1"> diff --git a/tests/wpt/css-tests/css21_dev/html4/chapter-F.htm b/tests/wpt/css-tests/css21_dev/html4/chapter-F.htm index 0eec58e73e7..5f67dc15c12 100644 --- a/tests/wpt/css-tests/css21_dev/html4/chapter-F.htm +++ b/tests/wpt/css-tests/css21_dev/html4/chapter-F.htm @@ -30,7 +30,10 @@ <tbody id="sF"> <tr><th colspan="4" scope="rowgroup"> <a href="#sF">+</a> - <a href="https://www.w3.org/TR/CSS21/propidx.html">F Full property table</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/propidx.html#q24.0">F Full property table</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="sF.#annoying-warning"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css21_dev/html4/chapter-G.htm b/tests/wpt/css-tests/css21_dev/html4/chapter-G.htm index 0dd1c1771d8..e042f82c0ca 100644 --- a/tests/wpt/css-tests/css21_dev/html4/chapter-G.htm +++ b/tests/wpt/css-tests/css21_dev/html4/chapter-G.htm @@ -30,7 +30,10 @@ <tbody id="sG"> <tr><th colspan="4" scope="rowgroup"> <a href="#sG">+</a> - <a href="https://www.w3.org/TR/CSS21/grammar.html">G Grammar of CSS 2.1</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/grammar.html#q25.0">G Grammar of CSS 2.1</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="sG.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="sG.1"> @@ -94,7 +97,7 @@ <tbody id="sG.4"> <tr><th colspan="4" scope="rowgroup"> <a href="#sG.4">+</a> - <a href="https://www.w3.org/TR/CSS21/grammar.html#q4">G.4 Implementation note</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/grammar.html#q25.4">G.4 Implementation note</a></th></tr> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css21_dev/html4/chapter-H.htm b/tests/wpt/css-tests/css21_dev/html4/chapter-H.htm index dfe797181e9..cf49f2ba59f 100644 --- a/tests/wpt/css-tests/css21_dev/html4/chapter-H.htm +++ b/tests/wpt/css-tests/css21_dev/html4/chapter-H.htm @@ -30,7 +30,7 @@ <tbody id="sH"> <tr><th colspan="4" scope="rowgroup"> <a href="#sH">+</a> - <a href="https://www.w3.org/TR/CSS21/leftblank.html">H Has been intentionally left blank</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/leftblank.html#q26.0">H Has been intentionally left blank</a></th></tr> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css21_dev/html4/chapter-I.htm b/tests/wpt/css-tests/css21_dev/html4/chapter-I.htm index 5d594abba33..2f968a11e81 100644 --- a/tests/wpt/css-tests/css21_dev/html4/chapter-I.htm +++ b/tests/wpt/css-tests/css21_dev/html4/chapter-I.htm @@ -30,7 +30,10 @@ <tbody id="sI"> <tr><th colspan="4" scope="rowgroup"> <a href="#sI">+</a> - <a href="https://www.w3.org/TR/CSS21/indexlist.html">I Index</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/indexlist.html#q27.0">I Index</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="sI.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="sI.#index-;"> @@ -147,6 +150,9 @@ <tbody id="sI.#index-z"> <!-- 0 tests --> </tbody> + <tbody id="sstatus.#annoying-warning"> + <!-- 0 tests --> + </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css21_dev/html4/content-attr-case-001.htm b/tests/wpt/css-tests/css21_dev/html4/content-attr-case-001.htm index 633aa95901f..f69d36d425c 100644 --- a/tests/wpt/css-tests/css21_dev/html4/content-attr-case-001.htm +++ b/tests/wpt/css-tests/css21_dev/html4/content-attr-case-001.htm @@ -1,11 +1,10 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> -<html> - <head> +<!DOCTYPE html> +<html><head> <title>CSS Test: Content property attr(x) case sensitivity</title> - <link rel="author" title="Microsoft" href="http://www.microsoft.com/"> - <link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#content"> - <meta name="flags" content="HTMLonly"> - <meta name="assert" content="The attr(x) function selects the attribute even when case does not match."> + <link href="http://www.microsoft.com/" rel="author" title="Microsoft"> + <link href="http://www.w3.org/TR/CSS21/generate.html#content" rel="help"> + <meta content="HTMLonly" name="flags"> + <meta content="The attr(x) function selects the attribute even when case does not match." name="assert"> <style type="text/css"> div:before { @@ -17,5 +16,6 @@ <body> <p>Test passes if there is the word "PASS" below.</p> <div title="PASS"></div> - </body> -</html>
\ No newline at end of file + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css21_dev/html4/html-case-sensitivity-001.htm b/tests/wpt/css-tests/css21_dev/html4/html-case-sensitivity-001.htm index 6e3579d292f..a06e3cf7a7a 100644 --- a/tests/wpt/css-tests/css21_dev/html4/html-case-sensitivity-001.htm +++ b/tests/wpt/css-tests/css21_dev/html4/html-case-sensitivity-001.htm @@ -1,12 +1,11 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> -<html> - <head> +<!DOCTYPE html> +<html><head> <title>CSS Test: HTML case sensitivity - Simple selectors</title> - <link rel="author" title="Microsoft" href="http://www.microsoft.com/"> - <link rel="help" href="http://www.w3.org/TR/CSS21/selector.html#attribute-selectors"> - <link rel="match" href="reference/filler-text-below-green.htm"> - <meta name="flags" content="HTMLonly"> - <meta name="assert" content="Simple selectors are not case sensitive in HTML."> + <link href="http://www.microsoft.com/" rel="author" title="Microsoft"> + <link href="http://www.w3.org/TR/CSS21/selector.html#attribute-selectors" rel="help"> + <link href="reference/filler-text-below-green.htm" rel="match"> + <meta content="HTMLonly" name="flags"> + <meta content="Simple selectors are not case sensitive in HTML." name="assert"> <style type="text/css"> DIV { @@ -17,5 +16,6 @@ <body> <p>Test passes if the "Filler Text" below is green.</p> <div>Filler Text</div> - </body> -</html>
\ No newline at end of file + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css21_dev/html4/lang-pseudoclass-001.htm b/tests/wpt/css-tests/css21_dev/html4/lang-pseudoclass-001.htm index a74132795a4..9ad177978d2 100644 --- a/tests/wpt/css-tests/css21_dev/html4/lang-pseudoclass-001.htm +++ b/tests/wpt/css-tests/css21_dev/html4/lang-pseudoclass-001.htm @@ -1,12 +1,11 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> -<html> - <head> +<!DOCTYPE html> +<html><head> <title>CSS Test: :lang pseudoclass</title> - <link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"> - <link rel="author" title="Eira Monstad, Opera Software ASA" href="mailto:public-testsuites@opera.com"> - <link rel="help" href="http://www.w3.org/TR/CSS21/selector.html#lang"> - <meta name="flags" content="HTMLonly"> - <meta name="assert" content=":lang pseudoclass in HTML should not be case-sensitive, and match a substring"> + <link href="mailto:ishida@w3.org" rel="author" title="Richard Ishida"> + <link href="mailto:public-testsuites@opera.com" rel="author" title="Eira Monstad, Opera Software ASA"> + <link href="http://www.w3.org/TR/CSS21/selector.html#lang" rel="help"> + <meta content="HTMLonly" name="flags"> + <meta content=":lang pseudoclass in HTML should not be case-sensitive, and match a substring" name="assert"> <style type="text/css"> div:lang(es) { color:white;background-color:green; } p:lang(es) { color:white;background-color:green; } @@ -31,5 +30,6 @@ <div lang="MX-es">This line should NOT be green</div> <div lang="en-US">This line should NOT be green</div> <div lang="en">This line should NOT be green</div> - </body> -</html>
\ No newline at end of file + + +</body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css21_dev/html4/margin-collapse-018.htm b/tests/wpt/css-tests/css21_dev/html4/margin-collapse-018.htm index 48df2b5173e..54628a0f05a 100644 --- a/tests/wpt/css-tests/css21_dev/html4/margin-collapse-018.htm +++ b/tests/wpt/css-tests/css21_dev/html4/margin-collapse-018.htm @@ -51,4 +51,4 @@ <div class="class1"></div> </div> </body> -</html> +</html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css21_dev/html4/overflow-html-body-001.htm b/tests/wpt/css-tests/css21_dev/html4/overflow-html-body-001.htm index 94619173158..ea6261151b3 100644 --- a/tests/wpt/css-tests/css21_dev/html4/overflow-html-body-001.htm +++ b/tests/wpt/css-tests/css21_dev/html4/overflow-html-body-001.htm @@ -4,7 +4,6 @@ <title>CSS Test: Overflow on body propagates to viewport</title> <link rel="author" title="Microsoft" href="http://www.microsoft.com/"> <link rel="help" href="http://www.w3.org/TR/CSS21/visufx.html#overflow"> - <meta name="flags" content="HTMLonly"> <meta name="assert" content="An HTML user agent propagates the 'overflow' property from the 'body' to the viewport."> <style type="text/css"> body diff --git a/tests/wpt/css-tests/css21_dev/html4/reftest-toc.htm b/tests/wpt/css-tests/css21_dev/html4/reftest-toc.htm index 957c59422db..1e7cdbc0e65 100644 --- a/tests/wpt/css-tests/css21_dev/html4/reftest-toc.htm +++ b/tests/wpt/css-tests/css21_dev/html4/reftest-toc.htm @@ -250,7 +250,7 @@ </tbody> <tbody id="abs-pos-non-replaced-vlr-059" class="ahem image"> <tr> - <td rowspan="1" title="absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'"> + <td rowspan="1" title="absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto'"> <a href="abs-pos-non-replaced-vlr-059.htm">abs-pos-non-replaced-vlr-059</a></td> <td><a href="reference/abs-pos-non-replaced-vrl-004-ref.htm">=</a> </td> <td rowspan="1"><abbr class="ahem" title="Requires Ahem font">Ahem</abbr><abbr class="image" title="Requires bitmap graphic support">Bitmaps</abbr></td> @@ -1146,7 +1146,7 @@ </tbody> <tbody id="abs-pos-non-replaced-vrl-058" class="ahem image"> <tr> - <td rowspan="1" title="absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'"> + <td rowspan="1" title="absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto'"> <a href="abs-pos-non-replaced-vrl-058.htm">abs-pos-non-replaced-vrl-058</a></td> <td><a href="reference/abs-pos-non-replaced-vrl-004-ref.htm">=</a> </td> <td rowspan="1"><abbr class="ahem" title="Requires Ahem font">Ahem</abbr><abbr class="image" title="Requires bitmap graphic support">Bitmaps</abbr></td> diff --git a/tests/wpt/css-tests/css21_dev/html4/table-intro-example-001.htm b/tests/wpt/css-tests/css21_dev/html4/table-intro-example-001.htm index 1bd3427fb1d..06c05d8184c 100644 --- a/tests/wpt/css-tests/css21_dev/html4/table-intro-example-001.htm +++ b/tests/wpt/css-tests/css21_dev/html4/table-intro-example-001.htm @@ -4,7 +4,6 @@ <title>CSS Test: Introduction to Tables (text-align, font-weight)</title> <link rel="author" title="Microsoft" href="http://www.microsoft.com/"> <link rel="help" href="http://www.w3.org/TR/CSS21/tables.html#tables-intro"> - <meta name="flags" content="HTMLonly"> <meta name="assert" content="'text-align' and 'font-weight' can be applied to table cells (example from spec section 17.1)."> <style type="text/css"> caption diff --git a/tests/wpt/css-tests/css21_dev/html4/table-intro-example-002.htm b/tests/wpt/css-tests/css21_dev/html4/table-intro-example-002.htm index 1335b09a3ff..34221b1354e 100644 --- a/tests/wpt/css-tests/css21_dev/html4/table-intro-example-002.htm +++ b/tests/wpt/css-tests/css21_dev/html4/table-intro-example-002.htm @@ -4,7 +4,6 @@ <title>CSS Test: Introduction to Tables (vertical-align)</title> <link rel="author" title="Microsoft" href="http://www.microsoft.com/"> <link rel="help" href="http://www.w3.org/TR/CSS21/tables.html#tables-intro"> - <meta name="flags" content="HTMLonly"> <meta name="assert" content="'vertical-align' can be set on table cells (example from section 17.1)."> <style type="text/css"> caption diff --git a/tests/wpt/css-tests/css21_dev/html4/table-intro-example-003.htm b/tests/wpt/css-tests/css21_dev/html4/table-intro-example-003.htm index 8d0f23703ce..e6f9845bba5 100644 --- a/tests/wpt/css-tests/css21_dev/html4/table-intro-example-003.htm +++ b/tests/wpt/css-tests/css21_dev/html4/table-intro-example-003.htm @@ -4,7 +4,6 @@ <title>CSS Test: Introduction to Tables (border-collapse, border)</title> <link rel="author" title="Microsoft" href="http://www.microsoft.com/"> <link rel="help" href="http://www.w3.org/TR/CSS21/tables.html#tables-intro"> - <meta name="flags" content="HTMLonly"> <meta name="assert" content="'border-collapse' and 'border' can be set on table elements (example from section 17.1)."> <style type="text/css"> table diff --git a/tests/wpt/css-tests/css21_dev/html4/table-intro-example-004.htm b/tests/wpt/css-tests/css21_dev/html4/table-intro-example-004.htm index 7a2743f6466..ebe0bd1d490 100644 --- a/tests/wpt/css-tests/css21_dev/html4/table-intro-example-004.htm +++ b/tests/wpt/css-tests/css21_dev/html4/table-intro-example-004.htm @@ -4,7 +4,6 @@ <title>CSS Test: Introduction to Tables (caption-side)</title> <link rel="author" title="Microsoft" href="http://www.microsoft.com/"> <link rel="help" href="http://www.w3.org/TR/CSS21/tables.html#tables-intro"> - <meta name="flags" content="HTMLonly"> <meta name="assert" content="'caption-side' can be set on a table caption (example from section 17.1)."> <style type="text/css"> caption diff --git a/tests/wpt/css-tests/css21_dev/html4/toc.htm b/tests/wpt/css-tests/css21_dev/html4/toc.htm index 169e7ccf5ec..752c36c96b8 100644 --- a/tests/wpt/css-tests/css21_dev/html4/toc.htm +++ b/tests/wpt/css-tests/css21_dev/html4/toc.htm @@ -37,22 +37,22 @@ <tbody id="s4"> <tr><th><a href="chapter-4.htm">Chapter 4 - Syntax and basic data types</a></th> - <td>(439 Tests)</td></tr> + <td>(431 Tests)</td></tr> </tbody> <tbody id="s5"> <tr><th><a href="chapter-5.htm">Chapter 5 - Selectors</a></th> - <td>(677 Tests)</td></tr> + <td>(668 Tests)</td></tr> </tbody> <tbody id="s6"> <tr><th><a href="chapter-6.htm">Chapter 6 - Assigning property values, Cascading, and Inheritance</a></th> - <td>(145 Tests)</td></tr> + <td>(117 Tests)</td></tr> </tbody> <tbody id="s7"> <tr><th><a href="chapter-7.htm">Chapter 7 - Media types</a></th> - <td>(22 Tests)</td></tr> + <td>(5 Tests)</td></tr> </tbody> <tbody id="s8"> <tr><th><a href="chapter-8.htm">Chapter 8 - @@ -62,7 +62,7 @@ <tbody id="s9"> <tr><th><a href="chapter-9.htm">Chapter 9 - Visual formatting model</a></th> - <td>(1247 Tests)</td></tr> + <td>(1246 Tests)</td></tr> </tbody> <tbody id="s10"> <tr><th><a href="chapter-10.htm">Chapter 10 - @@ -122,7 +122,7 @@ <tbody id="sC"> <tr><th><a href="chapter-C.htm">Appendix C - Changes</a></th> - <td>(5 Tests)</td></tr> + <td>(0 Tests)</td></tr> </tbody> <tbody id="sD"> <tr><th><a href="chapter-D.htm">Appendix D - diff --git a/tests/wpt/css-tests/css21_dev/implementation-report-TEMPLATE.data b/tests/wpt/css-tests/css21_dev/implementation-report-TEMPLATE.data index b52862b997b..0bbdc1ebfc0 100644 --- a/tests/wpt/css-tests/css21_dev/implementation-report-TEMPLATE.data +++ b/tests/wpt/css-tests/css21_dev/implementation-report-TEMPLATE.data @@ -59,8 +59,8 @@ html4/abs-pos-non-replaced-vlr-055.htm e6152f2732060736d14b5a78a302e0bc8bbe793f xhtml1/abs-pos-non-replaced-vlr-055.xht e6152f2732060736d14b5a78a302e0bc8bbe793f ? html4/abs-pos-non-replaced-vlr-057.htm 512802c29f43864633b5ba4997e3435e77dfa780 ? xhtml1/abs-pos-non-replaced-vlr-057.xht 512802c29f43864633b5ba4997e3435e77dfa780 ? -html4/abs-pos-non-replaced-vlr-059.htm 4a081025215343dc43c94a9afbecb4f8708d78c0 ? -xhtml1/abs-pos-non-replaced-vlr-059.xht 4a081025215343dc43c94a9afbecb4f8708d78c0 ? +html4/abs-pos-non-replaced-vlr-059.htm 87d3f8ddd1ad9152e5654825a8774a88494ade9f ? +xhtml1/abs-pos-non-replaced-vlr-059.xht 87d3f8ddd1ad9152e5654825a8774a88494ade9f ? html4/abs-pos-non-replaced-vlr-061.htm d5d7da3ef86e0bc59f71598418b084d23a7fc5e2 ? xhtml1/abs-pos-non-replaced-vlr-061.xht d5d7da3ef86e0bc59f71598418b084d23a7fc5e2 ? html4/abs-pos-non-replaced-vlr-063.htm e44b75458e48fc677468fad2f6b97bfb27a04358 ? @@ -283,8 +283,8 @@ html4/abs-pos-non-replaced-vrl-054.htm 7ef86efb0eef5f8b43a82658c4cde941fa885c55 xhtml1/abs-pos-non-replaced-vrl-054.xht 7ef86efb0eef5f8b43a82658c4cde941fa885c55 ? html4/abs-pos-non-replaced-vrl-056.htm 0684b6dac50f2a8a6af6e1e1e43cd9ad96e6607e ? xhtml1/abs-pos-non-replaced-vrl-056.xht 0684b6dac50f2a8a6af6e1e1e43cd9ad96e6607e ? -html4/abs-pos-non-replaced-vrl-058.htm 5ed1484c71061d9fdd91d13b776f19b73f7d1853 ? -xhtml1/abs-pos-non-replaced-vrl-058.xht 5ed1484c71061d9fdd91d13b776f19b73f7d1853 ? +html4/abs-pos-non-replaced-vrl-058.htm 37684ca4836356475eb9e041a2bd629ff84f4ec3 ? +xhtml1/abs-pos-non-replaced-vrl-058.xht 37684ca4836356475eb9e041a2bd629ff84f4ec3 ? html4/abs-pos-non-replaced-vrl-060.htm f125ea87971858a2689e498e6c6e302319fb346b ? xhtml1/abs-pos-non-replaced-vrl-060.xht f125ea87971858a2689e498e6c6e302319fb346b ? html4/abs-pos-non-replaced-vrl-062.htm 3a89ef33bd3f993b23dc0dc1a28612218ad0beb9 ? @@ -960,7 +960,7 @@ html4/at-charset-011.htm bb803f4f1bbf76e897491176102f107cbd4bb9ec ? xhtml1/at-charset-011.xht bb803f4f1bbf76e897491176102f107cbd4bb9ec ? html4/at-charset-012.htm a9023c2b0a8df17f3bce2a54374155da0b0aebf0 ? xhtml1/at-charset-012.xht a9023c2b0a8df17f3bce2a54374155da0b0aebf0 ? -html4/at-charset-013.htm 145d211ea37c74e5394d6b6f93328fe536f21a1d ? +html4/at-charset-013.htm 38743117b70c5990988feb2fd2569fa6927c0d7a ? html4/at-charset-014.htm a1a3c6216ea92a07ef16e1fb147fd8432ff36c3d ? xhtml1/at-charset-014.xht a1a3c6216ea92a07ef16e1fb147fd8432ff36c3d ? html4/at-charset-015.htm 2e3f28c515a9921c50d55b8d4a59b22c9fe0c686 ? @@ -1179,13 +1179,13 @@ html4/attribute-value-selector-003.htm 508036fcffcc15830d5fdff9d40e8e7c0c1ccda3 xhtml1/attribute-value-selector-003.xht 508036fcffcc15830d5fdff9d40e8e7c0c1ccda3 ? html4/attribute-value-selector-004.htm dfb8215a980f61f868127601e02f621b5d8de9a7 ? xhtml1/attribute-value-selector-004.xht dfb8215a980f61f868127601e02f621b5d8de9a7 ? -html4/attribute-value-selector-005.htm 4e99118f4f08eb0e71b36b24b986cbe9e1ad15fe ? +html4/attribute-value-selector-005.htm 98fe9d0bad9fb7ca59e360a6c9c33042e5d451ea ? html4/attribute-value-selector-006.htm 1f42c36cb8f99e36982f9ebbec59c63967c711c1 ? xhtml1/attribute-value-selector-006.xht 1f42c36cb8f99e36982f9ebbec59c63967c711c1 ? -html4/attribute-value-selector-007.htm b144c51a0bda8a4416ab50f1cff0f77044315094 ? +html4/attribute-value-selector-007.htm c66ad246bf6f8d5b5f16e330d968629d22c29ec1 ? xhtml1/attribute-value-selector-008.xht df9f94901759df9b76cf40d97ca1bc87bd5ef407 ? xhtml1/attribute-value-selector-009.xht 97d442f5c1c5b7c883684e956a3a53964d18db05 ? -html4/attribute-value-selector-010.htm 6610e1761c91638f236f6d09e5fa3cd1ec9bc73f ? +html4/attribute-value-selector-010.htm 8e5e682c49b5702b310e7c58e4a2b4caae5438c1 ? html4/background-001.htm 3dd2f2ebcf82520953f31d00f243c309e9b005f9 ? xhtml1/background-001.xht 3dd2f2ebcf82520953f31d00f243c309e9b005f9 ? html4/background-002.htm 42b9cd53f06b23fbd5efb5774fb90cf6937cece9 ? @@ -2748,7 +2748,8 @@ html4/bad-selector-001.htm 1d45e37ea036e7e72fcf9fc064a1eb064d2447b4 ? xhtml1/bad-selector-001.xht 1d45e37ea036e7e72fcf9fc064a1eb064d2447b4 ? html4/basic-css-table-001.htm a76fad935d54e5eded6be37d1f4d04ddc497d263 ? xhtml1/basic-css-table-001.xht a76fad935d54e5eded6be37d1f4d04ddc497d263 ? -html4/basic-html-table-001.htm 51ea5055ee5e8fbe0dcfed92e73ce5218baf89fa ? +html4/basic-html-table-001.htm 2d2335714010abd404725d488c7a5ffb44b15c7c ? +xhtml1/basic-html-table-001.xht 2d2335714010abd404725d488c7a5ffb44b15c7c ? html4/before-after-001.htm bc2221b20dfc6597b1d3a72c2b6ce828e4637e6e ? xhtml1/before-after-001.xht bc2221b20dfc6597b1d3a72c2b6ce828e4637e6e ? html4/before-after-002.htm e508222d00574adb1450511af59f2d17b588e2b5 ? @@ -7895,7 +7896,7 @@ html4/case-sensitive-004.htm 723fdbbe5941d318118e86cf5ae161312de476d2 ? xhtml1/case-sensitive-004.xht 723fdbbe5941d318118e86cf5ae161312de476d2 ? html4/case-sensitive-005.htm dfd0240ea392700c15e32a28eec725b6db820f94 ? xhtml1/case-sensitive-005.xht dfd0240ea392700c15e32a28eec725b6db820f94 ? -html4/case-sensitive-006.htm 22e1a8c5e8284dd76b4937bb74102888636a7325 ? +html4/case-sensitive-006.htm 457235f5ac6fac023fd91e151fd6aac15d688db4 ? xhtml1/case-sensitive-007.xht 07b1170801ad9349fabaf98db0ece9a247c6bbb5 ? html4/case-sensitive-008.htm 8cf1bfbdf626dc47463dec1641223a3070ad05bb ? xhtml1/case-sensitive-008.xht 8cf1bfbdf626dc47463dec1641223a3070ad05bb ? @@ -9011,7 +9012,7 @@ html4/content-attr-001.htm a0172362ab7646f9bc95c6a72f8e802b0be15661 ? xhtml1/content-attr-001.xht a0172362ab7646f9bc95c6a72f8e802b0be15661 ? html4/content-attr-002.htm 3e946aa0feecdff07e2b1eb05d7ac1035d5bd7e7 ? xhtml1/content-attr-002.xht 3e946aa0feecdff07e2b1eb05d7ac1035d5bd7e7 ? -html4/content-attr-case-001.htm 931b842f10ec40ae8fbd9b273ae7247d1596ff48 ? +html4/content-attr-case-001.htm 96aca06767439e52a29914a3e62c5fb48ca7b051 ? xhtml1/content-attr-case-002.xht 8f51b48e369494bfb30ac28c19acfd57462413e2 ? html4/content-auto-reset-001.htm 073f16d82ce968e2b8068bfa814e1766852b4f2b ? xhtml1/content-auto-reset-001.xht 073f16d82ce968e2b8068bfa814e1766852b4f2b ? @@ -12585,7 +12586,7 @@ html4/html-attribute-028.htm 1ce9f6f95b73a4ccf256bec09117276809d48ade ? xhtml1/html-attribute-028.xht 1ce9f6f95b73a4ccf256bec09117276809d48ade ? html4/html-attribute-029.htm f998397c8034e6c1736eb7ddec232c366a1c94a5 ? xhtml1/html-attribute-029.xht f998397c8034e6c1736eb7ddec232c366a1c94a5 ? -html4/html-case-sensitivity-001.htm c1084fb637732e0f38c98f3cf8d44ed7615b50d3 ? +html4/html-case-sensitivity-001.htm 61c5f087d9286aac1c28ebd292b4d741f26ee594 ? html4/html-precedence-001.htm 3573513b879877aac04434ec6e5b093269bc4524 ? xhtml1/html-precedence-001.xht 3573513b879877aac04434ec6e5b093269bc4524 ? html4/html-precedence-002.htm 0b46ebed4702a22efb288095cbdf9b70b775abdb ? @@ -13034,7 +13035,7 @@ html4/keywords-000.htm 357b9fbfad6de9a3954d1b74132546939b2ab969 ? xhtml1/keywords-000.xht 357b9fbfad6de9a3954d1b74132546939b2ab969 ? html4/keywords-001.htm 13c37f2ae37cf36c4c63e048fda5b7e634131c79 ? xhtml1/keywords-001.xht 13c37f2ae37cf36c4c63e048fda5b7e634131c79 ? -html4/lang-pseudoclass-001.htm 2602376b05b0a04bfac482b35a7255b115f32cae ? +html4/lang-pseudoclass-001.htm ed144842c4ac153c32ec42841a3670ec4f867836 ? xhtml1/lang-pseudoclass-002.xht 809974aadd059c23c700cfcc3511f3600d18d104 ? html4/lang-selector-001.htm 2cc3bcad14d2ae93e81330e70b355dc2d29fa55f ? xhtml1/lang-selector-001.xht 2cc3bcad14d2ae93e81330e70b355dc2d29fa55f ? @@ -16314,7 +16315,8 @@ html4/overflow-applies-to-014.htm 9dff4df7af0a5fd748bbf49d98ee9a49ddaf9441 ? xhtml1/overflow-applies-to-014.xht 9dff4df7af0a5fd748bbf49d98ee9a49ddaf9441 ? html4/overflow-applies-to-015.htm 442f3d24c0384de7ea16ff5eb82f46abcb88c8fb ? xhtml1/overflow-applies-to-015.xht 442f3d24c0384de7ea16ff5eb82f46abcb88c8fb ? -html4/overflow-html-body-001.htm fe1965ac899fd53ea219d93a81049663904e20d2 ? +html4/overflow-html-body-001.htm b796f106ecbaf8f3ec883d428c6755e8631f1302 ? +xhtml1/overflow-html-body-001.xht b796f106ecbaf8f3ec883d428c6755e8631f1302 ? html4/overflow-parent-001.htm 5e5665c2ad7fbd835b709512267113fbdb6b67fc ? xhtml1/overflow-parent-001.xht 5e5665c2ad7fbd835b709512267113fbdb6b67fc ? html4/overflow-print-001.htm 6084ae9d52fdc1d051372ae928be2d0fc0ece147 ? @@ -18708,10 +18710,14 @@ html4/table-height-algorithm-032.htm 4067a0970a6c859e9836ea36d8bed04790e01c29 ? xhtml1/table-height-algorithm-032.xht 4067a0970a6c859e9836ea36d8bed04790e01c29 ? html4/table-in-inline-001.htm 5736ce35d142b5b5210309b68e33956e7da02d39 ? xhtml1/table-in-inline-001.xht 5736ce35d142b5b5210309b68e33956e7da02d39 ? -html4/table-intro-example-001.htm 5352d59ceb6c3d96b6e080d940d77936081e224e ? -html4/table-intro-example-002.htm bd69aaf91ac4bdf7dcab118078b9936bcd9a7bc1 ? -html4/table-intro-example-003.htm 3033c9166cc42fe6bada3d42b925685eda3c4f78 ? -html4/table-intro-example-004.htm 5729584dcaca25c6eefbb282fd41a6fc58f6b348 ? +html4/table-intro-example-001.htm d3ec6d14d1ed132e0f7395c85d9803967a1aa6cb ? +xhtml1/table-intro-example-001.xht d3ec6d14d1ed132e0f7395c85d9803967a1aa6cb ? +html4/table-intro-example-002.htm 8702bfd06511a290586cb2565d9afd6227dbf1b3 ? +xhtml1/table-intro-example-002.xht 8702bfd06511a290586cb2565d9afd6227dbf1b3 ? +html4/table-intro-example-003.htm a748de6ac35b1b954e607023905ff851605c5412 ? +xhtml1/table-intro-example-003.xht a748de6ac35b1b954e607023905ff851605c5412 ? +html4/table-intro-example-004.htm 330287e4994e9b26e19f3d1b63a98e272fbe9506 ? +xhtml1/table-intro-example-004.xht 330287e4994e9b26e19f3d1b63a98e272fbe9506 ? html4/table-layer-transparency-001.htm 11f26cdc88668b70c3c86bd93e5bc970799e8643 ? xhtml1/table-layer-transparency-001.xht 11f26cdc88668b70c3c86bd93e5bc970799e8643 ? html4/table-layer-transparency-002.htm 825f6a7c7e4e9e7a130adf95489923cc130981c1 ? diff --git a/tests/wpt/css-tests/css21_dev/testinfo.data b/tests/wpt/css-tests/css21_dev/testinfo.data index 4fc735f9ffe..6d9691e0b26 100644 --- a/tests/wpt/css-tests/css21_dev/testinfo.data +++ b/tests/wpt/css-tests/css21_dev/testinfo.data @@ -27,7 +27,7 @@ abs-pos-non-replaced-vlr-051 reference/abs-pos-non-replaced-vlr-003-ref absolute abs-pos-non-replaced-vlr-053 reference/abs-pos-non-replaced-vrl-004-ref absolutely positioned non-replaced element - 'direction: ltr' and 'left' is 'auto', 'width' and 'right' are not 'auto' ahem,image http://www.w3.org/TR/css-writing-modes-3/#vertical-layout,http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width 9c08e776675637130948bd4b6931af65719d29ff `Gérard Talbot`<http://www.gtalbot.org/BrowserBugsSection/css21testsuite/> When 'direction' is 'ltr' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'. abs-pos-non-replaced-vlr-055 reference/abs-pos-non-replaced-vlr-007-ref absolutely positioned non-replaced element - 'direction: ltr' and 'top' is 'auto' and 'height' and 'bottom' are not 'auto' ahem,image http://www.w3.org/TR/css-writing-modes-3/#vertical-layout,http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width e6152f2732060736d14b5a78a302e0bc8bbe793f `Gérard Talbot`<http://www.gtalbot.org/BrowserBugsSection/css21testsuite/> When 'direction' is 'ltr' and 'top' is 'auto' and 'height' and 'bottom' are not 'auto', then solve for 'top'. abs-pos-non-replaced-vlr-057 reference/abs-pos-non-replaced-vlr-003-ref absolutely positioned non-replaced element - 'direction: rtl' and 'top' is 'auto' and 'height' and 'bottom' are not 'auto' ahem,image http://www.w3.org/TR/css-writing-modes-3/#vertical-layout,http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width 512802c29f43864633b5ba4997e3435e77dfa780 `Gérard Talbot`<http://www.gtalbot.org/BrowserBugsSection/css21testsuite/> When 'direction' is 'rtl' and 'top' is 'auto' and 'height' and 'bottom' are not 'auto', then solve for 'top'. -abs-pos-non-replaced-vlr-059 reference/abs-pos-non-replaced-vrl-004-ref absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left' ahem,image http://www.w3.org/TR/css-writing-modes-3/#vertical-layout,http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width 4a081025215343dc43c94a9afbecb4f8708d78c0 `Gérard Talbot`<http://www.gtalbot.org/BrowserBugsSection/css21testsuite/> When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left', then solve for 'left'. +abs-pos-non-replaced-vlr-059 reference/abs-pos-non-replaced-vrl-004-ref absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto' ahem,image http://www.w3.org/TR/css-writing-modes-3/#vertical-layout,http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width 87d3f8ddd1ad9152e5654825a8774a88494ade9f `Gérard Talbot`<http://www.gtalbot.org/BrowserBugsSection/css21testsuite/> When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'. abs-pos-non-replaced-vlr-061 reference/abs-pos-non-replaced-vlr-007-ref absolutely positioned non-replaced element - 'direction: rtl' and 'top' is 'auto' and 'height' and 'bottom' are not 'auto' ahem,image http://www.w3.org/TR/css-writing-modes-3/#vertical-layout,http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width d5d7da3ef86e0bc59f71598418b084d23a7fc5e2 `Gérard Talbot`<http://www.gtalbot.org/BrowserBugsSection/css21testsuite/> When 'direction' is 'rtl' and 'top' is 'auto' and 'height' and 'bottom' are not 'auto', then solve for 'top'. abs-pos-non-replaced-vlr-063 reference/abs-pos-non-replaced-vlr-003-ref absolutely positioned non-replaced element - 'direction: ltr' and 'height' is 'auto' and 'top' and 'bottom' are not 'auto' ahem,image http://www.w3.org/TR/css-writing-modes-3/#vertical-layout,http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width e44b75458e48fc677468fad2f6b97bfb27a04358 `Gérard Talbot`<http://www.gtalbot.org/BrowserBugsSection/css21testsuite/> When 'direction' is 'ltr' and 'height' is 'auto' and 'top' and 'bottom' are not 'auto', then solve for 'height'. abs-pos-non-replaced-vlr-065 reference/abs-pos-non-replaced-vrl-004-ref absolutely positioned non-replaced element - 'direction: ltr' and 'width' is 'auto', 'left' and 'right' are not 'auto' ahem,image http://www.w3.org/TR/css-writing-modes-3/#vertical-layout,http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width 7e931945d698024af484361d702fc1942f4c93d7 `Gérard Talbot`<http://www.gtalbot.org/BrowserBugsSection/css21testsuite/> When 'direction' is 'ltr' and 'left', 'width' is 'auto', 'left' and 'right' are not 'auto', then solve for 'width'. @@ -139,7 +139,7 @@ abs-pos-non-replaced-vrl-050 reference/abs-pos-non-replaced-vrl-002-ref absolute abs-pos-non-replaced-vrl-052 reference/abs-pos-non-replaced-vrl-004-ref absolutely positioned non-replaced element - 'direction: ltr' and 'left' is 'auto', 'width' and 'right' are not 'auto' ahem,image http://www.w3.org/TR/css-writing-modes-3/#vertical-layout,http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width 6d08a883aabdabe4db83d6e6a8b86508aa7b7a53 `Gérard Talbot`<http://www.gtalbot.org/BrowserBugsSection/css21testsuite/> When 'direction' is 'ltr' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'. abs-pos-non-replaced-vrl-054 reference/abs-pos-non-replaced-vrl-006-ref absolutely positioned non-replaced element - 'direction: ltr' and 'top' is 'auto' and 'height' and 'bottom' are not 'auto' ahem,image http://www.w3.org/TR/css-writing-modes-3/#vertical-layout,http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width 7ef86efb0eef5f8b43a82658c4cde941fa885c55 `Gérard Talbot`<http://www.gtalbot.org/BrowserBugsSection/css21testsuite/> When 'direction' is 'ltr' and 'top' is 'auto' and 'height' and 'bottom' are not 'auto', then solve for 'top'. abs-pos-non-replaced-vrl-056 reference/abs-pos-non-replaced-vrl-002-ref absolutely positioned non-replaced element - 'direction: rtl' and 'top' is 'auto' and 'height' and 'bottom' are not 'auto' ahem,image http://www.w3.org/TR/css-writing-modes-3/#vertical-layout,http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width 0684b6dac50f2a8a6af6e1e1e43cd9ad96e6607e `Gérard Talbot`<http://www.gtalbot.org/BrowserBugsSection/css21testsuite/> When 'direction' is 'rtl' and 'top' is 'auto' and 'height' and 'bottom' are not 'auto', then solve for 'top'. -abs-pos-non-replaced-vrl-058 reference/abs-pos-non-replaced-vrl-004-ref absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left' ahem,image http://www.w3.org/TR/css-writing-modes-3/#vertical-layout,http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width 5ed1484c71061d9fdd91d13b776f19b73f7d1853 `Gérard Talbot`<http://www.gtalbot.org/BrowserBugsSection/css21testsuite/> When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left', then solve for 'left'. +abs-pos-non-replaced-vrl-058 reference/abs-pos-non-replaced-vrl-004-ref absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto' ahem,image http://www.w3.org/TR/css-writing-modes-3/#vertical-layout,http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width 37684ca4836356475eb9e041a2bd629ff84f4ec3 `Gérard Talbot`<http://www.gtalbot.org/BrowserBugsSection/css21testsuite/> When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'. abs-pos-non-replaced-vrl-060 reference/abs-pos-non-replaced-vrl-006-ref absolutely positioned non-replaced element - 'direction: rtl' and 'top' is 'auto' and 'height' and 'bottom' are not 'auto' ahem,image http://www.w3.org/TR/css-writing-modes-3/#vertical-layout,http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width f125ea87971858a2689e498e6c6e302319fb346b `Gérard Talbot`<http://www.gtalbot.org/BrowserBugsSection/css21testsuite/> When 'direction' is 'rtl' and 'top' is 'auto' and 'height' and 'bottom' are not 'auto', then solve for 'top'. abs-pos-non-replaced-vrl-062 reference/abs-pos-non-replaced-vrl-002-ref absolutely positioned non-replaced element - 'direction: ltr' and 'height' is 'auto' and 'top' and 'bottom' are not 'auto' ahem,image http://www.w3.org/TR/css-writing-modes-3/#vertical-layout,http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width 3a89ef33bd3f993b23dc0dc1a28612218ad0beb9 `Gérard Talbot`<http://www.gtalbot.org/BrowserBugsSection/css21testsuite/> When 'direction' is 'ltr' and 'height' is 'auto' and 'top' and 'bottom' are not 'auto', then solve for 'height'. abs-pos-non-replaced-vrl-064 reference/abs-pos-non-replaced-vrl-004-ref absolutely positioned non-replaced element - 'direction: ltr' and 'width' is 'auto', 'left' and 'right' are not 'auto' ahem,image http://www.w3.org/TR/css-writing-modes-3/#vertical-layout,http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width 575dcb96feed2e570ac0e03d1abb0f2af1fe4644 `Gérard Talbot`<http://www.gtalbot.org/BrowserBugsSection/css21testsuite/> When 'direction' is 'ltr' and 'width' is 'auto', 'left' and 'right' are not 'auto', then solve for 'width'. @@ -492,7 +492,7 @@ at-charset-009 at-charset-001,reference/at-charset-001-ref @charset over referri at-charset-010 at-charset-001,reference/at-charset-001-ref Link charset attribute over referring document's codepage (set) http://www.w3.org/TR/CSS21/syndata.html#charset b39dee72a51df5e049fe0001bdbca19af3d01137 `Microsoft`<http://www.microsoft.com/> The stylesheet's encoding is determined by the link element's charset attribute and not the referring document's code page. at-charset-011 at-charset-001,reference/at-charset-001-ref Link charset attribute over referring document's codepage (not set) http://www.w3.org/TR/CSS21/syndata.html#charset bb803f4f1bbf76e897491176102f107cbd4bb9ec `Microsoft`<http://www.microsoft.com/> The stylesheet's encoding is determined by the link element's charset attribute and not the referring document's code page. at-charset-012 at-charset-001,reference/at-charset-001-ref Stylesheet encoding via the referring document's encoding (set) http://www.w3.org/TR/CSS21/syndata.html#charset a9023c2b0a8df17f3bce2a54374155da0b0aebf0 `Microsoft`<http://www.microsoft.com/> The stylesheet's encoding is determined by the set encoding of the referring document. -at-charset-013 Stylesheet encoding via the referring document's encoding (user set) HTMLonly,interact http://www.w3.org/TR/CSS21/syndata.html#charset 145d211ea37c74e5394d6b6f93328fe536f21a1d `Microsoft`<http://www.microsoft.com/> The stylesheet's encoding is determined by the user set referring document's encoding. +at-charset-013 Stylesheet encoding via the referring document's encoding (user set) HTMLonly,interact http://www.w3.org/TR/CSS21/syndata.html#charset 38743117b70c5990988feb2fd2569fa6927c0d7a `Microsoft`<http://www.microsoft.com/> The stylesheet's encoding is determined by the user set referring document's encoding. at-charset-014 at-charset-001,reference/at-charset-001-ref Matching BOM and @charset (utf-8) http://www.w3.org/TR/CSS21/syndata.html#charset a1a3c6216ea92a07ef16e1fb147fd8432ff36c3d `Microsoft`<http://www.microsoft.com/> The encoding is correctly interpreted from the matched BOM and @charset. at-charset-015 at-charset-001,reference/at-charset-001-ref Matching BOM and @charset (utf-16 LE) http://www.w3.org/TR/CSS21/syndata.html#charset 2e3f28c515a9921c50d55b8d4a59b22c9fe0c686 `Microsoft`<http://www.microsoft.com/> The encoding is correctly interpreted from the matched BOM and @charset. at-charset-016 at-charset-001,reference/at-charset-001-ref Matching BOM and @charset (utf-16 BE) http://www.w3.org/TR/CSS21/syndata.html#charset 491813e6ed6b36b76b0a486476bc2b7024615486 `Microsoft`<http://www.microsoft.com/> The encoding is correctly interpreted from the matched BOM and @charset. @@ -602,12 +602,12 @@ attribute-value-selector-001 reference/attribute-value-selector-001-ref Attribut attribute-value-selector-002 reference/attribute-value-selector-001-ref Attribute selector matching value in hyphenated list http://www.w3.org/TR/CSS21/selector.html#attribute-selectors 50f278c723eeaa566495f8a5f0d9224599d49b8f `Microsoft`<http://www.microsoft.com/> Selector matches attributes with specific value in a hyphen-separated list. attribute-value-selector-003 reference/attribute-value-selector-001-ref Attribute selector matching value in list http://www.w3.org/TR/CSS21/selector.html#attribute-selectors 508036fcffcc15830d5fdff9d40e8e7c0c1ccda3 `Microsoft`<http://www.microsoft.com/> Selector matches attribute with specific value in a space-separated list. attribute-value-selector-004 reference/no-red-filler-text-ref Numeric attributes invalid http://www.w3.org/TR/CSS21/selector.html#attribute-selectors dfb8215a980f61f868127601e02f621b5d8de9a7 `Microsoft`<http://www.microsoft.com/> Attributes cannot begin with numerals. -attribute-value-selector-005 reference/filler-text-below-green Case sensitivity of attributes and attribute values in HTML 4.01 HTMLonly http://www.w3.org/TR/CSS21/selector.html#attribute-selectors 4e99118f4f08eb0e71b36b24b986cbe9e1ad15fe `Microsoft`<http://www.microsoft.com/> HTML 4.01 attribute names are not case sensitive. +attribute-value-selector-005 reference/filler-text-below-green Case sensitivity of attributes and attribute values in HTML 4.01 HTMLonly http://www.w3.org/TR/CSS21/selector.html#attribute-selectors 98fe9d0bad9fb7ca59e360a6c9c33042e5d451ea `Microsoft`<http://www.microsoft.com/> HTML 4.01 attribute names are not case sensitive. attribute-value-selector-006 reference/filler-text-below-green Multiple and repeating attributes http://www.w3.org/TR/CSS21/selector.html#attribute-selectors 1f42c36cb8f99e36982f9ebbec59c63967c711c1 `Microsoft`<http://www.microsoft.com/> Multiple attribute selectors can be used to refer to several attributes of an element, or even several times to the same attribute. -attribute-value-selector-007 lang attribute selector - att=val HTMLonly http://www.w3.org/TR/CSS21/selector.html#attribute-selectors b144c51a0bda8a4416ab50f1cff0f77044315094 `Richard Ishida`<mailto:ishida@w3.org>,`Eira Monstad, Opera Software ASA`<mailto:public-testsuites@opera.com> lang attribute selector with att=val in HTML should not be case sensitive, and should only match when att is exactly val +attribute-value-selector-007 lang attribute selector - att=val HTMLonly http://www.w3.org/TR/CSS21/selector.html#attribute-selectors c66ad246bf6f8d5b5f16e330d968629d22c29ec1 `Richard Ishida`<mailto:ishida@w3.org>,`Eira Monstad, Opera Software ASA`<mailto:public-testsuites@opera.com> lang attribute selector with att=val in HTML should not be case sensitive, and should only match when att is exactly val attribute-value-selector-008 attribute selector - att=val nonHTML http://www.w3.org/TR/CSS21/selector.html#attribute-selectors df9f94901759df9b76cf40d97ca1bc87bd5ef407 `Richard Ishida`<mailto:ishida@w3.org>,`Eira Monstad, Opera Software ASA`<mailto:public-testsuites@opera.com> attribute selector with att=val in XHTML should be case sensitive, and should only match when att is exactly val attribute-value-selector-009 lang attribute selector - att |= val nonHTML http://www.w3.org/TR/CSS21/selector.html#attribute-selectors 97d442f5c1c5b7c883684e956a3a53964d18db05 `Richard Ishida`<mailto:ishida@w3.org>,`Eira Monstad, Opera Software ASA`<mailto:public-testsuites@opera.com> lang attribute selector with 'att |= val' in XHTML should be case sensitive, and match hyphen-separated list -attribute-value-selector-010 lang attribute selector - att |= val HTMLonly http://www.w3.org/TR/CSS21/selector.html#attribute-selectors 6610e1761c91638f236f6d09e5fa3cd1ec9bc73f `Richard Ishida`<mailto:ishida@w3.org>,`Eira Monstad, Opera Software ASA`<mailto:public-testsuites@opera.com> lang attribute selector with 'att |= val' in HTML should not be case sensitive, and match hyphen-separated list +attribute-value-selector-010 lang attribute selector - att |= val HTMLonly http://www.w3.org/TR/CSS21/selector.html#attribute-selectors 8e5e682c49b5702b310e7c58e4a2b4caae5438c1 `Richard Ishida`<mailto:ishida@w3.org>,`Eira Monstad, Opera Software ASA`<mailto:public-testsuites@opera.com> lang attribute selector with 'att |= val' in HTML should not be case sensitive, and match hyphen-separated list background-001 reference/background-001-ref Background with color http://www.w3.org/TR/CSS21/colors.html#propdef-background,http://www.w3.org/TR/CSS21/colors.html#background-properties,http://www.w3.org/TR/css3-background/#the-background 3dd2f2ebcf82520953f31d00f243c309e9b005f9 `Microsoft`<http://www.microsoft.com/> Background with color only sets the background of the element to the color specified. background-002 reference/background-001-ref Background with an image image http://www.w3.org/TR/CSS21/colors.html#propdef-background,http://www.w3.org/TR/CSS21/colors.html#background-properties,http://www.w3.org/TR/css3-background/#the-background 42b9cd53f06b23fbd5efb5774fb90cf6937cece9 `Microsoft`<http://www.microsoft.com/> Background with image only sets the background of the element to the image specified. background-003 reference/background-003-ref Background with repeat image http://www.w3.org/TR/CSS21/colors.html#propdef-background,http://www.w3.org/TR/CSS21/colors.html#background-properties,http://www.w3.org/TR/css3-background/#the-background-repeat 078b26cedc73d69fe8763d4a736bce0c87ad202b `Microsoft`<http://www.microsoft.com/> Background shorthand with repeat only sets its background-repeat subproperty. In such case, the other background subproperties are set to their initial values: 'background-image' is set to 'none', 'background-color' is set to transparent, 'background-attachment' is set to 'scroll', 'background-position' is set to '0% 0%'. @@ -1389,7 +1389,7 @@ background-table-003 background-repeat on table rows http://www.w3.org/TR/CSS2 background-transparency-001 Background initial transparency http://www.w3.org/TR/CSS21/colors.html#background-properties 736b083d39ed02d90e26ecf8cfeaada2cc443b70 `Microsoft`<http://www.microsoft.com/> Background of the parent shines through the child if nothing is over it. bad-selector-001 reference/no-red-filler-text-ref Parsing of bad selectors invalid http://www.w3.org/TR/CSS21/syndata.html#rule-sets 1d45e37ea036e7e72fcf9fc064a1eb064d2447b4 `Microsoft`<http://www.microsoft.com/> Declarations with bad selectors are ignored. basic-css-table-001 CSS table display types http://www.w3.org/TR/CSS21/tables.html#table-display a76fad935d54e5eded6be37d1f4d04ddc497d263 `Microsoft`<http://www.microsoft.com/> CSS display table types are supported. -basic-html-table-001 HTML table with every table element HTMLonly http://www.w3.org/TR/CSS21/tables.html#table-display,http://www.w3.org/TR/REC-html40/struct/tables.html#h-11.2 51ea5055ee5e8fbe0dcfed92e73ce5218baf89fa `Microsoft`<http://www.microsoft.com/> HTML table elements are supported. +basic-html-table-001 HTML table with every table element http://www.w3.org/TR/CSS21/tables.html#table-display,http://www.w3.org/TR/REC-html40/struct/tables.html#h-11.2 2d2335714010abd404725d488c7a5ffb44b15c7c `Microsoft`<http://www.microsoft.com/> HTML table elements are supported. before-after-001 reference/no-red-on-blank-page-ref Before, after applies to same selector invalid http://www.w3.org/TR/CSS21/generate.html#before-after-content bc2221b20dfc6597b1d3a72c2b6ce828e4637e6e `Microsoft`<http://www.microsoft.com/> Multiple pseudo-elements cannot be placed on the same selector. before-after-002 Before, after is included in formatting changes http://www.w3.org/TR/CSS21/generate.html#before-after-content e508222d00574adb1450511af59f2d17b588e2b5 `Microsoft`<http://www.microsoft.com/> Generated content is included in any formatting changes made to an element. before-after-011 reference/before-after-011-ref CSS table model and generated content: Basics http://www.w3.org/TR/CSS21/generate.html#content 4d711fe352bece2498662d33b1072358131808c1 `Ian Hickson`<mailto:ian@hixie.ch> @@ -3965,7 +3965,7 @@ case-sensitive-001 reference/ref-green-background Case-sensitivity of At-rules ( case-sensitive-003 reference/case-sensitive-003-ref Case-sensitivity of pseudo-classes and pseudo-elements http://www.w3.org/TR/CSS21/syndata.html#characters 1e07287509efaccf3f3adfe46d062f0ea27a0aeb `Elika J. Etemad`<http://fantasai.inkedblade.net/> Pseudo-class and pseudo-element names are ASCII case-insensitive. case-sensitive-004 reference/case-sensitive-003-ref Case-sensitivity of :lang() arguments http://www.w3.org/TR/CSS21/syndata.html#characters 723fdbbe5941d318118e86cf5ae161312de476d2 `Elika J. Etemad`<http://fantasai.inkedblade.net/> The argument to :lang() is ASCII case-insensitive. case-sensitive-005 reference/case-sensitive-005-ref Case-sensitivity of counter names http://www.w3.org/TR/CSS21/syndata.html#characters dfd0240ea392700c15e32a28eec725b6db820f94 `Elika J. Etemad`<http://fantasai.inkedblade.net/> Counter names are case-sensitive. -case-sensitive-006 reference/filler-text-below-green Case sensitivity with element selectors HTMLonly http://www.w3.org/TR/CSS21/syndata.html#characters 22e1a8c5e8284dd76b4937bb74102888636a7325 `Microsoft`<http://www.microsoft.com/> Element selectors are case-insensitive in HTML. +case-sensitive-006 reference/filler-text-below-green Case sensitivity with element selectors HTMLonly http://www.w3.org/TR/CSS21/syndata.html#characters 457235f5ac6fac023fd91e151fd6aac15d688db4 `Microsoft`<http://www.microsoft.com/> Element selectors are case-insensitive in HTML. case-sensitive-007 reference/no-red-filler-text-ref Case sensitivity with element selectors nonHTML http://www.w3.org/TR/CSS21/syndata.html#characters 07b1170801ad9349fabaf98db0ece9a247c6bbb5 `Microsoft`<http://www.microsoft.com/> Element selectors are case-sensitive in XHTML and XML. case-sensitive-008 Case sensitive attributes http://www.w3.org/TR/CSS21/syndata.html#characters 8cf1bfbdf626dc47463dec1641223a3070ad05bb `Microsoft`<http://www.microsoft.com/> CSS style sheets parts that are not under the control of CSS are case dependant on the language being used. character-encoding-001 html utf8, css http iso1 http http://www.w3.org/TR/CSS21/syndata.html#charset fb6776fd6b89a215898ffd2f8a2939bca234fd6d `Richard Ishida`<http://rishida.net> The user agent respects the encoding of a css stylesheet declared in HTTP. @@ -4524,7 +4524,7 @@ content-178 Generated Content and :hover interact http://www.w3.org/TR/CSS21/ge content-applies-to-001 Content property works only with :before and :after http://www.w3.org/TR/CSS21/generate.html#content 0a7b1ab9d36c05a3a846ddbb83630d2c7d472446 `Microsoft`<http://www.microsoft.com/> Content property only works in conjunction with the :before and :after pseudo-elements. content-attr-001 Content property missing attr(x) http://www.w3.org/TR/CSS21/generate.html#content a0172362ab7646f9bc95c6a72f8e802b0be15661 `Microsoft`<http://www.microsoft.com/> If attribute (x) does not exist then an empty string is returned for the attr(x) value. content-attr-002 Generated Content from Attributes http://www.w3.org/TR/CSS21/generate.html#content 3e946aa0feecdff07e2b1eb05d7ac1035d5bd7e7 `Ian Hickson`<mailto:ian@hixie.ch> -content-attr-case-001 Content property attr(x) case sensitivity HTMLonly http://www.w3.org/TR/CSS21/generate.html#content 931b842f10ec40ae8fbd9b273ae7247d1596ff48 `Microsoft`<http://www.microsoft.com/> The attr(x) function selects the attribute even when case does not match. +content-attr-case-001 Content property attr(x) case sensitivity HTMLonly http://www.w3.org/TR/CSS21/generate.html#content 96aca06767439e52a29914a3e62c5fb48ca7b051 `Microsoft`<http://www.microsoft.com/> The attr(x) function selects the attribute even when case does not match. content-attr-case-002 content attr(x) case sensitivity nonHTML http://www.w3.org/TR/CSS21/generate.html#content 8f51b48e369494bfb30ac28c19acfd57462413e2 `Microsoft`<http://www.microsoft.com/> Verify in XHTML that attr(x) does not select the attribute when the case does not match content-auto-reset-001 Content property on out of scope counter http://www.w3.org/TR/CSS21/generate.html#content 073f16d82ce968e2b8068bfa814e1766852b4f2b `Microsoft`<http://www.microsoft.com/> If content refers to a counter that is not in scope, it is assumed that a counter-reset has occurred and the counter is reset to zero. content-counter-000 reference/content-counter-000-ref content: counter(c) http://www.w3.org/TR/CSS21/generate.html#propdef-content,http://www.w3.org/TR/CSS21/syndata.html#counter,http://www.w3.org/TR/CSS21/generate.html#counter-styles 11a2ca2e1625c9268277f0ae67b69128862f171f `L. David Baron`<http://dbaron.org/> @@ -6314,7 +6314,7 @@ html-attribute-025 Attribute 'rows' vs CSS 'height' specificity http://www.w3. html-attribute-027 Attribute 'size' vs CSS 'height' specificity http://www.w3.org/TR/CSS21/cascade.html#preshint 2ff211e36163503f656b0159564c0d65b733683a `Microsoft`<http://www.microsoft.com/> Attribute 'size' has a specificity of zero and is overridden by CSS. html-attribute-028 reference/filler-text-below-green Attribute 'text' vs. CSS 'color' specificity http://www.w3.org/TR/CSS21/cascade.html#preshint 1ce9f6f95b73a4ccf256bec09117276809d48ade `Microsoft`<http://www.microsoft.com/> Attribute 'text' has a specificity of zero and is overridden by CSS. html-attribute-029 Attribute 'vlink' vs. CSS ':visited' specificity history,interact http://www.w3.org/TR/CSS21/cascade.html#preshint f998397c8034e6c1736eb7ddec232c366a1c94a5 `Microsoft`<http://www.microsoft.com/> Attribute 'vlink' has a specificity of zero and is overridden by CSS. -html-case-sensitivity-001 reference/filler-text-below-green HTML case sensitivity - Simple selectors HTMLonly http://www.w3.org/TR/CSS21/selector.html#attribute-selectors c1084fb637732e0f38c98f3cf8d44ed7615b50d3 `Microsoft`<http://www.microsoft.com/> Simple selectors are not case sensitive in HTML. +html-case-sensitivity-001 reference/filler-text-below-green HTML case sensitivity - Simple selectors HTMLonly http://www.w3.org/TR/CSS21/selector.html#attribute-selectors 61c5f087d9286aac1c28ebd292b4d741f26ee594 `Microsoft`<http://www.microsoft.com/> Simple selectors are not case sensitive in HTML. html-precedence-001 reference/filler-text-below-green Element selector precedence http://www.w3.org/TR/CSS21/cascade.html#preshint 3573513b879877aac04434ec6e5b093269bc4524 `Microsoft`<http://www.microsoft.com/> The 'color' attribute has a specificity equal to 0 which be overridden by subsequent style sheet rules. html-precedence-002 Universal selector precedence http://www.w3.org/TR/CSS21/cascade.html 0b46ebed4702a22efb288095cbdf9b70b775abdb `Microsoft`<http://www.microsoft.com/> The universal selector and the 'color' attribute have the same specificity. The universal selector is applied since CSS takes precedence. html-precedence-003 User style sheet precedence userstyle http://www.w3.org/TR/CSS21/cascade.html b507f02f7de40704408f6fb0730e3c9498592b07 `Microsoft`<http://www.microsoft.com/> The 'font' element's 'color' attribute trumps the user stylesheet's universal selector. They have the same specificity but the font element is a virtual author rule. @@ -6546,7 +6546,7 @@ invalid-decl-at-rule-001 reference/filler-text-below-green Parsing invalid decla invalid-decl-at-rule-002 reference/filler-text-below-green Parsing invalid declarations in at-rules where valid declaration follows invalid rule invalid http://www.w3.org/TR/CSS21/syndata.html#parsing-errors 18333853d45725f63cfc9ac8c77ccf8019fbd6a0 `Microsoft`<http://www.microsoft.com/> Invalid declarations at the beginning of at-rules are ignored while the remaining following valid declarations are applied. keywords-000 reference/ref-green-background Keywords v. Strings (background) http://www.w3.org/TR/CSS21/syndata.html#keywords 357b9fbfad6de9a3954d1b74132546939b2ab969 `L. David Baron`<http://dbaron.org/> keywords-001 reference/keywords-001-ref Keywords v. Strings (width) http://www.w3.org/TR/CSS21/syndata.html#keywords 13c37f2ae37cf36c4c63e048fda5b7e634131c79 `L. David Baron`<http://dbaron.org/> -lang-pseudoclass-001 :lang pseudoclass HTMLonly http://www.w3.org/TR/CSS21/selector.html#lang 2602376b05b0a04bfac482b35a7255b115f32cae `Richard Ishida`<mailto:ishida@w3.org>,`Eira Monstad, Opera Software ASA`<mailto:public-testsuites@opera.com> :lang pseudoclass in HTML should not be case-sensitive, and match a substring +lang-pseudoclass-001 :lang pseudoclass HTMLonly http://www.w3.org/TR/CSS21/selector.html#lang ed144842c4ac153c32ec42841a3670ec4f867836 `Richard Ishida`<mailto:ishida@w3.org>,`Eira Monstad, Opera Software ASA`<mailto:public-testsuites@opera.com> :lang pseudoclass in HTML should not be case-sensitive, and match a substring lang-pseudoclass-002 :lang pseudoclass nonHTML http://www.w3.org/TR/CSS21/selector.html#lang 809974aadd059c23c700cfcc3511f3600d18d104 `Richard Ishida`<mailto:ishida@w3.org>,`Eira Monstad, Opera Software ASA`<mailto:public-testsuites@opera.com> :lang pseudoclass in XHTML should be case sensitive, and match a substring lang-selector-001 reference/lang-selector-001-ref Selectors :lang pseudo-class http://www.w3.org/TR/CSS21/selector.html#lang 2cc3bcad14d2ae93e81330e70b355dc2d29fa55f `Microsoft`<http://www.microsoft.com/> The :lang pseudo-class selector matches any element with a matching lang attribute. lang-selector-002 reference/no-red-filler-text-ref Empty :lang selector invalid http://www.w3.org/TR/CSS21/selector.html#lang b7b03b42293d2980dc7fe0c42c76fe4e42cf7b3f `Microsoft`<http://www.microsoft.com/> Language identifier cannot be empty. @@ -8187,7 +8187,7 @@ overflow-applies-to-012 reference/ref-if-there-is-no-red overflow applied to ele overflow-applies-to-013 reference/ref-if-there-is-no-red overflow applied to elements with 'display' set to 'table' ahem http://www.w3.org/TR/CSS21/visufx.html#propdef-overflow,http://www.w3.org/TR/CSS21/visufx.html#overflow f32853446be0649bcbf2ad5d370f85cf9f1a57fd `Microsoft`<http://www.microsoft.com/> The 'overflow' property applies to elements with 'display' set to 'table'. overflow-applies-to-014 reference/ref-if-there-is-no-red overflow applied to elements with 'display' set to 'inline-table' ahem http://www.w3.org/TR/CSS21/visufx.html#propdef-overflow,http://www.w3.org/TR/CSS21/visufx.html#overflow 9dff4df7af0a5fd748bbf49d98ee9a49ddaf9441 `Microsoft`<http://www.microsoft.com/> The 'overflow' property applies to elements with 'display' set to 'inline-table'. overflow-applies-to-015 reference/ref-if-there-is-no-red overflow applied to elements with 'display' set to 'table-caption' ahem http://www.w3.org/TR/CSS21/visufx.html#propdef-overflow,http://www.w3.org/TR/CSS21/visufx.html#overflow 442f3d24c0384de7ea16ff5eb82f46abcb88c8fb `Microsoft`<http://www.microsoft.com/> The 'overflow' property applies to elements with 'display' set to 'table-caption'. -overflow-html-body-001 Overflow on body propagates to viewport HTMLonly http://www.w3.org/TR/CSS21/visufx.html#overflow fe1965ac899fd53ea219d93a81049663904e20d2 `Microsoft`<http://www.microsoft.com/> An HTML user agent propagates the 'overflow' property from the 'body' to the viewport. +overflow-html-body-001 Overflow on body propagates to viewport http://www.w3.org/TR/CSS21/visufx.html#overflow b796f106ecbaf8f3ec883d428c6755e8631f1302 `Microsoft`<http://www.microsoft.com/> An HTML user agent propagates the 'overflow' property from the 'body' to the viewport. overflow-parent-001 Overflow hidden on root element http://www.w3.org/TR/CSS21/visufx.html#overflow 5e5665c2ad7fbd835b709512267113fbdb6b67fc `Microsoft`<http://www.microsoft.com/> Clipping does not affect elements where their parent is the viewport. overflow-print-001 Overflow 'scroll' and printing may,paged http://www.w3.org/TR/CSS21/visufx.html#overflow 6084ae9d52fdc1d051372ae928be2d0fc0ece147 `Microsoft`<http://www.microsoft.com/> The 'overflow' property set to 'scroll' acts like 'visible' when element is printed. overflow-root-001 Overflow on root propagates to viewport http://www.w3.org/TR/CSS21/visufx.html#overflow 2732f05f98602083e3cac47e147b2cf9a8ef8e6b `Microsoft`<http://www.microsoft.com/> The 'overflow' property set on the root propagates to the viewport. @@ -9388,10 +9388,10 @@ table-height-algorithm-030 Cell boxes smaller than their rows receive extra pad table-height-algorithm-031 Table baseline and caption http://www.w3.org/TR/CSS21/tables.html#height-layout,http://www.w3.org/TR/CSS21/visudet.html#leading 65eca5feb9ce005655803e21634e7db8b7b8dc87 `Microsoft`<http://www.microsoft.com/> A table caption does not set the baseline for a table. table-height-algorithm-032 Inline-table baseline and caption http://www.w3.org/TR/CSS21/tables.html#height-layout,http://www.w3.org/TR/CSS21/visudet.html#leading 4067a0970a6c859e9836ea36d8bed04790e01c29 `Microsoft`<http://www.microsoft.com/> A table caption does not set the baseline for an inline-table. table-in-inline-001 reference/table-in-inline-001-ref blocks inside inlines – table-pseudo-in-part3-1 http://www.w3.org/TR/CSS21/visuren.html#anonymous-block-level 5736ce35d142b5b5210309b68e33956e7da02d39 `Boris Zbarsky`<mailto:bzbarsky@mit.edu>,`Mozilla Corporation`<http://mozilla.com/> -table-intro-example-001 Introduction to Tables (text-align, font-weight) HTMLonly http://www.w3.org/TR/CSS21/tables.html#tables-intro 5352d59ceb6c3d96b6e080d940d77936081e224e `Microsoft`<http://www.microsoft.com/> 'text-align' and 'font-weight' can be applied to table cells (example from spec section 17.1). -table-intro-example-002 Introduction to Tables (vertical-align) HTMLonly http://www.w3.org/TR/CSS21/tables.html#tables-intro bd69aaf91ac4bdf7dcab118078b9936bcd9a7bc1 `Microsoft`<http://www.microsoft.com/> 'vertical-align' can be set on table cells (example from section 17.1). -table-intro-example-003 Introduction to Tables (border-collapse, border) HTMLonly http://www.w3.org/TR/CSS21/tables.html#tables-intro 3033c9166cc42fe6bada3d42b925685eda3c4f78 `Microsoft`<http://www.microsoft.com/> 'border-collapse' and 'border' can be set on table elements (example from section 17.1). -table-intro-example-004 Introduction to Tables (caption-side) HTMLonly http://www.w3.org/TR/CSS21/tables.html#tables-intro 5729584dcaca25c6eefbb282fd41a6fc58f6b348 `Microsoft`<http://www.microsoft.com/> 'caption-side' can be set on a table caption (example from section 17.1). +table-intro-example-001 Introduction to Tables (text-align, font-weight) http://www.w3.org/TR/CSS21/tables.html#tables-intro d3ec6d14d1ed132e0f7395c85d9803967a1aa6cb `Microsoft`<http://www.microsoft.com/> 'text-align' and 'font-weight' can be applied to table cells (example from spec section 17.1). +table-intro-example-002 Introduction to Tables (vertical-align) http://www.w3.org/TR/CSS21/tables.html#tables-intro 8702bfd06511a290586cb2565d9afd6227dbf1b3 `Microsoft`<http://www.microsoft.com/> 'vertical-align' can be set on table cells (example from section 17.1). +table-intro-example-003 Introduction to Tables (border-collapse, border) http://www.w3.org/TR/CSS21/tables.html#tables-intro a748de6ac35b1b954e607023905ff851605c5412 `Microsoft`<http://www.microsoft.com/> 'border-collapse' and 'border' can be set on table elements (example from section 17.1). +table-intro-example-004 Introduction to Tables (caption-side) http://www.w3.org/TR/CSS21/tables.html#tables-intro 330287e4994e9b26e19f3d1b63a98e272fbe9506 `Microsoft`<http://www.microsoft.com/> 'caption-side' can be set on a table caption (example from section 17.1). table-layer-transparency-001 Background on a table element shows if all elements above its layer are transparent http://www.w3.org/TR/CSS21/tables.html#table-layers 11f26cdc88668b70c3c86bd93e5bc970799e8643 `Microsoft`<http://www.microsoft.com/> A background set on a table element will show if all table element layers above it are transparent. table-layer-transparency-002 Background on a column group element shows if all elements above its layer are transparent http://www.w3.org/TR/CSS21/tables.html#table-layers 825f6a7c7e4e9e7a130adf95489923cc130981c1 `Microsoft`<http://www.microsoft.com/> A background set on a column group element will show if all table element layers above it are transparent. table-layer-transparency-003 Background on a column group element shows on all of a cell that spans through it 96dpi,image http://www.w3.org/TR/CSS21/tables.html#table-layers 9518bed9b069d5b14537e2b5561158bd8ca24898 `Microsoft`<http://www.microsoft.com/> A background set on a column group element will show on all of a cell that spans outside of it, but it will not affect background image positioning. diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/abs-pos-non-replaced-vlr-059.xht b/tests/wpt/css-tests/css21_dev/xhtml1/abs-pos-non-replaced-vlr-059.xht index 53fa7894e39..2d2d1a0ccb4 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1/abs-pos-non-replaced-vlr-059.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1/abs-pos-non-replaced-vlr-059.xht @@ -3,7 +3,7 @@ <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> - <title>CSS Writing Modes Test: absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'</title> + <title>CSS Writing Modes Test: absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto'</title> <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <link rel="help" href="http://www.w3.org/TR/css-writing-modes-3/#vertical-layout" title="7.1 Principles of Layout in Vertical Writing Modes" /> @@ -11,7 +11,7 @@ <link rel="match" href="reference/abs-pos-non-replaced-vrl-004-ref.xht" /> <meta name="flags" content="ahem image" /> - <meta name="assert" content="When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left', then solve for 'left'." /> + <meta name="assert" content="When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'." /> <style type="text/css"><![CDATA[ div#containing-block diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/abs-pos-non-replaced-vrl-058.xht b/tests/wpt/css-tests/css21_dev/xhtml1/abs-pos-non-replaced-vrl-058.xht index b8ce38d64d5..99fb7a944d2 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1/abs-pos-non-replaced-vrl-058.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1/abs-pos-non-replaced-vrl-058.xht @@ -3,7 +3,7 @@ <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> - <title>CSS Writing Modes Test: absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'</title> + <title>CSS Writing Modes Test: absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto'</title> <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <link rel="help" href="http://www.w3.org/TR/css-writing-modes-3/#vertical-layout" title="7.1 Principles of Layout in Vertical Writing Modes" /> @@ -11,7 +11,7 @@ <link rel="match" href="reference/abs-pos-non-replaced-vrl-004-ref.xht" /> <meta name="flags" content="ahem image" /> - <meta name="assert" content="When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left', then solve for 'left'." /> + <meta name="assert" content="When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'." /> <style type="text/css"><![CDATA[ div#containing-block diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/basic-html-table-001.xht b/tests/wpt/css-tests/css21_dev/xhtml1/basic-html-table-001.xht new file mode 100644 index 00000000000..8e7fef365fb --- /dev/null +++ b/tests/wpt/css-tests/css21_dev/xhtml1/basic-html-table-001.xht @@ -0,0 +1,50 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title>CSS Test: HTML table with every table element</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/tables.html#table-display" /> + <link rel="help" href="http://www.w3.org/TR/REC-html40/struct/tables.html#h-11.2" /> + <meta name="assert" content="HTML table elements are supported." /> + <style type="text/css"> + caption, td, th + { + background: black; + } + </style> + </head> + <body> + <p>Test passes if there is a solid bar on top of a three-by-three grid of boxes below.</p> + <table border="1"> + <caption>X</caption> + <colgroup> + <col /> + <col /> + </colgroup> + <colgroup> + <col /> + </colgroup> + <thead> + <tr> + <th>XXXXX</th> + <th>XXXXX</th> + <th>XXXXX</th> + </tr> + </thead> + <tfoot> + <tr> + <td>XXXXX</td> + <td>XXXXX</td> + <td>XXXXX</td> + </tr> + </tfoot> + <tbody> + <tr> + <td>XXXXX</td> + <td>XXXXX</td> + <td>XXXXX</td> + </tr> + </tbody> + </table> + </body> +</html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-1.xht b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-1.xht index 71ff793d472..ed573d284aa 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-1.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-1.xht @@ -30,7 +30,10 @@ <tbody id="s1"> <tr><th colspan="4" scope="rowgroup"> <a href="#s1">+</a> - <a href="https://www.w3.org/TR/CSS21/about.html">1 About the CSS 2.1 Specification</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/about.html#q1.0">1 About the CSS 2.1 Specification</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s1.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="s1.1"> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-10.xht b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-10.xht index ba733da8144..37e75a29ed5 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-10.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-10.xht @@ -30,7 +30,10 @@ <tbody id="s10"> <tr><th colspan="4" scope="rowgroup"> <a href="#s10">+</a> - <a href="https://www.w3.org/TR/CSS21/visudet.html">10 Visual formatting model details</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/visudet.html#q10.0">10 Visual formatting model details</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s10.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="s10.1"> @@ -4171,9 +4174,9 @@ <a href="abs-pos-non-replaced-vlr-059.xht">abs-pos-non-replaced-vlr-059</a></td> <td><a href="reference/abs-pos-non-replaced-vrl-004-ref.xht">=</a> </td> <td><abbr class="ahem" title="Requires Ahem font">Ahem</abbr><abbr class="image" title="Requires bitmap graphic support">Bitmaps</abbr></td> - <td>absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left' + <td>absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto' <ul class="assert"> - <li>When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left', then solve for 'left'.</li> + <li>When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'.</li> </ul> </td> </tr> @@ -4699,9 +4702,9 @@ <a href="abs-pos-non-replaced-vrl-058.xht">abs-pos-non-replaced-vrl-058</a></td> <td><a href="reference/abs-pos-non-replaced-vrl-004-ref.xht">=</a> </td> <td><abbr class="ahem" title="Requires Ahem font">Ahem</abbr><abbr class="image" title="Requires bitmap graphic support">Bitmaps</abbr></td> - <td>absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left' + <td>absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto' <ul class="assert"> - <li>When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left', then solve for 'left'.</li> + <li>When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'.</li> </ul> </td> </tr> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-11.xht b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-11.xht index b0cb056530e..a6388179b3a 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-11.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-11.xht @@ -30,7 +30,10 @@ <tbody id="s11"> <tr><th colspan="4" scope="rowgroup"> <a href="#s11">+</a> - <a href="https://www.w3.org/TR/CSS21/visufx.html">11 Visual effects</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/visufx.html#q11.0">11 Visual effects</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s11.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="s11.1"> @@ -616,6 +619,17 @@ </ul> </td> </tr> + <tr id="overflow-html-body-001-11.1.1" class=""> + <td> + <a href="overflow-html-body-001.xht">overflow-html-body-001</a></td> + <td></td> + <td></td> + <td>Overflow on body propagates to viewport + <ul class="assert"> + <li>An HTML user agent propagates the 'overflow' property from the 'body' to the viewport.</li> + </ul> + </td> + </tr> <tr id="overflow-parent-001-11.1.1" class=""> <td> <a href="overflow-parent-001.xht">overflow-parent-001</a></td> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-12.xht b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-12.xht index d3a7c255aa7..ec3b574b825 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-12.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-12.xht @@ -33,6 +33,9 @@ <a href="https://www.w3.org/TR/CSS21/generate.html#generated-text">12 Generated content, automatic numbering, and lists</a></th></tr> <!-- 0 tests --> </tbody> + <tbody id="s12.#annoying-warning"> + <!-- 0 tests --> + </tbody> <tbody id="s12.#x0"> <!-- 0 tests --> </tbody> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-13.xht b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-13.xht index f0ee1586a8b..f89e4e6e376 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-13.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-13.xht @@ -33,6 +33,9 @@ <a href="https://www.w3.org/TR/CSS21/page.html#the-page">13 Paged media</a></th></tr> <!-- 0 tests --> </tbody> + <tbody id="s13.#annoying-warning"> + <!-- 0 tests --> + </tbody> <tbody id="s13.1"> <tr><th colspan="4" scope="rowgroup"> <a href="#s13.1">+</a> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-14.xht b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-14.xht index 810d9c25fe7..1123ff003e3 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-14.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-14.xht @@ -30,7 +30,10 @@ <tbody id="s14"> <tr><th colspan="4" scope="rowgroup"> <a href="#s14">+</a> - <a href="https://www.w3.org/TR/CSS21/colors.html">14 Colors and Backgrounds</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/colors.html#q14.0">14 Colors and Backgrounds</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s14.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="s14.1"> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-15.xht b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-15.xht index 5400d683ecb..31c6e9d5837 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-15.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-15.xht @@ -30,7 +30,10 @@ <tbody id="s15"> <tr><th colspan="4" scope="rowgroup"> <a href="#s15">+</a> - <a href="https://www.w3.org/TR/CSS21/fonts.html">15 Fonts</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/fonts.html#q15.0">15 Fonts</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s15.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="s15.1"> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-16.xht b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-16.xht index 509b6e3191a..b6de913108b 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-16.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-16.xht @@ -30,7 +30,10 @@ <tbody id="s16"> <tr><th colspan="4" scope="rowgroup"> <a href="#s16">+</a> - <a href="https://www.w3.org/TR/CSS21/text.html">16 Text</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/text.html#q16.0">16 Text</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s16.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="s16.1"> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-17.xht b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-17.xht index 82c13a2fded..7badb6c74ee 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-17.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-17.xht @@ -30,7 +30,10 @@ <tbody id="s17"> <tr><th colspan="4" scope="rowgroup"> <a href="#s17">+</a> - <a href="https://www.w3.org/TR/CSS21/tables.html">17 Tables</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/tables.html#q17.0">17 Tables</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s17.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="s17.1"> @@ -137,6 +140,50 @@ </ul> </td> </tr> + <tr id="table-intro-example-001-17.1" class=""> + <td> + <a href="table-intro-example-001.xht">table-intro-example-001</a></td> + <td></td> + <td></td> + <td>Introduction to Tables (text-align, font-weight) + <ul class="assert"> + <li>'text-align' and 'font-weight' can be applied to table cells (example from spec section 17.1).</li> + </ul> + </td> + </tr> + <tr id="table-intro-example-002-17.1" class=""> + <td> + <a href="table-intro-example-002.xht">table-intro-example-002</a></td> + <td></td> + <td></td> + <td>Introduction to Tables (vertical-align) + <ul class="assert"> + <li>'vertical-align' can be set on table cells (example from section 17.1).</li> + </ul> + </td> + </tr> + <tr id="table-intro-example-003-17.1" class=""> + <td> + <a href="table-intro-example-003.xht">table-intro-example-003</a></td> + <td></td> + <td></td> + <td>Introduction to Tables (border-collapse, border) + <ul class="assert"> + <li>'border-collapse' and 'border' can be set on table elements (example from section 17.1).</li> + </ul> + </td> + </tr> + <tr id="table-intro-example-004-17.1" class=""> + <td> + <a href="table-intro-example-004.xht">table-intro-example-004</a></td> + <td></td> + <td></td> + <td>Introduction to Tables (caption-side) + <ul class="assert"> + <li>'caption-side' can be set on a table caption (example from section 17.1).</li> + </ul> + </td> + </tr> <tr id="table-organization-001-17.1" class=""> <td> <a href="table-organization-001.xht">table-organization-001</a></td> @@ -227,6 +274,17 @@ </ul> </td> </tr> + <tr id="basic-html-table-001-17.2" class=""> + <td> + <a href="basic-html-table-001.xht">basic-html-table-001</a></td> + <td></td> + <td></td> + <td>HTML table with every table element + <ul class="assert"> + <li>HTML table elements are supported.</li> + </ul> + </td> + </tr> <tr id="before-content-display-012-17.2" class=""> <td> <a href="before-content-display-012.xht">before-content-display-012</a></td> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-18.xht b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-18.xht index 241fa40de4a..276fd0bcf3f 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-18.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-18.xht @@ -30,7 +30,10 @@ <tbody id="s18"> <tr><th colspan="4" scope="rowgroup"> <a href="#s18">+</a> - <a href="https://www.w3.org/TR/CSS21/ui.html">18 User interface</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/ui.html#q18.0">18 User interface</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s18.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="s18.1"> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-2.xht b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-2.xht index 6e2541a4475..010b4a724bb 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-2.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-2.xht @@ -30,7 +30,10 @@ <tbody id="s2"> <tr><th colspan="4" scope="rowgroup"> <a href="#s2">+</a> - <a href="https://www.w3.org/TR/CSS21/intro.html">2 Introduction to CSS 2.1</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/intro.html#q2.0">2 Introduction to CSS 2.1</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s2.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="s2.1"> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-3.xht b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-3.xht index f61a4865067..9ddd9cc2359 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-3.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-3.xht @@ -30,7 +30,10 @@ <tbody id="s3"> <tr><th colspan="4" scope="rowgroup"> <a href="#s3">+</a> - <a href="https://www.w3.org/TR/CSS21/conform.html">3 Conformance: Requirements and Recommendations</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/conform.html#q3.0">3 Conformance: Requirements and Recommendations</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s3.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="s3.1"> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-4.xht b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-4.xht index 7d04993d7ca..0086ecf94f5 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-4.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-4.xht @@ -13,7 +13,7 @@ <body> <h1>CSS 2.1 Conformance Test Suite</h1> - <h2>Syntax and basic data types (439 tests)</h2> + <h2>Syntax and basic data types (431 tests)</h2> <table width="100%"> <col id="test-column"></col> <col id="refs-column"></col> @@ -30,96 +30,11 @@ <tbody id="s4"> <tr><th colspan="4" scope="rowgroup"> <a href="#s4">+</a> - <a href="https://www.w3.org/TR/CSS21/syndata.html">4 Syntax and basic data types</a></th></tr> - <!-- 8 tests --> - <tr id="counters-001-4" class=""> - <td> - <a href="counters-001.xht">counters-001</a></td> - <td><a href="reference/counters-001-ref.xht">=</a> </td> - <td></td> - <td>Parsing counter functions with just the identifier - <ul class="assert"> - <li>Counters can be referred to using only the identifier.</li> - </ul> - </td> - </tr> - <tr id="counters-002-4" class="invalid"> - <td> - <a href="counters-002.xht">counters-002</a></td> - <td><a href="reference/no-red-filler-text-ref.xht">=</a> </td> - <td><abbr class="invalid" title="Tests invalid CSS">Invalid</abbr></td> - <td>Parsing invalid counter functions - Too many arguments - <ul class="assert"> - <li>A counter is invalid if it has too many arguments.</li> - </ul> - </td> - </tr> - <tr id="ident-014-4" class=""> - <td> - <a href="ident-014.xht">ident-014</a></td> - <td><a href="reference/filler-text-below-green.xht">=</a> </td> - <td></td> - <td>Selector attributes and hyphens - <ul class="assert"> - <li>Attribute selectors can begin with hyphens.</li> - </ul> - </td> - </tr> - <tr id="ident-015-4" class=""> - <td> - <a href="ident-015.xht">ident-015</a></td> - <td><a href="reference/filler-text-below-green.xht">=</a> </td> - <td></td> - <td>Attribute selectors and underscores - <ul class="assert"> - <li>Attribute selectors can begin with underscores.</li> - </ul> - </td> - </tr> - <tr id="ident-016-4" class=""> - <td> - <a href="ident-016.xht">ident-016</a></td> - <td><a href="reference/filler-text-below-green.xht">=</a> </td> - <td></td> - <td>Attribute selectors with hyphens and underscores - <ul class="assert"> - <li>Attribute selectors are valid if they begin with hyphens and then underscores.</li> - </ul> - </td> - </tr> - <tr id="ident-017-4" class="invalid"> - <td> - <a href="ident-017.xht">ident-017</a></td> - <td><a href="reference/no-red-filler-text-ref.xht">=</a> </td> - <td><abbr class="invalid" title="Tests invalid CSS">Invalid</abbr></td> - <td>Attribute selection with digits - <ul class="assert"> - <li>Attribute selectors cannot begin with digits.</li> - </ul> - </td> - </tr> - <tr id="ident-018-4" class="invalid"> - <td> - <a href="ident-018.xht">ident-018</a></td> - <td><a href="reference/no-red-filler-text-ref.xht">=</a> </td> - <td><abbr class="invalid" title="Tests invalid CSS">Invalid</abbr></td> - <td>Attribute selectors starting with hyphens and digits - <ul class="assert"> - <li>Attribute selectors cannot begin with hyphens then digits.</li> - </ul> - </td> - </tr> - <tr id="ident-019-4" class=""> - <td> - <a href="ident-019.xht">ident-019</a></td> - <td><a href="reference/filler-text-below-green.xht">=</a> </td> - <td></td> - <td>Attribute selectors starting with underscore and digits - <ul class="assert"> - <li>Attribute selectors can begin with underscore then digits.</li> - </ul> - </td> - </tr> + <a href="https://www.w3.org/TR/CSS21/syndata.html#q4.0">4 Syntax and basic data types</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s4.#annoying-warning"> + <!-- 0 tests --> </tbody> <tbody id="s4.1"> <tr><th colspan="4" scope="rowgroup"> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-5.xht b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-5.xht index e913af114ae..bfe1618ad1c 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-5.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-5.xht @@ -13,7 +13,7 @@ <body> <h1>CSS 2.1 Conformance Test Suite</h1> - <h2>Selectors (677 tests)</h2> + <h2>Selectors (668 tests)</h2> <table width="100%"> <col id="test-column"></col> <col id="refs-column"></col> @@ -30,80 +30,11 @@ <tbody id="s5"> <tr><th colspan="4" scope="rowgroup"> <a href="#s5">+</a> - <a href="https://www.w3.org/TR/CSS21/selector.html">5 Selectors</a></th></tr> - <!-- 9 tests --> - <tr id="cascade-import-dynamic-001-5" class=""> - <td> - <a href="cascade-import-dynamic-001.xht">cascade-import-dynamic-001</a></td> - <td><a href="reference/ref-this-text-should-be-green.xht">=</a> </td> - <td></td> - <td>Dynamic sheet append (<style>) - </td> - </tr> - <tr id="cascade-import-dynamic-002-5" class=""> - <td> - <a href="cascade-import-dynamic-002.xht">cascade-import-dynamic-002</a></td> - <td><a href="reference/ref-this-text-should-be-green.xht">=</a> </td> - <td></td> - <td>Dynamic sheet append (<link>) - </td> - </tr> - <tr id="cascade-import-dynamic-003-5" class=""> - <td> - <a href="cascade-import-dynamic-003.xht">cascade-import-dynamic-003</a></td> - <td><a href="reference/ref-this-text-should-be-green.xht">=</a> </td> - <td></td> - <td>Dynamic sheet insertion (<style>) - </td> - </tr> - <tr id="cascade-import-dynamic-004-5" class=""> - <td> - <a href="cascade-import-dynamic-004.xht">cascade-import-dynamic-004</a></td> - <td><a href="reference/ref-this-text-should-be-green.xht">=</a> </td> - <td></td> - <td>Dynamic sheet insertion (<link>) - </td> - </tr> - <tr id="cascade-import-dynamic-005-5" class=""> - <td> - <a href="cascade-import-dynamic-005.xht">cascade-import-dynamic-005</a></td> - <td><a href="reference/ref-this-text-should-be-green.xht">=</a> </td> - <td></td> - <td>Dynamic sheet deletion (<style>) - </td> - </tr> - <tr id="cascade-import-dynamic-006-5" class=""> - <td> - <a href="cascade-import-dynamic-006.xht">cascade-import-dynamic-006</a></td> - <td><a href="reference/ref-this-text-should-be-green.xht">=</a> </td> - <td></td> - <td>Dynamic sheet deletion (<link>) - </td> - </tr> - <tr id="cascade-import-dynamic-control-5" class=""> - <td> - <a href="cascade-import-dynamic-control.xht">cascade-import-dynamic-control</a></td> - <td><a href="reference/ref-this-text-should-be-green.xht">=</a> </td> - <td></td> - <td>Control test - </td> - </tr> - <tr id="html-precedence-004-5" class="userstyle"> - <td> - <a href="html-precedence-004.xht">html-precedence-004</a></td> - <td><a href="reference/html-precedence-004-ref.xht">=</a> </td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>User Stylesheets and non-CSS Presentational Hints - </td> - </tr> - <tr id="html-precedence-005-5" class="userstyle"> - <td> - <a href="html-precedence-005.xht">html-precedence-005</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>User Stylesheets and non-CSS Presentational Hints - </td> - </tr> + <a href="https://www.w3.org/TR/CSS21/selector.html#q5.0">5 Selectors</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s5.#annoying-warning"> + <!-- 0 tests --> </tbody> <tbody id="s5.1"> <tr><th colspan="4" scope="rowgroup"> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-6.xht b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-6.xht index 12519429186..5009f4aa553 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-6.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-6.xht @@ -13,7 +13,7 @@ <body> <h1>CSS 2.1 Conformance Test Suite</h1> - <h2>Assigning property values, Cascading, and Inheritance (145 tests)</h2> + <h2>Assigning property values, Cascading, and Inheritance (117 tests)</h2> <table width="100%"> <col id="test-column"></col> <col id="refs-column"></col> @@ -30,316 +30,11 @@ <tbody id="s6"> <tr><th colspan="4" scope="rowgroup"> <a href="#s6">+</a> - <a href="https://www.w3.org/TR/CSS21/cascade.html">6 Assigning property values, Cascading, and Inheritance</a></th></tr> - <!-- 28 tests --> - <tr id="at-import-001-6" class=""> - <td> - <a href="at-import-001.xht">at-import-001</a></td> - <td></td> - <td></td> - <td>@import not as the first declaration - <ul class="assert"> - <li>An @import is ignored if it is not the first statement in a style block.</li> - </ul> - </td> - </tr> - <tr id="at-import-002-6" class=""> - <td> - <a href="at-import-002.xht">at-import-002</a></td> - <td><a href="reference/filler-text-below-green.xht">=</a> </td> - <td></td> - <td>Importing external stylesheets with @import - <ul class="assert"> - <li>An @import used to import external stylesheets.</li> - </ul> - </td> - </tr> - <tr id="at-import-003-6" class=""> - <td> - <a href="at-import-003.xht">at-import-003</a></td> - <td><a href="reference/filler-text-below-green.xht">=</a> </td> - <td></td> - <td>Importing styles using @import with a string - <ul class="assert"> - <li>An @import used with just a string is interpreted as if it had url(...) around it.</li> - </ul> - </td> - </tr> - <tr id="at-import-004-6" class=""> - <td> - <a href="at-import-004.xht">at-import-004</a></td> - <td><a href="reference/no-red-filler-text-ref.xht">=</a> </td> - <td></td> - <td>Media dependency on @import set to 'print' - <ul class="assert"> - <li>Specifying a media-dependency of print does not apply rules to the user agent display.</li> - </ul> - </td> - </tr> - <tr id="at-import-005-6" class=""> - <td> - <a href="at-import-005.xht">at-import-005</a></td> - <td><a href="reference/filler-text-below-green.xht">=</a> </td> - <td></td> - <td>Media dependency on @import set to 'all' - <ul class="assert"> - <li>Specifying the media-dependency of 'all' applies to all media types including user agent display.</li> - </ul> - </td> - </tr> - <tr id="at-import-006-6" class=""> - <td> - <a href="at-import-006.xht">at-import-006</a></td> - <td><a href="reference/filler-text-below-green.xht">=</a> </td> - <td></td> - <td>Media dependency on @import set to 'screen' - <ul class="assert"> - <li>Specifying the media-dependent import rules to 'screen' applies to user agent display.</li> - </ul> - </td> - </tr> - <tr id="at-import-007-6" class=""> - <td> - <a href="at-import-007.xht">at-import-007</a></td> - <td><a href="reference/filler-text-below-green.xht">=</a> </td> - <td></td> - <td>@import with @charset - <ul class="assert"> - <li>An @import is valid after @charset.</li> - </ul> - </td> - </tr> - <tr id="html-precedence-002-6" class=""> - <td> - <a href="html-precedence-002.xht">html-precedence-002</a></td> - <td></td> - <td></td> - <td>Universal selector precedence - <ul class="assert"> - <li>The universal selector and the 'color' attribute have the same specificity. The universal selector is applied since CSS takes precedence.</li> - </ul> - </td> - </tr> - <tr id="html-precedence-003-6" class="userstyle"> - <td> - <a href="html-precedence-003.xht">html-precedence-003</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>User style sheet precedence - <ul class="assert"> - <li>The 'font' element's 'color' attribute trumps the user stylesheet's universal selector. They have the same specificity but the font element is a virtual author rule.</li> - </ul> - </td> - </tr> - <tr id="inherited-value-002-6" class="ahem"> - <td> - <a href="inherited-value-002.xht">inherited-value-002</a></td> - <td></td> - <td><abbr class="ahem" title="Requires Ahem font">Ahem</abbr></td> - <td>Inheriting computed values - <ul class="assert"> - <li>The computed value of a font-size with a percentage is the percentage of its parent's font-size value. A nested element which also has a percentage applies the parents' specified value (which is inherited).</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-001-6" class="userstyle"> - <td> - <a href="user-stylesheet-001.xht">user-stylesheet-001</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>User defined stylesheet can be applied - <ul class="assert"> - <li>User stylesheet can be applied to the page.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-002-6" class="interact userstyle"> - <td> - <a href="user-stylesheet-002.xht">user-stylesheet-002</a></td> - <td></td> - <td><abbr class="interact" title="Requires user interaction">Interact</abbr><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>User defined stylesheet can be applied and persisted - <ul class="assert"> - <li>The user stylesheet is still applied after close and reopen the user agent window.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-003-6" class="userstyle"> - <td> - <a href="user-stylesheet-003.xht">user-stylesheet-003</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Rules with normal declarations in an user defined stylesheet can be overriden by rules with normal declarations from author in a style block - <ul class="assert"> - <li>A CSS rule (with normal - not !important - declarations) in an author style sheet have more weight than a CSS rule (with normal - not !important -declarations) in an user style sheet.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-004-6" class="userstyle"> - <td> - <a href="user-stylesheet-004.xht">user-stylesheet-004</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Rules with normal declarations in an user defined stylesheet can be overriden by normal declarations from author in an inline style attribute - <ul class="assert"> - <li>A normal - not !important - declaration in an inline style from author have more weight than a CSS rule (with normal - not !important -) declarations in an user style sheet.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-005-6" class="userstyle"> - <td> - <a href="user-stylesheet-005.xht">user-stylesheet-005</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Descendant selector defined in user stylesheet can be applied - <ul class="assert"> - <li>The descendant selector defined in user stylesheet is applied to the appropriate element.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-006-6" class="userstyle"> - <td> - <a href="user-stylesheet-006.xht">user-stylesheet-006</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Child selector defined in user stylesheet can be applied - <ul class="assert"> - <li>The child selector defined in user stylesheet is applied to the appropriate element.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-007-6" class="userstyle"> - <td> - <a href="user-stylesheet-007.xht">user-stylesheet-007</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Adjacent sibling selector defined in user stylesheet can be applied - <ul class="assert"> - <li>The adjacent sibling selector defined in user stylesheet is applied to the appropriate element.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-008-6" class="userstyle"> - <td> - <a href="user-stylesheet-008.xht">user-stylesheet-008</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Attribute selector defined in user stylesheet can be applied - <ul class="assert"> - <li>The attribute selector defined in user stylesheet is applied to the appropriate element.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-009-6" class="userstyle"> - <td> - <a href="user-stylesheet-009.xht">user-stylesheet-009</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>ID selector defined in user stylesheet can be applied - <ul class="assert"> - <li>The ID selector defined in user stylesheet is applied to the appropriate element.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-010-6" class="userstyle"> - <td> - <a href="user-stylesheet-010.xht">user-stylesheet-010</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Pseudo-class selector :first-child defined in user stylesheet can be applied - <ul class="assert"> - <li>The pseudo-class selector :first-child defined in user stylesheet is applied to the first child of an element.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-011-6" class="userstyle"> - <td> - <a href="user-stylesheet-011.xht">user-stylesheet-011</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Pseudo-element first-line selector defined in user stylesheet can be applied - <ul class="assert"> - <li>The pseudo-element selector :first-line defined in user stylesheet is applied to the first line of an element.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-012-6" class="history userstyle"> - <td> - <a href="user-stylesheet-012.xht">user-stylesheet-012</a></td> - <td></td> - <td><abbr class="history" title="Requires session history">History</abbr><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Link defined in user stylesheet can be applied - <ul class="assert"> - <li>The pseudo-class selector :link defined in user stylesheet is applied to all links.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-013-6" class="interact userstyle"> - <td> - <a href="user-stylesheet-013.xht">user-stylesheet-013</a></td> - <td></td> - <td><abbr class="interact" title="Requires user interaction">Interact</abbr><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Visited selector defined in user stylesheet can be applied - <ul class="assert"> - <li>The pseudo-class selector :visited defined in user stylesheet is applied when a link has already been visited.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-014-6" class="interact userstyle"> - <td> - <a href="user-stylesheet-014.xht">user-stylesheet-014</a></td> - <td></td> - <td><abbr class="interact" title="Requires user interaction">Interact</abbr><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Hover defined in user stylesheet can be applied - <ul class="assert"> - <li>The pseudo-class selector :hover defined in user stylesheet is applied when the mouse is above an element.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-015-6" class="interact userstyle"> - <td> - <a href="user-stylesheet-015.xht">user-stylesheet-015</a></td> - <td></td> - <td><abbr class="interact" title="Requires user interaction">Interact</abbr><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Pseudo-class :active defined in user stylesheet can be applied - <ul class="assert"> - <li>The pseudo-class selector :active defined in user stylesheet is implemented.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-016-6" class="userstyle"> - <td> - <a href="user-stylesheet-016.xht">user-stylesheet-016</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Pseudo-element first-letter selector defined in user stylesheet can be applied - <ul class="assert"> - <li>The pseudo-element selector :first-letter defined in user stylesheet is applied to the first letter of an element.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-017-6" class="userstyle"> - <td> - <a href="user-stylesheet-017.xht">user-stylesheet-017</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Pseudo-element before selector defined in user stylesheet can be applied - <ul class="assert"> - <li>The pseudo-element selector :before defined in user stylesheet is inserted before an element.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-018-6" class="userstyle"> - <td> - <a href="user-stylesheet-018.xht">user-stylesheet-018</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Pseudo-element after selector defined in user stylesheet can be applied - <ul class="assert"> - <li>The pseudo-element selector :after defined in user stylesheet is inserted after an element.</li> - </ul> - </td> - </tr> + <a href="https://www.w3.org/TR/CSS21/cascade.html#q6.0">6 Assigning property values, Cascading, and Inheritance</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s6.#annoying-warning"> + <!-- 0 tests --> </tbody> <tbody id="s6.1"> <tr><th colspan="4" scope="rowgroup"> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-7.xht b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-7.xht index 7dfe0c642f1..f991904e8aa 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-7.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-7.xht @@ -13,7 +13,7 @@ <body> <h1>CSS 2.1 Conformance Test Suite</h1> - <h2>Media types (22 tests)</h2> + <h2>Media types (5 tests)</h2> <table width="100%"> <col id="test-column"></col> <col id="refs-column"></col> @@ -30,195 +30,11 @@ <tbody id="s7"> <tr><th colspan="4" scope="rowgroup"> <a href="#s7">+</a> - <a href="https://www.w3.org/TR/CSS21/media.html">7 Media types</a></th></tr> - <!-- 17 tests --> - <tr id="media-dependency-001-7" class=""> - <td> - <a href="media-dependency-001.xht">media-dependency-001</a></td> - <td><a href="reference/filler-text-below-green.xht">=</a> </td> - <td></td> - <td>@media and target mediums - <ul class="assert"> - <li>@media with a target medium applies styles on that target medium (screen).</li> - </ul> - </td> - </tr> - <tr id="media-dependency-002-7" class=""> - <td> - <a href="media-dependency-002.xht">media-dependency-002</a></td> - <td><a href="reference/filler-text-below-green.xht">=</a> </td> - <td></td> - <td>@import and target mediums - <ul class="assert"> - <li>@media with a target medium applies styles on that target medium (screen).</li> - </ul> - </td> - </tr> - <tr id="media-dependency-003-7" class=""> - <td> - <a href="media-dependency-003.xht">media-dependency-003</a></td> - <td><a href="reference/filler-text-below-green.xht">=</a> </td> - <td></td> - <td>Link tags and target mediums - <ul class="assert"> - <li>Link with a target medium applies styles on that target medium (screen).</li> - </ul> - </td> - </tr> - <tr id="media-dependency-004-7" class=""> - <td> - <a href="media-dependency-004.xht">media-dependency-004</a></td> - <td><a href="reference/filler-text-below-green.xht">=</a> </td> - <td></td> - <td>Case-insensitive media types - <ul class="assert"> - <li>Media types are case-insensitive.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-005-7" class="invalid"> - <td> - <a href="media-dependency-005.xht">media-dependency-005</a></td> - <td><a href="reference/filler-text-below-green.xht">=</a> </td> - <td><abbr class="invalid" title="Tests invalid CSS">Invalid</abbr></td> - <td>Ignoring bad media types with @import - <ul class="assert"> - <li>User agent ignores media types it does not understand with @import.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-006-7" class="invalid"> - <td> - <a href="media-dependency-006.xht">media-dependency-006</a></td> - <td><a href="reference/filler-text-below-green.xht">=</a> </td> - <td><abbr class="invalid" title="Tests invalid CSS">Invalid</abbr></td> - <td>Ignoring bad media types with @media - <ul class="assert"> - <li>User agent ignores media types it does not understand with @media.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-007-7" class=""> - <td> - <a href="media-dependency-007.xht">media-dependency-007</a></td> - <td><a href="reference/no-red-filler-text-ref.xht">=</a> </td> - <td></td> - <td>Non-matching target mediums - <ul class="assert"> - <li>The @media block does not apply because it does not match the target medium.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-008-7" class=""> - <td> - <a href="media-dependency-008.xht">media-dependency-008</a></td> - <td><a href="reference/no-red-filler-text-ref.xht">=</a> </td> - <td></td> - <td>Non-matching target mediums and @import - <ul class="assert"> - <li>The @import command does not apply because it does not match the target medium.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-009-7" class=""> - <td> - <a href="media-dependency-009.xht">media-dependency-009</a></td> - <td><a href="reference/filler-text-below-green.xht">=</a> </td> - <td></td> - <td>Matching the 'All' target medium - <ul class="assert"> - <li>The 'all' media type applies to the screen medium.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-010-7" class=""> - <td> - <a href="media-dependency-010.xht">media-dependency-010</a></td> - <td><a href="reference/no-red-filler-text-ref.xht">=</a> </td> - <td></td> - <td>Non-matching target mediums (braille) - <ul class="assert"> - <li>The 'braille' media type does not apply to the screen medium.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-011-7" class=""> - <td> - <a href="media-dependency-011.xht">media-dependency-011</a></td> - <td><a href="reference/no-red-filler-text-ref.xht">=</a> </td> - <td></td> - <td>Non-matching target mediums (embossed) - <ul class="assert"> - <li>The 'embossed' media type does not apply to the screen medium.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-012-7" class=""> - <td> - <a href="media-dependency-012.xht">media-dependency-012</a></td> - <td><a href="reference/no-red-filler-text-ref.xht">=</a> </td> - <td></td> - <td>Non-matching target mediums (handheld) - <ul class="assert"> - <li>The 'handheld' media type does not apply to the screen medium.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-013-7" class=""> - <td> - <a href="media-dependency-013.xht">media-dependency-013</a></td> - <td><a href="reference/no-red-filler-text-ref.xht">=</a> </td> - <td></td> - <td>Non-matching target mediums (projection) - <ul class="assert"> - <li>The 'projection' media type does not apply to the screen medium.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-014-7" class=""> - <td> - <a href="media-dependency-014.xht">media-dependency-014</a></td> - <td><a href="reference/no-red-filler-text-ref.xht">=</a> </td> - <td></td> - <td>Non-matching target mediums (speech) - <ul class="assert"> - <li>The 'speech' media type does not apply to the screen medium.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-015-7" class=""> - <td> - <a href="media-dependency-015.xht">media-dependency-015</a></td> - <td><a href="reference/no-red-filler-text-ref.xht">=</a> </td> - <td></td> - <td>Non-matching target mediums (tty) - <ul class="assert"> - <li>The 'tty' media type does not apply to the screen medium.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-016-7" class=""> - <td> - <a href="media-dependency-016.xht">media-dependency-016</a></td> - <td><a href="reference/no-red-filler-text-ref.xht">=</a> </td> - <td></td> - <td>Non-matching target mediums (tv) - <ul class="assert"> - <li>The 'tv' media type does not apply to the screen medium.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-017-7" class=""> - <td> - <a href="media-dependency-017.xht">media-dependency-017</a></td> - <td><a href="reference/filler-text-below-green.xht">=</a> </td> - <td></td> - <td>Multiple target mediums - <ul class="assert"> - <li>An '@media' rule specifies the target media types separated by commas.</li> - </ul> - </td> - </tr> + <a href="https://www.w3.org/TR/CSS21/media.html#q7.0">7 Media types</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s7.#annoying-warning"> + <!-- 0 tests --> </tbody> <tbody id="s7.1"> <tr><th colspan="4" scope="rowgroup"> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-8.xht b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-8.xht index 471ccaaf28f..70e7346fb13 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-8.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-8.xht @@ -33,6 +33,9 @@ <a href="https://www.w3.org/TR/CSS21/box.html#box-model">8 Box model</a></th></tr> <!-- 0 tests --> </tbody> + <tbody id="s8.#annoying-warning"> + <!-- 0 tests --> + </tbody> <tbody id="s8.1"> <tr><th colspan="4" scope="rowgroup"> <a href="#s8.1">+</a> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-9.xht b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-9.xht index f957c82ac6b..e65591f3fc4 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-9.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-9.xht @@ -13,7 +13,7 @@ <body> <h1>CSS 2.1 Conformance Test Suite</h1> - <h2>Visual formatting model (1247 tests)</h2> + <h2>Visual formatting model (1246 tests)</h2> <table width="100%"> <col id="test-column"></col> <col id="refs-column"></col> @@ -30,16 +30,11 @@ <tbody id="s9"> <tr><th colspan="4" scope="rowgroup"> <a href="#s9">+</a> - <a href="https://www.w3.org/TR/CSS21/visuren.html">9 Visual formatting model</a></th></tr> - <!-- 1 tests --> - <tr id="c5526c-display-000-9" class=""> - <td> - <a href="c5526c-display-000.xht">c5526c-display-000</a></td> - <td></td> - <td></td> - <td>display/box/float/clear test - </td> - </tr> + <a href="https://www.w3.org/TR/CSS21/visuren.html#q9.0">9 Visual formatting model</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s9.#annoying-warning"> + <!-- 0 tests --> </tbody> <tbody id="s9.1"> <tr><th colspan="4" scope="rowgroup"> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-A.xht b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-A.xht index 918efb8b096..311d98c1bb4 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-A.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-A.xht @@ -30,7 +30,10 @@ <tbody id="sA"> <tr><th colspan="4" scope="rowgroup"> <a href="#sA">+</a> - <a href="https://www.w3.org/TR/CSS21/aural.html">A Aural style sheets</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/aural.html#q19.0">A Aural style sheets</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="sA.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="sA.1"> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-B.xht b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-B.xht index 5bc259221d9..fad1b00c46a 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-B.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-B.xht @@ -30,7 +30,10 @@ <tbody id="sB"> <tr><th colspan="4" scope="rowgroup"> <a href="#sB">+</a> - <a href="https://www.w3.org/TR/CSS21/refs.html">B Bibliography</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/refs.html#q20.0">B Bibliography</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="sB.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="sB.1"> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-C.xht b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-C.xht index da760a656d5..525f0f97da3 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-C.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-C.xht @@ -13,7 +13,7 @@ <body> <h1>CSS 2.1 Conformance Test Suite</h1> - <h2>Changes (5 tests)</h2> + <h2>Changes (0 tests)</h2> <table width="100%"> <col id="test-column"></col> <col id="refs-column"></col> @@ -30,7 +30,10 @@ <tbody id="sC"> <tr><th colspan="4" scope="rowgroup"> <a href="#sC">+</a> - <a href="https://www.w3.org/TR/CSS21/changes.html">C Changes</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/changes.html#q21.0">C Changes</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="sC.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="sC.1"> @@ -45,7 +48,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#a4.3.6">C.1.1 Section 4.3.6 Colors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.1.1.#q2"> + <tbody id="sC.1.1.#q21.2"> <!-- 0 tests --> </tbody> <tbody id="sC.1.2"> @@ -54,7 +57,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#a9.2.4">C.1.2 Section 9.2.4 The 'display' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.1.2.#q3"> + <tbody id="sC.1.2.#q21.3"> <!-- 0 tests --> </tbody> <tbody id="sC.1.3"> @@ -63,7 +66,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#a12.2">C.1.3 Section 12.2 The 'content' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.1.3.#q4"> + <tbody id="sC.1.3.#q21.4"> <!-- 0 tests --> </tbody> <tbody id="sC.1.4"> @@ -72,7 +75,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#a16.6">C.1.4 Section 16.6 White space: the 'white-space' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.1.4.#q5"> + <tbody id="sC.1.4.#q21.5"> <!-- 0 tests --> </tbody> <tbody id="sC.1.5"> @@ -81,7 +84,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#a18.1">C.1.5 Section 18.1 Cursors: the 'cursor' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.1.5.#q6"> + <tbody id="sC.1.5.#q21.6"> <!-- 0 tests --> </tbody> <tbody id="sC.2"> @@ -96,7 +99,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c1.1">C.2.1 Section 1.1 CSS 2.1 vs CSS 2</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.1.#q8"> + <tbody id="sC.2.1.#q21.8"> <!-- 0 tests --> </tbody> <tbody id="sC.2.2"> @@ -105,7 +108,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c1.2">C.2.2 Section 1.2 Reading the specification</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.2.#q9"> + <tbody id="sC.2.2.#q21.9"> <!-- 0 tests --> </tbody> <tbody id="sC.2.3"> @@ -114,7 +117,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c1.3">C.2.3 Section 1.3 How the specification is organized</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.3.#q10"> + <tbody id="sC.2.3.#q21.10"> <!-- 0 tests --> </tbody> <tbody id="sC.2.4"> @@ -123,7 +126,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c1.4.2.1">C.2.4 Section 1.4.2.1 Value</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.4.#q11"> + <tbody id="sC.2.4.#q21.11"> <!-- 0 tests --> </tbody> <tbody id="sC.2.5"> @@ -132,7 +135,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c1.4.2.6">C.2.5 Section 1.4.2.6 Media groups</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.5.#q12"> + <tbody id="sC.2.5.#q21.12"> <!-- 0 tests --> </tbody> <tbody id="sC.2.6"> @@ -141,7 +144,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c1.4.2.7">C.2.6 Section 1.4.2.7 Computed value</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.6.#q13"> + <tbody id="sC.2.6.#q21.13"> <!-- 0 tests --> </tbody> <tbody id="sC.2.7"> @@ -150,7 +153,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c1.4.4">C.2.7 Section 1.4.4 Notes and examples</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.7.#q14"> + <tbody id="sC.2.7.#q21.14"> <!-- 0 tests --> </tbody> <tbody id="sC.2.8"> @@ -159,7 +162,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c1.5">C.2.8 Section 1.5 Acknowledgments</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.8.#q15"> + <tbody id="sC.2.8.#q21.15"> <!-- 0 tests --> </tbody> <tbody id="sC.2.9"> @@ -168,7 +171,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c3.2">C.2.9 Section 3.2 Conformance</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.9.#q16"> + <tbody id="sC.2.9.#q21.16"> <!-- 0 tests --> </tbody> <tbody id="sC.2.10"> @@ -177,7 +180,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c3.3">C.2.10 Section 3.3 Error Conditions</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.10.#q17"> + <tbody id="sC.2.10.#q21.17"> <!-- 0 tests --> </tbody> <tbody id="sC.2.11"> @@ -186,7 +189,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c4.1.1">C.2.11 Section 4.1.1 Tokenization</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.11.#q18"> + <tbody id="sC.2.11.#q21.18"> <!-- 0 tests --> </tbody> <tbody id="sC.2.11.#underscore"> @@ -198,7 +201,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c4.1.3">C.2.12 Section 4.1.3 Characters and case</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.12.#q19"> + <tbody id="sC.2.12.#q21.19"> <!-- 0 tests --> </tbody> <tbody id="sC.2.13"> @@ -207,7 +210,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c4.2">C.2.13 Section 4.2 Rules for handling parsing errors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.13.#q20"> + <tbody id="sC.2.13.#q21.20"> <!-- 0 tests --> </tbody> <tbody id="sC.2.14"> @@ -216,7 +219,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c4.3">C.2.14 Section 4.3 Values</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.14.#q21"> + <tbody id="sC.2.14.#q21.21"> <!-- 0 tests --> </tbody> <tbody id="sC.2.15"> @@ -225,7 +228,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c4.3.2">C.2.15 Section 4.3.2 Lengths</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.15.#q22"> + <tbody id="sC.2.15.#q21.22"> <!-- 0 tests --> </tbody> <tbody id="sC.2.16"> @@ -234,7 +237,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c4.3.4">C.2.16 Section 4.3.4 URLs and URIs</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.16.#q23"> + <tbody id="sC.2.16.#q21.23"> <!-- 0 tests --> </tbody> <tbody id="sC.2.17"> @@ -243,7 +246,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c4.3.5">C.2.17 Section 4.3.5 Counters</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.17.#q24"> + <tbody id="sC.2.17.#q21.24"> <!-- 0 tests --> </tbody> <tbody id="sC.2.18"> @@ -252,7 +255,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c4.3.6">C.2.18 Section 4.3.6 Colors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.18.#q25"> + <tbody id="sC.2.18.#q21.25"> <!-- 0 tests --> </tbody> <tbody id="sC.2.19"> @@ -261,7 +264,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c4.3.8">C.2.19 Section 4.3.8 Unsupported Values</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.19.#q26"> + <tbody id="sC.2.19.#q21.26"> <!-- 0 tests --> </tbody> <tbody id="sC.2.20"> @@ -270,7 +273,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c4.4">C.2.20 Section 4.4 CSS style sheet representation</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.20.#q27"> + <tbody id="sC.2.20.#q21.27"> <!-- 0 tests --> </tbody> <tbody id="sC.2.21"> @@ -279,7 +282,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c5.8.1">C.2.21 Section 5.8.1 Matching attributes and attribute values</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.21.#q28"> + <tbody id="sC.2.21.#q21.28"> <!-- 0 tests --> </tbody> <tbody id="sC.2.22"> @@ -288,7 +291,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c5.8.3">C.2.22 Section 5.8.3 Class selectors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.22.#q29"> + <tbody id="sC.2.22.#q21.29"> <!-- 0 tests --> </tbody> <tbody id="sC.2.23"> @@ -297,7 +300,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c5.9">C.2.23 Section 5.9 ID selectors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.23.#q30"> + <tbody id="sC.2.23.#q21.30"> <!-- 0 tests --> </tbody> <tbody id="sC.2.24"> @@ -306,7 +309,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c5.10">C.2.24 Section 5.10 Pseudo-elements and pseudo-classes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.24.#q31"> + <tbody id="sC.2.24.#q21.31"> <!-- 0 tests --> </tbody> <tbody id="sC.2.25"> @@ -315,7 +318,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c5.11.2">C.2.25 Section 5.11.2 The link pseudo-classes: :link and :visited</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.25.#q32"> + <tbody id="sC.2.25.#q21.32"> <!-- 0 tests --> </tbody> <tbody id="sC.2.26"> @@ -324,7 +327,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c5.11.4">C.2.26 Section 5.11.4 The language pseudo-class: :lang</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.26.#q33"> + <tbody id="sC.2.26.#q21.33"> <!-- 0 tests --> </tbody> <tbody id="sC.2.27"> @@ -333,7 +336,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c5.12.1">C.2.27 Section 5.12.1 The :first-line pseudo-element</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.27.#q34"> + <tbody id="sC.2.27.#q21.34"> <!-- 0 tests --> </tbody> <tbody id="sC.2.28"> @@ -342,7 +345,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c5.12.2">C.2.28 Section 5.12.2 The :first-letter pseudo-element</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.28.#q35"> + <tbody id="sC.2.28.#q21.35"> <!-- 0 tests --> </tbody> <tbody id="sC.2.29"> @@ -351,7 +354,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c6.1">C.2.29 Section 6.1 Specified, computed, and actual values</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.29.#q36"> + <tbody id="sC.2.29.#q21.36"> <!-- 0 tests --> </tbody> <tbody id="sC.2.30"> @@ -360,7 +363,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c6.4.1">C.2.30 Section 6.4.1 Cascading order</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.30.#q37"> + <tbody id="sC.2.30.#q21.37"> <!-- 0 tests --> </tbody> <tbody id="sC.2.31"> @@ -369,7 +372,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c6.4.3">C.2.31 Section 6.4.3 Calculating a selector's specificity</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.31.#q38"> + <tbody id="sC.2.31.#q21.38"> <!-- 0 tests --> </tbody> <tbody id="sC.2.32"> @@ -378,7 +381,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c6.4.4">C.2.32 Section 6.4.4 Precedence of non-CSS presentational hints</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.32.#q39"> + <tbody id="sC.2.32.#q21.39"> <!-- 0 tests --> </tbody> <tbody id="sC.2.33"> @@ -387,7 +390,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c7.3">C.2.33 Section 7.3 Recognized Media Types</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.33.#q40"> + <tbody id="sC.2.33.#q21.40"> <!-- 0 tests --> </tbody> <tbody id="sC.2.34"> @@ -396,7 +399,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c7.3.1">C.2.34 Section 7.3.1 Media Groups</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.34.#q41"> + <tbody id="sC.2.34.#q21.41"> <!-- 0 tests --> </tbody> <tbody id="sC.2.35"> @@ -405,7 +408,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c8.3">C.2.35 Section 8.3 Margin properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.35.#q42"> + <tbody id="sC.2.35.#q21.42"> <!-- 0 tests --> </tbody> <tbody id="sC.2.36"> @@ -414,7 +417,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c8.3.1">C.2.36 Section 8.3.1 Collapsing margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.36.#q43"> + <tbody id="sC.2.36.#q21.43"> <!-- 0 tests --> </tbody> <tbody id="sC.2.37"> @@ -423,7 +426,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c8.4">C.2.37 Section 8.4 Padding properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.37.#q44"> + <tbody id="sC.2.37.#q21.44"> <!-- 0 tests --> </tbody> <tbody id="sC.2.38"> @@ -432,7 +435,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c8.5.2">C.2.38 Section 8.5.2 Border color</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.38.#q45"> + <tbody id="sC.2.38.#q21.45"> <!-- 0 tests --> </tbody> <tbody id="sC.2.39"> @@ -441,7 +444,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c8.5.3">C.2.39 Section 8.5.3 Border style</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.39.#q46"> + <tbody id="sC.2.39.#q21.46"> <!-- 0 tests --> </tbody> <tbody id="sC.2.40"> @@ -450,7 +453,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c8.6">C.2.40 Section 8.6 The box model for inline elements in bidirectional context</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.40.#q47"> + <tbody id="sC.2.40.#q21.47"> <!-- 0 tests --> </tbody> <tbody id="sC.2.41"> @@ -459,7 +462,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.1.2">C.2.41 Section 9.1.2 Containing blocks</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.41.#q48"> + <tbody id="sC.2.41.#q21.48"> <!-- 0 tests --> </tbody> <tbody id="sC.2.42"> @@ -468,7 +471,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.2.1.1">C.2.42 Section 9.2.1.1 Anonymous block boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.42.#q49"> + <tbody id="sC.2.42.#q21.49"> <!-- 0 tests --> </tbody> <tbody id="sC.2.43"> @@ -477,7 +480,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.2.2.1">C.2.43 Section 9.2.2.1 Anonymous inline boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.43.#q50"> + <tbody id="sC.2.43.#q21.50"> <!-- 0 tests --> </tbody> <tbody id="sC.2.44"> @@ -486,7 +489,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.2.3">C.2.44 Section 9.2.3 Run-in boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.44.#q51"> + <tbody id="sC.2.44.#q21.51"> <!-- 0 tests --> </tbody> <tbody id="sC.2.45"> @@ -495,7 +498,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.2.4">C.2.45 Section 9.2.4 The 'display' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.45.#q52"> + <tbody id="sC.2.45.#q21.52"> <!-- 0 tests --> </tbody> <tbody id="sC.2.46"> @@ -504,7 +507,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.3.1">C.2.46 Section 9.3.1 Choosing a positioning scheme</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.46.#q53"> + <tbody id="sC.2.46.#q21.53"> <!-- 0 tests --> </tbody> <tbody id="sC.2.47"> @@ -513,7 +516,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.3.2">C.2.47 Section 9.3.2 Box offsets</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.47.#q54"> + <tbody id="sC.2.47.#q21.54"> <!-- 0 tests --> </tbody> <tbody id="sC.2.48"> @@ -522,7 +525,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.4.1">C.2.48 Section 9.4.1 Block formatting contexts</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.48.#q55"> + <tbody id="sC.2.48.#q21.55"> <!-- 0 tests --> </tbody> <tbody id="sC.2.49"> @@ -531,7 +534,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.4.2">C.2.49 Section 9.4.2 Inline formatting context</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.49.#q56"> + <tbody id="sC.2.49.#q21.56"> <!-- 0 tests --> </tbody> <tbody id="sC.2.50"> @@ -540,7 +543,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.4.3">C.2.50 Section 9.4.3 Relative positioning</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.50.#q57"> + <tbody id="sC.2.50.#q21.57"> <!-- 0 tests --> </tbody> <tbody id="sC.2.51"> @@ -549,7 +552,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.5">C.2.51 Section 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.51.#q58"> + <tbody id="sC.2.51.#q21.58"> <!-- 0 tests --> </tbody> <tbody id="sC.2.52"> @@ -558,7 +561,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.5.1">C.2.52 Section 9.5.1 Positioning the float</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.52.#q59"> + <tbody id="sC.2.52.#q21.59"> <!-- 0 tests --> </tbody> <tbody id="sC.2.53"> @@ -567,7 +570,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.5.2">C.2.53 Section 9.5.2 Controlling flow next to floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.53.#q60"> + <tbody id="sC.2.53.#q21.60"> <!-- 0 tests --> </tbody> <tbody id="sC.2.54"> @@ -576,7 +579,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.7">C.2.54 Section 9.7 Relationships between 'display', 'position', and 'float'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.54.#q61"> + <tbody id="sC.2.54.#q21.61"> <!-- 0 tests --> </tbody> <tbody id="sC.2.55"> @@ -585,7 +588,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.9">C.2.55 Section 9.9 Layered presentation</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.55.#q62"> + <tbody id="sC.2.55.#q21.62"> <!-- 0 tests --> </tbody> <tbody id="sC.2.56"> @@ -594,7 +597,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.10">C.2.56 Section 9.10 Text direction</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.56.#q63"> + <tbody id="sC.2.56.#q21.63"> <!-- 0 tests --> </tbody> <tbody id="sC.2.57"> @@ -603,7 +606,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10">C.2.57 Chapter 10 Visual formatting model details</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.57.#q64"> + <tbody id="sC.2.57.#q21.64"> <!-- 0 tests --> </tbody> <tbody id="sC.2.58"> @@ -615,7 +618,7 @@ <tbody id="sC.2.58.#initial-containing-block"> <!-- 0 tests --> </tbody> - <tbody id="sC.2.58.#q65"> + <tbody id="sC.2.58.#q21.65"> <!-- 0 tests --> </tbody> <tbody id="sC.2.59"> @@ -624,7 +627,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.2">C.2.59 Section 10.2 Content width</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.59.#q66"> + <tbody id="sC.2.59.#q21.66"> <!-- 0 tests --> </tbody> <tbody id="sC.2.60"> @@ -633,7 +636,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.3">C.2.60 Section 10.3 Calculating widths and margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.60.#q67"> + <tbody id="sC.2.60.#q21.67"> <!-- 0 tests --> </tbody> <tbody id="sC.2.61"> @@ -642,7 +645,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.3.2">C.2.61 Section 10.3.2 Inline, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.61.#q68"> + <tbody id="sC.2.61.#q21.68"> <!-- 0 tests --> </tbody> <tbody id="sC.2.62"> @@ -651,7 +654,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.3.3">C.2.62 Section 10.3.3 Block-level, non-replaced elements in normal flow</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.62.#q69"> + <tbody id="sC.2.62.#q21.69"> <!-- 0 tests --> </tbody> <tbody id="sC.2.63"> @@ -660,7 +663,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.3.4">C.2.63 Section 10.3.4 Block-level, replaced elements in normal flow</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.63.#q70"> + <tbody id="sC.2.63.#q21.70"> <!-- 0 tests --> </tbody> <tbody id="sC.2.64"> @@ -669,7 +672,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.3.5">C.2.64 Section 10.3.5 Floating, non-replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.64.#q71"> + <tbody id="sC.2.64.#q21.71"> <!-- 0 tests --> </tbody> <tbody id="sC.2.65"> @@ -678,7 +681,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.3.6">C.2.65 Section 10.3.6 Floating, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.65.#q72"> + <tbody id="sC.2.65.#q21.72"> <!-- 0 tests --> </tbody> <tbody id="sC.2.66"> @@ -687,7 +690,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.3.7">C.2.66 Section 10.3.7 Absolutely positioned, non-replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.66.#q73"> + <tbody id="sC.2.66.#q21.73"> <!-- 0 tests --> </tbody> <tbody id="sC.2.67"> @@ -696,7 +699,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.3.8">C.2.67 Section 10.3.8 Absolutely positioned, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.67.#q74"> + <tbody id="sC.2.67.#q21.74"> <!-- 0 tests --> </tbody> <tbody id="sC.2.68"> @@ -705,7 +708,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.4">C.2.68 Section 10.4 Minimum and maximum widths</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.68.#q75"> + <tbody id="sC.2.68.#q21.75"> <!-- 0 tests --> </tbody> <tbody id="sC.2.69"> @@ -714,7 +717,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.5">C.2.69 Section 10.5 Content height</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.69.#q76"> + <tbody id="sC.2.69.#q21.76"> <!-- 0 tests --> </tbody> <tbody id="sC.2.70"> @@ -723,7 +726,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.6">C.2.70 Section 10.6 Calculating heights and margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.70.#q77"> + <tbody id="sC.2.70.#q21.77"> <!-- 0 tests --> </tbody> <tbody id="sC.2.71"> @@ -732,7 +735,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.6.1">C.2.71 Section 10.6.1 Inline, non-replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.71.#q78"> + <tbody id="sC.2.71.#q21.78"> <!-- 0 tests --> </tbody> <tbody id="sC.2.72"> @@ -741,7 +744,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.6.2">C.2.72 Section 10.6.2 Inline replaced elements, block-level replaced elements in normal flow, 'inline-block' replaced elements in normal flow and floating replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.72.#q79"> + <tbody id="sC.2.72.#q21.79"> <!-- 0 tests --> </tbody> <tbody id="sC.2.73"> @@ -750,7 +753,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.6.3">C.2.73 Section 10.6.3 Block-level non-replaced elements in normal flow when 'overflow' computes to 'visible'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.73.#q80"> + <tbody id="sC.2.73.#q21.80"> <!-- 0 tests --> </tbody> <tbody id="sC.2.74"> @@ -759,7 +762,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.6.4">C.2.74 Section 10.6.4 Absolutely positioned, non-replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.74.#q81"> + <tbody id="sC.2.74.#q21.81"> <!-- 0 tests --> </tbody> <tbody id="sC.2.75"> @@ -768,7 +771,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.6.5">C.2.75 Section 10.6.5 Absolutely positioned, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.75.#q82"> + <tbody id="sC.2.75.#q21.82"> <!-- 0 tests --> </tbody> <tbody id="sC.2.76"> @@ -777,7 +780,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.7">C.2.76 Section 10.7 Minimum and maximum heights</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.76.#q83"> + <tbody id="sC.2.76.#q21.83"> <!-- 0 tests --> </tbody> <tbody id="sC.2.77"> @@ -786,7 +789,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.8">C.2.77 Section 10.8 Line height calculations</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.77.#q84"> + <tbody id="sC.2.77.#q21.84"> <!-- 0 tests --> </tbody> <tbody id="sC.2.78"> @@ -795,7 +798,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.8.1">C.2.78 Section 10.8.1 Leading and half-leading</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.78.#q85"> + <tbody id="sC.2.78.#q21.85"> <!-- 0 tests --> </tbody> <tbody id="sC.2.79"> @@ -804,7 +807,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c11.1">C.2.79 Section 11.1 Overflow and clipping</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.79.#q86"> + <tbody id="sC.2.79.#q21.86"> <!-- 0 tests --> </tbody> <tbody id="sC.2.80"> @@ -813,7 +816,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c11.1.1">C.2.80 Section 11.1.1 Overflow</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.80.#q87"> + <tbody id="sC.2.80.#q21.87"> <!-- 0 tests --> </tbody> <tbody id="sC.2.81"> @@ -822,7 +825,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c11.1.2">C.2.81 Section 11.1.2 Clipping: the 'clip' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.81.#q88"> + <tbody id="sC.2.81.#q21.88"> <!-- 0 tests --> </tbody> <tbody id="sC.2.82"> @@ -831,7 +834,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c11.2">C.2.82 Section 11.2 Visibility</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.82.#q89"> + <tbody id="sC.2.82.#q21.89"> <!-- 0 tests --> </tbody> <tbody id="sC.2.83"> @@ -840,7 +843,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c12">C.2.83 Chapter 12 Generated content, automatic numbering, and lists</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.83.#q90"> + <tbody id="sC.2.83.#q21.90"> <!-- 0 tests --> </tbody> <tbody id="sC.2.84"> @@ -849,7 +852,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c12.1">C.2.84 Section 12.1 The :before and :after pseudo-elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.84.#q91"> + <tbody id="sC.2.84.#q21.91"> <!-- 0 tests --> </tbody> <tbody id="sC.2.85"> @@ -858,7 +861,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c12.2">C.2.85 Section 12.2 The 'content' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.85.#q92"> + <tbody id="sC.2.85.#q21.92"> <!-- 0 tests --> </tbody> <tbody id="sC.2.86"> @@ -867,7 +870,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c12.3.2">C.2.86 Section 12.3.2 Inserting quotes with the 'content' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.86.#q93"> + <tbody id="sC.2.86.#q21.93"> <!-- 0 tests --> </tbody> <tbody id="sC.2.87"> @@ -876,7 +879,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c12.4">C.2.87 Section 12.4 Automatic counters and numbering</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.87.#q94"> + <tbody id="sC.2.87.#q21.94"> <!-- 0 tests --> </tbody> <tbody id="sC.2.88"> @@ -885,7 +888,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c12.4.1">C.2.88 Section 12.4.1 Nested counters and scope</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.88.#q95"> + <tbody id="sC.2.88.#q21.95"> <!-- 0 tests --> </tbody> <tbody id="sC.2.89"> @@ -894,7 +897,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c12.5">C.2.89 Section 12.5 Lists</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.89.#q96"> + <tbody id="sC.2.89.#q21.96"> <!-- 0 tests --> </tbody> <tbody id="sC.2.90"> @@ -903,7 +906,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c12.5.1">C.2.90 Section 12.5.1 Lists</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.90.#q97"> + <tbody id="sC.2.90.#q21.97"> <!-- 0 tests --> </tbody> <tbody id="sC.2.91"> @@ -912,7 +915,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c13.1">C.2.91 Chapter 13 Paged media</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.91.#q98"> + <tbody id="sC.2.91.#q21.98"> <!-- 0 tests --> </tbody> <tbody id="sC.2.92"> @@ -921,7 +924,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c13.2.2">C.2.92 Section 13.2.2 Page selectors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.92.#q99"> + <tbody id="sC.2.92.#q21.99"> <!-- 0 tests --> </tbody> <tbody id="sC.2.93"> @@ -930,7 +933,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c13.3.1">C.2.93 Section 13.3.1 Page break properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.93.#q100"> + <tbody id="sC.2.93.#q21.100"> <!-- 0 tests --> </tbody> <tbody id="sC.2.94"> @@ -939,7 +942,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c13.3.3">C.2.94 Section 13.3.3 Allowed page breaks</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.94.#q101"> + <tbody id="sC.2.94.#q21.101"> <!-- 0 tests --> </tbody> <tbody id="sC.2.95"> @@ -948,7 +951,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c14.2.1">C.2.95 Section 14.2.1 Background properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.95.#q102"> + <tbody id="sC.2.95.#q21.102"> <!-- 0 tests --> </tbody> <tbody id="sC.2.96"> @@ -957,7 +960,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c14.3">C.2.96 Section 14.3 Gamma correction</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.96.#q103"> + <tbody id="sC.2.96.#q21.103"> <!-- 0 tests --> </tbody> <tbody id="sC.2.97"> @@ -966,7 +969,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c15">C.2.97 Chapter 15 Fonts</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.97.#q104"> + <tbody id="sC.2.97.#q21.104"> <!-- 0 tests --> </tbody> <tbody id="sC.2.98"> @@ -975,7 +978,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c15.2">C.2.98 Section 15.2 Font matching algorithm</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.98.#q105"> + <tbody id="sC.2.98.#q21.105"> <!-- 0 tests --> </tbody> <tbody id="sC.2.99"> @@ -984,7 +987,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c15.3">C.2.99 Section 15.2.2 Font family</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.99.#q106"> + <tbody id="sC.2.99.#q21.106"> <!-- 0 tests --> </tbody> <tbody id="sC.2.100"> @@ -993,7 +996,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c15.5">C.2.100 Section 15.5 Small-caps</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.100.#q107"> + <tbody id="sC.2.100.#q21.107"> <!-- 0 tests --> </tbody> <tbody id="sC.2.101"> @@ -1002,7 +1005,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c15.6">C.2.101 Section 15.6 Font boldness</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.101.#q108"> + <tbody id="sC.2.101.#q21.108"> <!-- 0 tests --> </tbody> <tbody id="sC.2.102"> @@ -1011,7 +1014,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c15.7">C.2.102 Section 15.7 Font size</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.102.#q109"> + <tbody id="sC.2.102.#q21.109"> <!-- 0 tests --> </tbody> <tbody id="sC.2.103"> @@ -1020,7 +1023,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c16">C.2.103 Chapter 16 Text</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.103.#q110"> + <tbody id="sC.2.103.#q21.110"> <!-- 0 tests --> </tbody> <tbody id="sC.2.104"> @@ -1029,7 +1032,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c16.2">C.2.104 Section 16.2 Alignment</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.104.#q111"> + <tbody id="sC.2.104.#q21.111"> <!-- 0 tests --> </tbody> <tbody id="sC.2.105"> @@ -1038,7 +1041,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c16.3.1">C.2.105 Section 16.3.1 Underlining, over lining, striking, and blinking</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.105.#q112"> + <tbody id="sC.2.105.#q21.112"> <!-- 0 tests --> </tbody> <tbody id="sC.2.106"> @@ -1047,7 +1050,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c16.4">C.2.106 Section 16.4 Letter and word spacing</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.106.#q113"> + <tbody id="sC.2.106.#q21.113"> <!-- 0 tests --> </tbody> <tbody id="sC.2.107"> @@ -1056,7 +1059,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c16.5">C.2.107 Section 16.5 Capitalization</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.107.#q114"> + <tbody id="sC.2.107.#q21.114"> <!-- 0 tests --> </tbody> <tbody id="sC.2.108"> @@ -1065,7 +1068,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c16.6">C.2.108 Section 16.6 White space</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.108.#q115"> + <tbody id="sC.2.108.#q21.115"> <!-- 0 tests --> </tbody> <tbody id="sC.2.109"> @@ -1074,7 +1077,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17">C.2.109 Chapter 17 Tables</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.109.#q116"> + <tbody id="sC.2.109.#q21.116"> <!-- 0 tests --> </tbody> <tbody id="sC.2.110"> @@ -1083,7 +1086,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.2">C.2.110 Section 17.2 The CSS table model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.110.#q117"> + <tbody id="sC.2.110.#q21.117"> <!-- 0 tests --> </tbody> <tbody id="sC.2.111"> @@ -1092,7 +1095,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.2.1">C.2.111 Section 17.2.1 Anonymous table objects</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.111.#q118"> + <tbody id="sC.2.111.#q21.118"> <!-- 0 tests --> </tbody> <tbody id="sC.2.112"> @@ -1101,7 +1104,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.4">C.2.112 Section 17.4 Tables in the visual formatting model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.112.#q119"> + <tbody id="sC.2.112.#q21.119"> <!-- 0 tests --> </tbody> <tbody id="sC.2.113"> @@ -1110,7 +1113,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.4.1">C.2.113 Section 17.4.1 Caption position and alignment</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.113.#q120"> + <tbody id="sC.2.113.#q21.120"> <!-- 0 tests --> </tbody> <tbody id="sC.2.114"> @@ -1119,7 +1122,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.5">C.2.114 Section 17.5 Visual layout of table contents</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.114.#q121"> + <tbody id="sC.2.114.#q21.121"> <!-- 0 tests --> </tbody> <tbody id="sC.2.115"> @@ -1128,7 +1131,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.5.1">C.2.115 Section 17.5.1 Table layers and transparency</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.115.#q122"> + <tbody id="sC.2.115.#q21.122"> <!-- 0 tests --> </tbody> <tbody id="sC.2.116"> @@ -1137,7 +1140,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.5.2.1">C.2.116 Section 17.5.2.1 Fixed table layout</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.116.#q123"> + <tbody id="sC.2.116.#q21.123"> <!-- 0 tests --> </tbody> <tbody id="sC.2.117"> @@ -1146,7 +1149,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.5.2.2">C.2.117 Section 17.5.2.2 Automatic table layout</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.117.#q124"> + <tbody id="sC.2.117.#q21.124"> <!-- 0 tests --> </tbody> <tbody id="sC.2.118"> @@ -1155,7 +1158,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.5.3">C.2.118 Section 17.5.3 Table height algorithms</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.118.#q125"> + <tbody id="sC.2.118.#q21.125"> <!-- 0 tests --> </tbody> <tbody id="sC.2.119"> @@ -1164,7 +1167,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.5.4">C.2.119 Section 17.5.4 Horizontal alignment in a column</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.119.#q126"> + <tbody id="sC.2.119.#q21.126"> <!-- 0 tests --> </tbody> <tbody id="sC.2.120"> @@ -1173,7 +1176,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.6">C.2.120 Section 17.6 Borders</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.120.#q127"> + <tbody id="sC.2.120.#q21.127"> <!-- 0 tests --> </tbody> <tbody id="sC.2.121"> @@ -1182,7 +1185,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.6.1">C.2.121 Section 17.6.1 The separated borders model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.121.#q128"> + <tbody id="sC.2.121.#q21.128"> <!-- 0 tests --> </tbody> <tbody id="sC.2.122"> @@ -1191,7 +1194,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.6.1.1">C.2.122 Section 17.6.1.1 Borders and Backgrounds around empty cells</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.122.#q129"> + <tbody id="sC.2.122.#q21.129"> <!-- 0 tests --> </tbody> <tbody id="sC.2.123"> @@ -1200,7 +1203,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.6.2">C.2.123 Section 17.6.2 The collapsing border model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.123.#q130"> + <tbody id="sC.2.123.#q21.130"> <!-- 0 tests --> </tbody> <tbody id="sC.2.124"> @@ -1209,7 +1212,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.6.2.1">C.2.124 Section 17.6.2.1 Border conflict resolution</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.124.#q131"> + <tbody id="sC.2.124.#q21.131"> <!-- 0 tests --> </tbody> <tbody id="sC.2.125"> @@ -1218,7 +1221,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c18.1">C.2.125 Section 18.1 Cursors: the 'cursor' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.125.#q132"> + <tbody id="sC.2.125.#q21.132"> <!-- 0 tests --> </tbody> <tbody id="sC.2.126"> @@ -1227,7 +1230,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c18.4">C.2.126 Section 18.4 Dynamic outlines</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.126.#q133"> + <tbody id="sC.2.126.#q21.133"> <!-- 0 tests --> </tbody> <tbody id="sC.2.127"> @@ -1236,7 +1239,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s-12">C.2.127 Chapter 12 Generated content, automatic numbering, and lists</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.127.#q134"> + <tbody id="sC.2.127.#q21.134"> <!-- 0 tests --> </tbody> <tbody id="sC.2.128"> @@ -1245,7 +1248,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#cA">C.2.128 Appendix A. Aural style sheets</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.128.#q135"> + <tbody id="sC.2.128.#q21.135"> <!-- 0 tests --> </tbody> <tbody id="sC.2.129"> @@ -1254,7 +1257,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#cA.5">C.2.129 Appendix A Section 5 Pause properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.129.#q136"> + <tbody id="sC.2.129.#q21.136"> <!-- 0 tests --> </tbody> <tbody id="sC.2.130"> @@ -1263,7 +1266,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#cA.6">C.2.130 Appendix A Section 6 Cue properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.130.#q137"> + <tbody id="sC.2.130.#q21.137"> <!-- 0 tests --> </tbody> <tbody id="sC.2.131"> @@ -1272,7 +1275,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#cA.7">C.2.131 Appendix A Section 7 Mixing properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.131.#q138"> + <tbody id="sC.2.131.#q21.138"> <!-- 0 tests --> </tbody> <tbody id="sC.2.132"> @@ -1281,7 +1284,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#cB">C.2.132 Appendix B Bibliography</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.132.#q139"> + <tbody id="sC.2.132.#q21.139"> <!-- 0 tests --> </tbody> <tbody id="sC.2.133"> @@ -1290,7 +1293,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#other">C.2.133 Other</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.133.#q140"> + <tbody id="sC.2.133.#q21.140"> <!-- 0 tests --> </tbody> <tbody id="sC.3"> @@ -1305,19 +1308,8 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x-shorthand-inherit">C.3.1 Shorthand properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.1.#q142"> - <!-- 1 tests --> - <tr id="font-045-C.3.1.#q142" class="ahem invalid"> - <td> - <a href="font-045.xht">font-045</a></td> - <td></td> - <td><abbr class="ahem" title="Requires Ahem font">Ahem</abbr><abbr class="invalid" title="Tests invalid CSS">Invalid</abbr></td> - <td>font - inherit keyword value - <ul class="assert"> - <li>The inherit keyword value cannot mix with other subproperty values</li> - </ul> - </td> - </tr> + <tbody id="sC.3.1.#q21.142"> + <!-- 0 tests --> </tbody> <tbody id="sC.3.2"> <tr><th colspan="4" scope="rowgroup"> @@ -1325,7 +1317,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x-applies-table">C.3.2 Applies to</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.2.#q143"> + <tbody id="sC.3.2.#q21.143"> <!-- 0 tests --> </tbody> <tbody id="sC.3.3"> @@ -1334,7 +1326,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x4.1.1">C.3.3 Section 4.1.1 (and G2)</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.3.#q144"> + <tbody id="sC.3.3.#q21.144"> <!-- 0 tests --> </tbody> <tbody id="sC.3.4"> @@ -1343,7 +1335,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x4.1.3">C.3.4 Section 4.1.3 Characters and case</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.4.#q145"> + <tbody id="sC.3.4.#q21.145"> <!-- 0 tests --> </tbody> <tbody id="sC.3.5"> @@ -1352,7 +1344,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x4.3">C.3.5 Section 4.3 (Double sign problem)</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.5.#q146"> + <tbody id="sC.3.5.#q21.146"> <!-- 0 tests --> </tbody> <tbody id="sC.3.6"> @@ -1361,7 +1353,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x4.3.2">C.3.6 Section 4.3.2 Lengths</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.6.#q147"> + <tbody id="sC.3.6.#q21.147"> <!-- 0 tests --> </tbody> <tbody id="sC.3.7"> @@ -1370,7 +1362,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x4.3.3">C.3.7 Section 4.3.3 Percentages</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.7.#q148"> + <tbody id="sC.3.7.#q21.148"> <!-- 0 tests --> </tbody> <tbody id="sC.3.8"> @@ -1379,7 +1371,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x4.3.4">C.3.8 Section 4.3.4 URLs and URIs</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.8.#q149"> + <tbody id="sC.3.8.#q21.149"> <!-- 0 tests --> </tbody> <tbody id="sC.3.9"> @@ -1388,7 +1380,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x4.3.5">C.3.9 Section 4.3.5 Counters</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.9.#q150"> + <tbody id="sC.3.9.#q21.150"> <!-- 0 tests --> </tbody> <tbody id="sC.3.10"> @@ -1397,7 +1389,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x4.3.6">C.3.10 Section 4.3.6 Colors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.10.#q151"> + <tbody id="sC.3.10.#q21.151"> <!-- 0 tests --> </tbody> <tbody id="sC.3.11"> @@ -1406,7 +1398,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x4.3.7">C.3.11 Section 4.3.7 Strings</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.11.#q152"> + <tbody id="sC.3.11.#q21.152"> <!-- 0 tests --> </tbody> <tbody id="sC.3.12"> @@ -1415,7 +1407,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x5.10">C.3.12 Section 5.10 Pseudo-elements and pseudo-classes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.12.#q153"> + <tbody id="sC.3.12.#q21.153"> <!-- 0 tests --> </tbody> <tbody id="sC.3.13"> @@ -1424,7 +1416,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x6.4">C.3.13 Section 6.4 The cascade</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.13.#q154"> + <tbody id="sC.3.13.#q21.154"> <!-- 0 tests --> </tbody> <tbody id="sC.3.14"> @@ -1433,7 +1425,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x8.1">C.3.14 Section 8.1 Box Dimensions</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.14.#q155"> + <tbody id="sC.3.14.#q21.155"> <!-- 0 tests --> </tbody> <tbody id="sC.3.15"> @@ -1442,7 +1434,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x8.2">C.3.15 Section 8.2 Example of margins, padding, and borders</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.15.#q156"> + <tbody id="sC.3.15.#q21.156"> <!-- 0 tests --> </tbody> <tbody id="sC.3.16"> @@ -1451,7 +1443,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x8.5.4">C.3.16 Section 8.5.4 Border shorthand properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.16.#q157"> + <tbody id="sC.3.16.#q21.157"> <!-- 0 tests --> </tbody> <tbody id="sC.3.17"> @@ -1460,7 +1452,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.2.1">C.3.17 Section 9.2.1 Block-level elements and block boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.17.#q158"> + <tbody id="sC.3.17.#q21.158"> <!-- 0 tests --> </tbody> <tbody id="sC.3.18"> @@ -1469,7 +1461,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.3.1">C.3.18 Section 9.3.1 Choosing a positioning scheme</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.18.#q159"> + <tbody id="sC.3.18.#q21.159"> <!-- 0 tests --> </tbody> <tbody id="sC.3.19"> @@ -1478,7 +1470,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.3.2">C.3.19 Section 9.3.2 Box offsets</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.19.#q160"> + <tbody id="sC.3.19.#q21.160"> <!-- 0 tests --> </tbody> <tbody id="sC.3.20"> @@ -1487,7 +1479,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.4.1">C.3.20 Section 9.4.1 Block formatting contexts</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.20.#q161"> + <tbody id="sC.3.20.#q21.161"> <!-- 0 tests --> </tbody> <tbody id="sC.3.21"> @@ -1496,7 +1488,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.4.2">C.3.21 Section 9.4.2 Inline formatting context</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.21.#q162"> + <tbody id="sC.3.21.#q21.162"> <!-- 0 tests --> </tbody> <tbody id="sC.3.22"> @@ -1505,7 +1497,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.4.3">C.3.22 Section 9.4.3 Relative positioning</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.22.#q163"> + <tbody id="sC.3.22.#q21.163"> <!-- 0 tests --> </tbody> <tbody id="sC.3.23"> @@ -1514,7 +1506,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.5">C.3.23 Section 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.23.#q164"> + <tbody id="sC.3.23.#q21.164"> <!-- 0 tests --> </tbody> <tbody id="sC.3.24"> @@ -1523,7 +1515,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.5.1">C.3.24 Section 9.5.1 Positioning the float</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.24.#q165"> + <tbody id="sC.3.24.#q21.165"> <!-- 0 tests --> </tbody> <tbody id="sC.3.25"> @@ -1532,7 +1524,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.5.2">C.3.25 Section 9.5.2 Controlling flow next to floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.25.#q166"> + <tbody id="sC.3.25.#q21.166"> <!-- 0 tests --> </tbody> <tbody id="sC.3.26"> @@ -1541,7 +1533,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.6">C.3.26 Section 9.6 Absolute positioning</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.26.#q167"> + <tbody id="sC.3.26.#q21.167"> <!-- 0 tests --> </tbody> <tbody id="sC.3.27"> @@ -1550,7 +1542,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.7">C.3.27 Section 9.7 Relationships between 'display', 'position', and 'float'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.27.#q168"> + <tbody id="sC.3.27.#q21.168"> <!-- 0 tests --> </tbody> <tbody id="sC.3.28"> @@ -1559,7 +1551,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.10">C.3.28 Section 9.10 Text direction</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.28.#q169"> + <tbody id="sC.3.28.#q21.169"> <!-- 0 tests --> </tbody> <tbody id="sC.3.29"> @@ -1568,7 +1560,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x10.1">C.3.29 Section 10.1 Definition of "containing block"</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.29.#q170"> + <tbody id="sC.3.29.#q21.170"> <!-- 0 tests --> </tbody> <tbody id="sC.3.30"> @@ -1577,7 +1569,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x10.3.3">C.3.30 Section 10.3.3 Block-level, non-replaced elements in normal flow</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.30.#q171"> + <tbody id="sC.3.30.#q21.171"> <!-- 0 tests --> </tbody> <tbody id="sC.3.31"> @@ -1586,7 +1578,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x10.4">C.3.31 Section 10.4 Minimum and maximum widths</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.31.#q172"> + <tbody id="sC.3.31.#q21.172"> <!-- 0 tests --> </tbody> <tbody id="sC.3.32"> @@ -1595,7 +1587,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x10.6.3">C.3.32 Section 10.6.3 Block-level non-replaced elements in normal flow when 'overflow' computes to 'visible'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.32.#q173"> + <tbody id="sC.3.32.#q21.173"> <!-- 0 tests --> </tbody> <tbody id="sC.3.33"> @@ -1604,7 +1596,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x10.7">C.3.33 Section 10.7 Minimum and maximum heights</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.33.#q174"> + <tbody id="sC.3.33.#q21.174"> <!-- 0 tests --> </tbody> <tbody id="sC.3.34"> @@ -1613,7 +1605,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x11.1.1">C.3.34 Section 11.1.1 Overflow</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.34.#q175"> + <tbody id="sC.3.34.#q21.175"> <!-- 0 tests --> </tbody> <tbody id="sC.3.35"> @@ -1622,7 +1614,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x11.1.2">C.3.35 Section 11.1.2 Clipping: the 'clip' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.35.#q176"> + <tbody id="sC.3.35.#q21.176"> <!-- 0 tests --> </tbody> <tbody id="sC.3.36"> @@ -1631,7 +1623,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x11.2">C.3.36 Section 11.2 Visibility</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.36.#q177"> + <tbody id="sC.3.36.#q21.177"> <!-- 0 tests --> </tbody> <tbody id="sC.3.37"> @@ -1640,7 +1632,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x12.4.2">C.3.37 Section 12.4.2 Counter styles</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.37.#q178"> + <tbody id="sC.3.37.#q21.178"> <!-- 0 tests --> </tbody> <tbody id="sC.3.38"> @@ -1649,7 +1641,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x12.6.2">C.3.38 Section 12.6.2 Lists</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.38.#q179"> + <tbody id="sC.3.38.#q21.179"> <!-- 0 tests --> </tbody> <tbody id="sC.3.39"> @@ -1658,7 +1650,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x14.2">C.3.39 Section 14.2 The background</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.39.#q180"> + <tbody id="sC.3.39.#q21.180"> <!-- 0 tests --> </tbody> <tbody id="sC.3.40"> @@ -1667,7 +1659,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x14.2.1">C.3.40 Section 14.2.1 Background properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.40.#q181"> + <tbody id="sC.3.40.#q21.181"> <!-- 0 tests --> </tbody> <tbody id="sC.3.41"> @@ -1676,7 +1668,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x15.2">C.3.41 Section 15.2 Font matching algorithm</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.41.#q182"> + <tbody id="sC.3.41.#q21.182"> <!-- 0 tests --> </tbody> <tbody id="sC.3.42"> @@ -1685,7 +1677,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x15.7">C.3.42 Section 15.7 Font size</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.42.#q183"> + <tbody id="sC.3.42.#q21.183"> <!-- 0 tests --> </tbody> <tbody id="sC.3.43"> @@ -1694,7 +1686,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x16.1">C.3.43 Section 16.1 Indentation</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.43.#q184"> + <tbody id="sC.3.43.#q21.184"> <!-- 0 tests --> </tbody> <tbody id="sC.3.44"> @@ -1703,7 +1695,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x16.2">C.3.44 Section 16.2 Alignment</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.44.#q185"> + <tbody id="sC.3.44.#q21.185"> <!-- 0 tests --> </tbody> <tbody id="sC.3.45"> @@ -1712,7 +1704,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x17.2">C.3.45 Section 17.2 The CSS table model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.45.#q186"> + <tbody id="sC.3.45.#q21.186"> <!-- 0 tests --> </tbody> <tbody id="sC.3.46"> @@ -1721,7 +1713,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x17.2.1">C.3.46 Section 17.2.1 Anonymous table objects</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.46.#q187"> + <tbody id="sC.3.46.#q21.187"> <!-- 0 tests --> </tbody> <tbody id="sC.3.47"> @@ -1730,7 +1722,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x17.4">C.3.47 Section 17.4 Tables in the visual formatting model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.47.#q188"> + <tbody id="sC.3.47.#q21.188"> <!-- 0 tests --> </tbody> <tbody id="sC.3.48"> @@ -1739,7 +1731,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x17.5">C.3.48 Section 17.5 Visual layout of table contents</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.48.#q189"> + <tbody id="sC.3.48.#q21.189"> <!-- 0 tests --> </tbody> <tbody id="sC.3.49"> @@ -1748,7 +1740,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x17.5.1">C.3.49 Section 17.5.1 Table layers and transparency</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.49.#q190"> + <tbody id="sC.3.49.#q21.190"> <!-- 0 tests --> </tbody> <tbody id="sC.3.50"> @@ -1757,7 +1749,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x17.6.1">C.3.50 Section 17.6.1 The separated borders model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.50.#q191"> + <tbody id="sC.3.50.#q21.191"> <!-- 0 tests --> </tbody> <tbody id="sC.3.51"> @@ -1766,7 +1758,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x18.2">C.3.51 Section 18.2 System Colors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.51.#q192"> + <tbody id="sC.3.51.#q21.192"> <!-- 0 tests --> </tbody> <tbody id="sC.3.52"> @@ -1775,7 +1767,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#xE.2">C.3.52 Section E.2 Painting order</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.52.#q193"> + <tbody id="sC.3.52.#q21.193"> <!-- 0 tests --> </tbody> <tbody id="sC.4"> @@ -1790,7 +1782,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r2.1">C.4.1 Section 2.1 A brief CSS 2.1 tutorial for HTML</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.1.#q195"> + <tbody id="sC.4.1.#q21.195"> <!-- 0 tests --> </tbody> <tbody id="sC.4.2"> @@ -1799,7 +1791,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r2.2">C.4.2 Section 2.2 A brief CSS 2.1 tutorial for XML</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.2.#q196"> + <tbody id="sC.4.2.#q21.196"> <!-- 0 tests --> </tbody> <tbody id="sC.4.3"> @@ -1808,7 +1800,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r2.3">C.4.3 Section 2.3 The CSS 2.1 processing model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.3.#q197"> + <tbody id="sC.4.3.#q21.197"> <!-- 0 tests --> </tbody> <tbody id="sC.4.4"> @@ -1817,7 +1809,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r3.1">C.4.4 Section 3.1 Definitions</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.4.#q198"> + <tbody id="sC.4.4.#q21.198"> <!-- 0 tests --> </tbody> <tbody id="sC.4.5"> @@ -1826,7 +1818,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r4.1">C.4.5 Section 4.1 Syntax</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.5.#q199"> + <tbody id="sC.4.5.#q21.199"> <!-- 0 tests --> </tbody> <tbody id="sC.4.6"> @@ -1835,7 +1827,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r4.1.1">C.4.6 Section 4.1.1 Tokenization</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.6.#q200"> + <tbody id="sC.4.6.#q21.200"> <!-- 0 tests --> </tbody> <tbody id="sC.4.7"> @@ -1844,7 +1836,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r4.1.3">C.4.7 Section 4.1.3 Characters and case</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.7.#q201"> + <tbody id="sC.4.7.#q21.201"> <!-- 0 tests --> </tbody> <tbody id="sC.4.8"> @@ -1853,7 +1845,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r4.1.7">C.4.8 Section 4.1.7 Rule sets, declaration blocks, and selectors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.8.#q202"> + <tbody id="sC.4.8.#q21.202"> <!-- 0 tests --> </tbody> <tbody id="sC.4.9"> @@ -1862,7 +1854,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r4.2">C.4.9 Section 4.2 Rules for handling parsing errors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.9.#q203"> + <tbody id="sC.4.9.#q21.203"> <!-- 0 tests --> </tbody> <tbody id="sC.4.10"> @@ -1871,7 +1863,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r4.3.1">C.4.10 Section 4.3.1 Integers and real numbers</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.10.#q204"> + <tbody id="sC.4.10.#q21.204"> <!-- 0 tests --> </tbody> <tbody id="sC.4.11"> @@ -1880,7 +1872,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r4.3.2">C.4.11 Section 4.3.2 Lengths</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.11.#q205"> + <tbody id="sC.4.11.#q21.205"> <!-- 0 tests --> </tbody> <tbody id="sC.4.12"> @@ -1889,7 +1881,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r4.3.4">C.4.12 Section 4.3.4 URLs and URIs</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.12.#q206"> + <tbody id="sC.4.12.#q21.206"> <!-- 0 tests --> </tbody> <tbody id="sC.4.13"> @@ -1898,7 +1890,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r5.1">C.4.13 Section 5.1 Pattern matching</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.13.#q207"> + <tbody id="sC.4.13.#q21.207"> <!-- 0 tests --> </tbody> <tbody id="sC.4.14"> @@ -1907,7 +1899,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r5.7">C.4.14 Section 5.7 Adjacent sibling selectors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.14.#q208"> + <tbody id="sC.4.14.#q21.208"> <!-- 0 tests --> </tbody> <tbody id="sC.4.15"> @@ -1916,7 +1908,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r5.8.1">C.4.15 Section 5.8.1 Matching attributes and attribute values</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.15.#q209"> + <tbody id="sC.4.15.#q21.209"> <!-- 0 tests --> </tbody> <tbody id="sC.4.16"> @@ -1925,7 +1917,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r5.8.2">C.4.16 Section 5.8.2 Default attribute values in DTDs</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.16.#q210"> + <tbody id="sC.4.16.#q21.210"> <!-- 0 tests --> </tbody> <tbody id="sC.4.17"> @@ -1934,7 +1926,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r5.9">C.4.17 Section 5.9 ID selectors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.17.#q211"> + <tbody id="sC.4.17.#q21.211"> <!-- 0 tests --> </tbody> <tbody id="sC.4.18"> @@ -1943,7 +1935,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r5.11.3">C.4.18 Section 5.11.3 The dynamic pseudo-classes: :hover, :active, and :focus</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.18.#q212"> + <tbody id="sC.4.18.#q21.212"> <!-- 0 tests --> </tbody> <tbody id="sC.4.19"> @@ -1952,7 +1944,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r5.11.4">C.4.19 Section 5.11.4 The language pseudo-class: :lang</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.19.#q213"> + <tbody id="sC.4.19.#q21.213"> <!-- 0 tests --> </tbody> <tbody id="sC.4.20"> @@ -1961,7 +1953,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r5.12.2">C.4.20 Section 5.12.2 The :first-letter pseudo-element</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.20.#q214"> + <tbody id="sC.4.20.#q21.214"> <!-- 0 tests --> </tbody> <tbody id="sC.4.21"> @@ -1970,7 +1962,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r6.2">C.4.21 Section 6.2 Inheritance</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.21.#q215"> + <tbody id="sC.4.21.#q21.215"> <!-- 0 tests --> </tbody> <tbody id="sC.4.22"> @@ -1979,7 +1971,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r6.2.1">C.4.22 Section 6.2.1 The 'inherit' value</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.22.#q216"> + <tbody id="sC.4.22.#q21.216"> <!-- 0 tests --> </tbody> <tbody id="sC.4.23"> @@ -1988,7 +1980,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r6.3">C.4.23 Section 6.3 The @import rule</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.23.#q217"> + <tbody id="sC.4.23.#q21.217"> <!-- 0 tests --> </tbody> <tbody id="sC.4.24"> @@ -1997,7 +1989,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r6.4">C.4.24 Section 6.4 The Cascade</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.24.#q218"> + <tbody id="sC.4.24.#q21.218"> <!-- 0 tests --> </tbody> <tbody id="sC.4.25"> @@ -2006,7 +1998,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r6.4.1">C.4.25 Section 6.4.1 Cascading order</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.25.#q219"> + <tbody id="sC.4.25.#q21.219"> <!-- 0 tests --> </tbody> <tbody id="sC.4.26"> @@ -2015,7 +2007,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r6.4.3">C.4.26 Section 6.4.3 Calculating a selector's specificity</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.26.#q220"> + <tbody id="sC.4.26.#q21.220"> <!-- 0 tests --> </tbody> <tbody id="sC.4.27"> @@ -2024,7 +2016,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r7.2.1">C.4.27 Section 7.2.1 The @media rule</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.27.#q221"> + <tbody id="sC.4.27.#q21.221"> <!-- 0 tests --> </tbody> <tbody id="sC.4.28"> @@ -2033,7 +2025,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r7.3">C.4.28 Section 7.3 Recognized media types</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.28.#q222"> + <tbody id="sC.4.28.#q21.222"> <!-- 0 tests --> </tbody> <tbody id="sC.4.29"> @@ -2042,7 +2034,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r7.3.1">C.4.29 Section 7.3.1 Media groups</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.29.#q223"> + <tbody id="sC.4.29.#q21.223"> <!-- 0 tests --> </tbody> <tbody id="sC.4.30"> @@ -2051,7 +2043,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r8.1">C.4.30 Section 8.1 Box dimensions</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.30.#q224"> + <tbody id="sC.4.30.#q21.224"> <!-- 0 tests --> </tbody> <tbody id="sC.4.31"> @@ -2060,7 +2052,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r8.3">C.4.31 Section 8.3 Margin properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.31.#q225"> + <tbody id="sC.4.31.#q21.225"> <!-- 0 tests --> </tbody> <tbody id="sC.4.32"> @@ -2069,7 +2061,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r8.3.1">C.4.32 Section 8.3.1 Collapsing margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.32.#q226"> + <tbody id="sC.4.32.#q21.226"> <!-- 0 tests --> </tbody> <tbody id="sC.4.33"> @@ -2078,7 +2070,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r8.5.3">C.4.33 Section 8.5.3 Border style</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.33.#q227"> + <tbody id="sC.4.33.#q21.227"> <!-- 0 tests --> </tbody> <tbody id="sC.4.34"> @@ -2087,7 +2079,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r9.1.1">C.4.34 Section 9.1.1 The viewport</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.34.#q228"> + <tbody id="sC.4.34.#q21.228"> <!-- 0 tests --> </tbody> <tbody id="sC.4.35"> @@ -2096,7 +2088,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r9.2.4">C.4.35 Section 9.2.4 The 'display' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.35.#q229"> + <tbody id="sC.4.35.#q21.229"> <!-- 0 tests --> </tbody> <tbody id="sC.4.36"> @@ -2105,7 +2097,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r9.3.1">C.4.36 Section 9.3.1 Choosing a positioning scheme</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.36.#q230"> + <tbody id="sC.4.36.#q21.230"> <!-- 0 tests --> </tbody> <tbody id="sC.4.37"> @@ -2114,7 +2106,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r9.3.2">C.4.37 Section 9.3.2 Box offsets</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.37.#q231"> + <tbody id="sC.4.37.#q21.231"> <!-- 0 tests --> </tbody> <tbody id="sC.4.38"> @@ -2123,7 +2115,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r9.4.2">C.4.38 Section 9.4.2 Inline formatting context</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.38.#q232"> + <tbody id="sC.4.38.#q21.232"> <!-- 0 tests --> </tbody> <tbody id="sC.4.39"> @@ -2132,7 +2124,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r9.4.3">C.4.39 Section 9.4.3 Relative positioning</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.39.#q233"> + <tbody id="sC.4.39.#q21.233"> <!-- 0 tests --> </tbody> <tbody id="sC.4.40"> @@ -2141,7 +2133,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r9.5">C.4.40 Section 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.40.#q234"> + <tbody id="sC.4.40.#q21.234"> <!-- 0 tests --> </tbody> <tbody id="sC.4.41"> @@ -2150,7 +2142,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r9.5.1">C.4.41 Section 9.5.1 Positioning the float</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.41.#q235"> + <tbody id="sC.4.41.#q21.235"> <!-- 0 tests --> </tbody> <tbody id="sC.4.42"> @@ -2159,7 +2151,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r9.5.2">C.4.42 Section 9.5.2 Controlling flow next to floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.42.#q236"> + <tbody id="sC.4.42.#q21.236"> <!-- 0 tests --> </tbody> <tbody id="sC.4.43"> @@ -2168,7 +2160,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r9.8">C.4.43 Section 9.8 Comparison of normal flow, floats, and absolute positioning</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.43.#q237"> + <tbody id="sC.4.43.#q21.237"> <!-- 0 tests --> </tbody> <tbody id="sC.4.44"> @@ -2177,7 +2169,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r10.1">C.4.44 Section 10.1 Definition of "containing block"</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.44.#q238"> + <tbody id="sC.4.44.#q21.238"> <!-- 0 tests --> </tbody> <tbody id="sC.4.45"> @@ -2186,7 +2178,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r10.2">C.4.45 Section 10.2 Content width</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.45.#q239"> + <tbody id="sC.4.45.#q21.239"> <!-- 0 tests --> </tbody> <tbody id="sC.4.46"> @@ -2195,7 +2187,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r10.3.3">C.4.46 Section 10.3.3 Block-level, non-replaced elements in normal flow</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.46.#q240"> + <tbody id="sC.4.46.#q21.240"> <!-- 0 tests --> </tbody> <tbody id="sC.4.47"> @@ -2204,7 +2196,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r10.3.8">C.4.47 Section 10.3.8 Absolutely positioning, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.47.#q241"> + <tbody id="sC.4.47.#q21.241"> <!-- 0 tests --> </tbody> <tbody id="sC.4.48"> @@ -2213,7 +2205,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r10.4">C.4.48 Section 10.4 Minimum and maximum widths</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.48.#q242"> + <tbody id="sC.4.48.#q21.242"> <!-- 0 tests --> </tbody> <tbody id="sC.4.49"> @@ -2222,7 +2214,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r10.6.1">C.4.49 Section 10.6 Calculating heights and margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.49.#q243"> + <tbody id="sC.4.49.#q21.243"> <!-- 0 tests --> </tbody> <tbody id="sC.4.50"> @@ -2231,7 +2223,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r10.7">C.4.50 Section 10.7 Minimum and maximum heights</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.50.#q244"> + <tbody id="sC.4.50.#q21.244"> <!-- 0 tests --> </tbody> <tbody id="sC.4.51"> @@ -2240,7 +2232,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r10.8">C.4.51 Section 10.8 Line height calculations</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.51.#q245"> + <tbody id="sC.4.51.#q21.245"> <!-- 0 tests --> </tbody> <tbody id="sC.4.52"> @@ -2249,7 +2241,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r10.8.1">C.4.52 Section 10.8.1 Leading and half-leading</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.52.#q246"> + <tbody id="sC.4.52.#q21.246"> <!-- 0 tests --> </tbody> <tbody id="sC.4.53"> @@ -2258,7 +2250,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r11.1">C.4.53 Section 11.1 Overflow and clipping</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.53.#q247"> + <tbody id="sC.4.53.#q21.247"> <!-- 0 tests --> </tbody> <tbody id="sC.4.54"> @@ -2267,7 +2259,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r11.1.1">C.4.54 Section 11.1.1 Overflow</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.54.#q248"> + <tbody id="sC.4.54.#q21.248"> <!-- 0 tests --> </tbody> <tbody id="sC.4.55"> @@ -2276,7 +2268,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r11.1.2">C.4.55 Section 11.1.2 Clipping</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.55.#q249"> + <tbody id="sC.4.55.#q21.249"> <!-- 0 tests --> </tbody> <tbody id="sC.4.56"> @@ -2285,19 +2277,8 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r11.2">C.4.56 Section 11.2 Visibility</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.56.#q250"> - <!-- 1 tests --> - <tr id="visibility-005-C.4.56.#q250" class="ahem"> - <td> - <a href="visibility-005.xht">visibility-005</a></td> - <td><a href="reference/ref-filled-green-100px-square.xht">=</a> </td> - <td><abbr class="ahem" title="Requires Ahem font">Ahem</abbr></td> - <td>visibility - descendants of a 'visibility: hidden' element - <ul class="assert"> - <li>Descendants of a 'visibility: hidden' element will be visible if they have 'visibility: visible'</li> - </ul> - </td> - </tr> + <tbody id="sC.4.56.#q21.250"> + <!-- 0 tests --> </tbody> <tbody id="sC.4.57"> <tr><th colspan="4" scope="rowgroup"> @@ -2305,7 +2286,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r12.1">C.4.57 Section 12.1 The :before and :after pseudo-elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.57.#q251"> + <tbody id="sC.4.57.#q21.251"> <!-- 0 tests --> </tbody> <tbody id="sC.4.58"> @@ -2314,7 +2295,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r12.2">C.4.58 Section 12.2 The 'content' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.58.#q252"> + <tbody id="sC.4.58.#q21.252"> <!-- 0 tests --> </tbody> <tbody id="sC.4.59"> @@ -2323,7 +2304,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r12.3.2">C.4.59 Section 12.3.2 Inserting quotes with the 'content' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.59.#q253"> + <tbody id="sC.4.59.#q21.253"> <!-- 0 tests --> </tbody> <tbody id="sC.4.60"> @@ -2332,7 +2313,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r12.4">C.4.60 Section 12.4 Automatic counters and numbering</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.60.#q254"> + <tbody id="sC.4.60.#q21.254"> <!-- 0 tests --> </tbody> <tbody id="sC.4.61"> @@ -2341,7 +2322,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r12.4.3">C.4.61 Section 12.4.3 Counters in elements with 'display: none'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.61.#q255"> + <tbody id="sC.4.61.#q21.255"> <!-- 0 tests --> </tbody> <tbody id="sC.4.62"> @@ -2350,7 +2331,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r14.2">C.4.62 Section 14.2 The background</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.62.#q256"> + <tbody id="sC.4.62.#q21.256"> <!-- 0 tests --> </tbody> <tbody id="sC.4.63"> @@ -2359,7 +2340,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r15.1">C.4.63 Section 15.1 Fonts Introduction</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.63.#q257"> + <tbody id="sC.4.63.#q21.257"> <!-- 0 tests --> </tbody> <tbody id="sC.4.64"> @@ -2368,7 +2349,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r15.2">C.4.64 Section 15.2 Font matching algorithm</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.64.#q258"> + <tbody id="sC.4.64.#q21.258"> <!-- 0 tests --> </tbody> <tbody id="sC.4.65"> @@ -2377,7 +2358,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r15.3">C.4.65 Section 15.2.2 Font family</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.65.#q259"> + <tbody id="sC.4.65.#q21.259"> <!-- 0 tests --> </tbody> <tbody id="sC.4.66"> @@ -2386,7 +2367,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r15.3.1">C.4.66 Section 15.3.1 Generic font families</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.66.#q260"> + <tbody id="sC.4.66.#q21.260"> <!-- 0 tests --> </tbody> <tbody id="sC.4.67"> @@ -2395,7 +2376,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r15.4">C.4.67 Section 15.4 Font styling</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.67.#q261"> + <tbody id="sC.4.67.#q21.261"> <!-- 0 tests --> </tbody> <tbody id="sC.4.68"> @@ -2404,7 +2385,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r15.5">C.4.68 Section 15.5 Small-caps</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.68.#q262"> + <tbody id="sC.4.68.#q21.262"> <!-- 0 tests --> </tbody> <tbody id="sC.4.69"> @@ -2413,7 +2394,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r15.6">C.4.69 Section 15.6 Font boldness</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.69.#q263"> + <tbody id="sC.4.69.#q21.263"> <!-- 0 tests --> </tbody> <tbody id="sC.4.70"> @@ -2422,7 +2403,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r15.7">C.4.70 Section 15.7 Font size</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.70.#q264"> + <tbody id="sC.4.70.#q21.264"> <!-- 0 tests --> </tbody> <tbody id="sC.4.71"> @@ -2431,7 +2412,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r16.1">C.4.71 Section 16.1 Indentation</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.71.#q265"> + <tbody id="sC.4.71.#q21.265"> <!-- 0 tests --> </tbody> <tbody id="sC.4.72"> @@ -2440,7 +2421,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r16.2">C.4.72 Section 16.2 Alignment</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.72.#q266"> + <tbody id="sC.4.72.#q21.266"> <!-- 0 tests --> </tbody> <tbody id="sC.4.73"> @@ -2449,7 +2430,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r16.3.1">C.4.73 Section 16.3.1 Underlining, over lining, striking, and blinking</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.73.#q267"> + <tbody id="sC.4.73.#q21.267"> <!-- 0 tests --> </tbody> <tbody id="sC.4.74"> @@ -2458,7 +2439,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r16.5">C.4.74 Section 16.5 Capitalization</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.74.#q268"> + <tbody id="sC.4.74.#q21.268"> <!-- 0 tests --> </tbody> <tbody id="sC.4.75"> @@ -2467,7 +2448,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r16.6">C.4.75 Section 16.6 White space</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.75.#q269"> + <tbody id="sC.4.75.#q21.269"> <!-- 0 tests --> </tbody> <tbody id="sC.4.76"> @@ -2476,7 +2457,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.1">C.4.76 Section 17.1 Introduction to tables</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.76.#q270"> + <tbody id="sC.4.76.#q21.270"> <!-- 0 tests --> </tbody> <tbody id="sC.4.77"> @@ -2485,7 +2466,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.2">C.4.77 Section 17.2 The CSS table model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.77.#q271"> + <tbody id="sC.4.77.#q21.271"> <!-- 0 tests --> </tbody> <tbody id="sC.4.78"> @@ -2494,7 +2475,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.2.1">C.4.78 Section 17.2.1 Anonymous table objects</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.78.#q272"> + <tbody id="sC.4.78.#q21.272"> <!-- 0 tests --> </tbody> <tbody id="sC.4.79"> @@ -2503,7 +2484,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.4">C.4.79 Section 17.4 Tables in the visual formatting model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.79.#q273"> + <tbody id="sC.4.79.#q21.273"> <!-- 0 tests --> </tbody> <tbody id="sC.4.80"> @@ -2512,7 +2493,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.5">C.4.80 Section 17.5 Visual layout of table contents</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.80.#q274"> + <tbody id="sC.4.80.#q21.274"> <!-- 0 tests --> </tbody> <tbody id="sC.4.81"> @@ -2521,7 +2502,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.5.1">C.4.81 Section 17.5.1 Table layers and transparency</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.81.#q275"> + <tbody id="sC.4.81.#q21.275"> <!-- 0 tests --> </tbody> <tbody id="sC.4.82"> @@ -2530,7 +2511,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.5.2">C.4.82 Section 17.5.2 Table width algorithms</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.82.#q276"> + <tbody id="sC.4.82.#q21.276"> <!-- 0 tests --> </tbody> <tbody id="sC.4.83"> @@ -2539,7 +2520,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.5.2.1">C.4.83 Section 17.5.2.1 Fixed table layout</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.83.#q277"> + <tbody id="sC.4.83.#q21.277"> <!-- 0 tests --> </tbody> <tbody id="sC.4.84"> @@ -2548,7 +2529,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.5.2.2">C.4.84 Section 17.5.2.2 Automatic table layout</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.84.#q278"> + <tbody id="sC.4.84.#q21.278"> <!-- 0 tests --> </tbody> <tbody id="sC.4.85"> @@ -2557,7 +2538,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.5.4">C.4.85 Section 17.5.4 Horizontal alignment in a column</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.85.#q279"> + <tbody id="sC.4.85.#q21.279"> <!-- 0 tests --> </tbody> <tbody id="sC.4.86"> @@ -2566,7 +2547,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.5.5">C.4.86 Section 17.5.5 Dynamic row and column effects</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.86.#q280"> + <tbody id="sC.4.86.#q21.280"> <!-- 0 tests --> </tbody> <tbody id="sC.4.87"> @@ -2575,7 +2556,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.6.1">C.4.87 Section 17.6.1 The separated borders model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.87.#q281"> + <tbody id="sC.4.87.#q21.281"> <!-- 0 tests --> </tbody> <tbody id="sC.4.88"> @@ -2584,7 +2565,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.6.2">C.4.88 Section 17.6.2 The collapsing borders model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.88.#q282"> + <tbody id="sC.4.88.#q21.282"> <!-- 0 tests --> </tbody> <tbody id="sC.4.89"> @@ -2593,7 +2574,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r18.2">C.4.89 Section 18.2 System Colors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.89.#q283"> + <tbody id="sC.4.89.#q21.283"> <!-- 0 tests --> </tbody> <tbody id="sC.4.90"> @@ -2602,7 +2583,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r18.4">C.4.90 Section 18.4 Dynamic outlines</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.90.#q284"> + <tbody id="sC.4.90.#q21.284"> <!-- 0 tests --> </tbody> <tbody id="sC.4.91"> @@ -2611,7 +2592,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r18.4.1">C.4.91 Section 18.4.1 Outlines and the focus</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.91.#q285"> + <tbody id="sC.4.91.#q21.285"> <!-- 0 tests --> </tbody> <tbody id="sC.4.92"> @@ -2620,7 +2601,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#rD">C.4.92 Appendix D Default style sheet for HTML 4</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.92.#q286"> + <tbody id="sC.4.92.#q21.286"> <!-- 0 tests --> </tbody> <tbody id="sC.5"> @@ -2635,7 +2616,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.1.4.2.1">C.5.1 Section 1.4.2.1 Value</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.1.#q288"> + <tbody id="sC.5.1.#q21.288"> <!-- 0 tests --> </tbody> <tbody id="sC.5.2"> @@ -2644,7 +2625,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.2.3">C.5.2 Section 2.3 The CSS 2.1 processing model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.2.#q289"> + <tbody id="sC.5.2.#q21.289"> <!-- 0 tests --> </tbody> <tbody id="sC.5.3"> @@ -2653,7 +2634,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.3.1">C.5.3 Section 3.1 Definitions</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.3.#q290"> + <tbody id="sC.5.3.#q21.290"> <!-- 0 tests --> </tbody> <tbody id="sC.5.4"> @@ -2662,7 +2643,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.1.1">C.5.4 Section 4.1.1 Tokenization</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.4.#q291"> + <tbody id="sC.5.4.#q21.291"> <!-- 0 tests --> </tbody> <tbody id="sC.5.5"> @@ -2671,7 +2652,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.1.2.2">C.5.5 Section 4.1.2.2 Informative Historical Notes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.5.#q292"> + <tbody id="sC.5.5.#q21.292"> <!-- 0 tests --> </tbody> <tbody id="sC.5.6"> @@ -2680,7 +2661,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.1.3">C.5.6 Section 4.1.3 Characters and case</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.6.#q293"> + <tbody id="sC.5.6.#q21.293"> <!-- 0 tests --> </tbody> <tbody id="sC.5.7"> @@ -2689,7 +2670,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.1.3a">C.5.7 Section 4.1.3 Characters and case</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.7.#q294"> + <tbody id="sC.5.7.#q21.294"> <!-- 0 tests --> </tbody> <tbody id="sC.5.8"> @@ -2698,7 +2679,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.1.3b">C.5.8 Section 4.1.3 Characters and case</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.8.#q295"> + <tbody id="sC.5.8.#q21.295"> <!-- 0 tests --> </tbody> <tbody id="sC.5.9"> @@ -2707,7 +2688,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.1.3c">C.5.9 Section 4.1.3 Characters and case</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.9.#q296"> + <tbody id="sC.5.9.#q21.296"> <!-- 0 tests --> </tbody> <tbody id="sC.5.10"> @@ -2716,7 +2697,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.1.5">C.5.10 Section 4.1.5 At-rules</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.10.#q297"> + <tbody id="sC.5.10.#q21.297"> <!-- 0 tests --> </tbody> <tbody id="sC.5.11"> @@ -2725,7 +2706,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.1.7">C.5.11 Section 4.1.7 Rule sets, declaration blocks, and selectors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.11.#q298"> + <tbody id="sC.5.11.#q21.298"> <!-- 0 tests --> </tbody> <tbody id="sC.5.12"> @@ -2734,7 +2715,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.2">C.5.12 Section 4.2 Rules for handling parsing errors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.12.#q299"> + <tbody id="sC.5.12.#q21.299"> <!-- 0 tests --> </tbody> <tbody id="sC.5.13"> @@ -2743,7 +2724,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.2a">C.5.13 Section 4.2 Rules for handling parsing errors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.13.#q300"> + <tbody id="sC.5.13.#q21.300"> <!-- 0 tests --> </tbody> <tbody id="sC.5.14"> @@ -2752,7 +2733,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.3.2">C.5.14 Section 4.3.2 Lengths</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.14.#q301"> + <tbody id="sC.5.14.#q21.301"> <!-- 0 tests --> </tbody> <tbody id="sC.5.15"> @@ -2761,7 +2742,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.3.5">C.5.15 Section 4.3.5 Counters</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.15.#q302"> + <tbody id="sC.5.15.#q21.302"> <!-- 0 tests --> </tbody> <tbody id="sC.5.16"> @@ -2770,7 +2751,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.5.8.1">C.5.16 Section 5.8.1 Matching attributes and attribute values</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.16.#q303"> + <tbody id="sC.5.16.#q21.303"> <!-- 0 tests --> </tbody> <tbody id="sC.5.17"> @@ -2779,7 +2760,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.5.8.2">C.5.17 Section 5.8.2 Default attribute values in DTDs</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.17.#q304"> + <tbody id="sC.5.17.#q21.304"> <!-- 0 tests --> </tbody> <tbody id="sC.5.18"> @@ -2788,7 +2769,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.5.11.4">C.5.18 Section 5.11.4 The language pseudo-class: :lang</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.18.#q305"> + <tbody id="sC.5.18.#q21.305"> <!-- 0 tests --> </tbody> <tbody id="sC.5.19"> @@ -2797,7 +2778,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.5.12.3">C.5.19 Section 5.12.3 The :before and :after pseudo-elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.19.#q306"> + <tbody id="sC.5.19.#q21.306"> <!-- 0 tests --> </tbody> <tbody id="sC.5.20"> @@ -2806,7 +2787,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.6.3">C.5.20 Section 6.3 The @import rule</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.20.#q307"> + <tbody id="sC.5.20.#q21.307"> <!-- 0 tests --> </tbody> <tbody id="sC.5.21"> @@ -2815,7 +2796,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.6.3a">C.5.21 Section 6.3 The @import rule</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.21.#q308"> + <tbody id="sC.5.21.#q21.308"> <!-- 0 tests --> </tbody> <tbody id="sC.5.22"> @@ -2824,7 +2805,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.6.4.1">C.5.22 Section 6.4.1 Cascading order</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.22.#q309"> + <tbody id="sC.5.22.#q21.309"> <!-- 0 tests --> </tbody> <tbody id="sC.5.23"> @@ -2833,7 +2814,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.6.4.1a">C.5.23 Section 6.4.1 Cascading order</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.23.#q310"> + <tbody id="sC.5.23.#q21.310"> <!-- 0 tests --> </tbody> <tbody id="sC.5.24"> @@ -2842,7 +2823,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.7.2.1">C.5.24 Section 7.2.1 The @media rule</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.24.#q311"> + <tbody id="sC.5.24.#q21.311"> <!-- 0 tests --> </tbody> <tbody id="sC.5.25"> @@ -2851,7 +2832,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.8.3.1">C.5.25 Section 8.3.1 Collapsing margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.25.#q312"> + <tbody id="sC.5.25.#q21.312"> <!-- 0 tests --> </tbody> <tbody id="sC.5.26"> @@ -2860,30 +2841,8 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.8.3.1a">C.5.26 Section 8.3.1 Collapsing margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.26.#q313"> - <!-- 2 tests --> - <tr id="margin-collapse-037-C.5.26.#q313" class=""> - <td> - <a href="margin-collapse-037.xht">margin-collapse-037</a></td> - <td><a href="reference/margin-collapse-037-ref.xht">=</a> </td> - <td></td> - <td>Collapsing margins - margin-bottom of the last in-flow child block collapsing with its parent min-height block's bottom margin - <ul class="assert"> - <li>The 'min-height' of a parent block element should have no influence over whether such parent block element's bottom margin is adjoining to its last child's bottom margin. In such situation, the bottom margin of the parent block element and the bottom margin of its last child should collapse as long as such parent block element has no bottom padding and has no bottom border.</li> - </ul> - </td> - </tr> - <tr id="margin-collapse-038-C.5.26.#q313" class=""> - <td> - <a href="margin-collapse-038.xht">margin-collapse-038</a></td> - <td><a href="reference/margin-collapse-038-ref.xht">=</a> </td> - <td></td> - <td>Collapsing margins - margin-bottom of the last in-flow child block collapsing with its max-height parent block's bottom margin - <ul class="assert"> - <li>The 'max-height' of a parent block element should have no influence over whether such parent block element's bottom margin is adjoining to its last child's bottom margin. In such situation, the bottom margin of the parent block element and the bottom margin of its last child should collapse as long as such parent block element has no bottom padding and has no bottom border.</li> - </ul> - </td> - </tr> + <tbody id="sC.5.26.#q21.313"> + <!-- 0 tests --> </tbody> <tbody id="sC.5.27"> <tr><th colspan="4" scope="rowgroup"> @@ -2891,7 +2850,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.8.3.1b">C.5.27 Section 8.3.1 Collapsing margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.27.#q314"> + <tbody id="sC.5.27.#q21.314"> <!-- 0 tests --> </tbody> <tbody id="sC.5.28"> @@ -2900,7 +2859,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.9.2.2">C.5.28 Section 9.2.2 Inline-level elements and inline boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.28.#q315"> + <tbody id="sC.5.28.#q21.315"> <!-- 0 tests --> </tbody> <tbody id="sC.5.29"> @@ -2909,7 +2868,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.9.2.4">C.5.29 Section 9.2.4 The 'display' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.29.#q316"> + <tbody id="sC.5.29.#q21.316"> <!-- 0 tests --> </tbody> <tbody id="sC.5.30"> @@ -2918,7 +2877,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.9.3.2">C.5.30 Section 9.3.2 Box offsets: 'top', 'right', 'bottom', 'left'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.30.#q317"> + <tbody id="sC.5.30.#q21.317"> <!-- 0 tests --> </tbody> <tbody id="sC.5.31"> @@ -2927,7 +2886,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.9.5">C.5.31 Section 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.31.#q318"> + <tbody id="sC.5.31.#q21.318"> <!-- 0 tests --> </tbody> <tbody id="sC.5.32"> @@ -2936,7 +2895,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.9.5a">C.5.32 Section 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.32.#q319"> + <tbody id="sC.5.32.#q21.319"> <!-- 0 tests --> </tbody> <tbody id="sC.5.33"> @@ -2945,7 +2904,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.9.5.2">C.5.33 Section 9.5.2 Controlling flow next to floats: the 'clear' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.33.#q320"> + <tbody id="sC.5.33.#q21.320"> <!-- 0 tests --> </tbody> <tbody id="sC.5.34"> @@ -2954,7 +2913,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.9.6.1">C.5.34 Section 9.6.1 Fixed positioning</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.34.#q321"> + <tbody id="sC.5.34.#q21.321"> <!-- 0 tests --> </tbody> <tbody id="sC.5.35"> @@ -2963,7 +2922,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.9.9.1">C.5.35 Section 9.9.1 Specifying the stack level: the 'z-index' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.35.#q322"> + <tbody id="sC.5.35.#q21.322"> <!-- 0 tests --> </tbody> <tbody id="sC.5.36"> @@ -2972,7 +2931,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.1">C.5.36 Section 10.1 Definition of "containing block"</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.36.#q323"> + <tbody id="sC.5.36.#q21.323"> <!-- 0 tests --> </tbody> <tbody id="sC.5.37"> @@ -2981,7 +2940,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.3">C.5.37 Section 10.3 Calculating widths and margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.37.#q324"> + <tbody id="sC.5.37.#q21.324"> <!-- 0 tests --> </tbody> <tbody id="sC.5.38"> @@ -2990,7 +2949,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.3.1">C.5.38 Section 10.3.1 Inline, non-replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.38.#q325"> + <tbody id="sC.5.38.#q21.325"> <!-- 0 tests --> </tbody> <tbody id="sC.5.39"> @@ -2999,7 +2958,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.3.2">C.5.39 Section 10.3.2 Inline, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.39.#q326"> + <tbody id="sC.5.39.#q21.326"> <!-- 0 tests --> </tbody> <tbody id="sC.5.40"> @@ -3008,7 +2967,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.3.2a">C.5.40 Section 10.3.2 Inline, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.40.#q327"> + <tbody id="sC.5.40.#q21.327"> <!-- 0 tests --> </tbody> <tbody id="sC.5.41"> @@ -3017,7 +2976,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.3.3">C.5.41 Section 10.3.3 Block-level, non-replaced elements in normal flow</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.41.#q328"> + <tbody id="sC.5.41.#q21.328"> <!-- 0 tests --> </tbody> <tbody id="sC.5.42"> @@ -3026,7 +2985,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.3.7">C.5.42 Section 10.3.7 Absolutely positioned, non-replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.42.#q329"> + <tbody id="sC.5.42.#q21.329"> <!-- 0 tests --> </tbody> <tbody id="sC.5.43"> @@ -3035,7 +2994,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.3.7a">C.5.43 Section 10.3.7 Absolutely positioned, non-replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.43.#q330"> + <tbody id="sC.5.43.#q21.330"> <!-- 0 tests --> </tbody> <tbody id="sC.5.44"> @@ -3044,7 +3003,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.3.8">C.5.44 Section 10.3.8 Absolutely positioned, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.44.#q331"> + <tbody id="sC.5.44.#q21.331"> <!-- 0 tests --> </tbody> <tbody id="sC.5.45"> @@ -3053,7 +3012,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.3.8a">C.5.45 Section 10.3.8 Absolutely positioned, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.45.#q332"> + <tbody id="sC.5.45.#q21.332"> <!-- 0 tests --> </tbody> <tbody id="sC.5.46"> @@ -3062,7 +3021,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.3.8c">C.5.46 Section 10.3.8 Absolutely positioned, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.46.#q333"> + <tbody id="sC.5.46.#q21.333"> <!-- 0 tests --> </tbody> <tbody id="sC.5.47"> @@ -3071,7 +3030,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.5">C.5.47 Section 10.5 Content height: the 'height' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.47.#q334"> + <tbody id="sC.5.47.#q21.334"> <!-- 0 tests --> </tbody> <tbody id="sC.5.48"> @@ -3080,7 +3039,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.6.2">C.5.48 Section 10.6.2 Inline replaced elements […]</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.48.#q335"> + <tbody id="sC.5.48.#q21.335"> <!-- 0 tests --> </tbody> <tbody id="sC.5.49"> @@ -3089,7 +3048,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.6.4">C.5.49 Section 10.6.4 Absolutely positioned, non-replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.49.#q336"> + <tbody id="sC.5.49.#q21.336"> <!-- 0 tests --> </tbody> <tbody id="sC.5.50"> @@ -3098,7 +3057,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.6.5">C.5.50 Section 10.6.5 Absolutely positioned, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.50.#q337"> + <tbody id="sC.5.50.#q21.337"> <!-- 0 tests --> </tbody> <tbody id="sC.5.51"> @@ -3107,7 +3066,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.8.1">C.5.51 Section 10.8.1 Leading and half-leading</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.51.#q338"> + <tbody id="sC.5.51.#q21.338"> <!-- 0 tests --> </tbody> <tbody id="sC.5.52"> @@ -3116,7 +3075,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.11.1.1">C.5.52 Section 11.1.1 Overflow: the 'overflow' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.52.#q339"> + <tbody id="sC.5.52.#q21.339"> <!-- 0 tests --> </tbody> <tbody id="sC.5.53"> @@ -3125,7 +3084,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.11.1.2">C.5.53 Section 11.1.2 Clipping: the 'clip' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.53.#q340"> + <tbody id="sC.5.53.#q21.340"> <!-- 0 tests --> </tbody> <tbody id="sC.5.54"> @@ -3134,7 +3093,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.12.2">C.5.54 Section 12.2 The 'content' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.54.#q341"> + <tbody id="sC.5.54.#q21.341"> <!-- 0 tests --> </tbody> <tbody id="sC.5.55"> @@ -3143,7 +3102,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.12.4.2">C.5.55 Section 12.4.2 Counter styles</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.55.#q342"> + <tbody id="sC.5.55.#q21.342"> <!-- 0 tests --> </tbody> <tbody id="sC.5.56"> @@ -3152,7 +3111,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.12.5">C.5.56 Section 12.5 Lists</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.56.#q343"> + <tbody id="sC.5.56.#q21.343"> <!-- 0 tests --> </tbody> <tbody id="sC.5.57"> @@ -3161,7 +3120,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.12.5.1">C.5.57 Section 12.5.1 Lists: the 'list-style-type', 'list-style-image', 'list-style-position', and 'list-style' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.57.#q344"> + <tbody id="sC.5.57.#q21.344"> <!-- 0 tests --> </tbody> <tbody id="sC.5.58"> @@ -3170,7 +3129,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.12.5.1a">C.5.58 Section 12.5.1 Lists: the 'list-style-type', 'list-style-image', 'list-style-position', and 'list-style' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.58.#q345"> + <tbody id="sC.5.58.#q21.345"> <!-- 0 tests --> </tbody> <tbody id="sC.5.59"> @@ -3179,7 +3138,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.12.5.1b">C.5.59 Section 12.5.1 Lists: the 'list-style-type', 'list-style-image', 'list-style-position', and 'list-style' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.59.#q346"> + <tbody id="sC.5.59.#q21.346"> <!-- 0 tests --> </tbody> <tbody id="sC.5.60"> @@ -3188,7 +3147,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.2">C.5.60 Section 13.2 Page boxes: the @page rule</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.60.#q347"> + <tbody id="sC.5.60.#q21.347"> <!-- 0 tests --> </tbody> <tbody id="sC.5.61"> @@ -3197,7 +3156,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.2.1.1">C.5.61 Section 13.2.1.1 Rendering page boxes that do not fit a target sheet</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.61.#q348"> + <tbody id="sC.5.61.#q21.348"> <!-- 0 tests --> </tbody> <tbody id="sC.5.62"> @@ -3206,7 +3165,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.2.3">C.5.62 Section 13.2.3 Content outside the page box</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.62.#q349"> + <tbody id="sC.5.62.#q21.349"> <!-- 0 tests --> </tbody> <tbody id="sC.5.63"> @@ -3215,7 +3174,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.3.1">C.5.63 Section 13.3.1 Page break properties: 'page-break-before', 'page-break-after', 'page-break-inside'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.63.#q350"> + <tbody id="sC.5.63.#q21.350"> <!-- 0 tests --> </tbody> <tbody id="sC.5.64"> @@ -3224,7 +3183,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.3.1a">C.5.64 Section 13.3.1 Page break properties: 'page-break-before', 'page-break-after', 'page-break-inside'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.64.#q351"> + <tbody id="sC.5.64.#q21.351"> <!-- 0 tests --> </tbody> <tbody id="sC.5.65"> @@ -3233,7 +3192,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.3.2">C.5.65 Section 13.3.2 Breaks inside elements: 'orphans', 'widows'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.65.#q352"> + <tbody id="sC.5.65.#q21.352"> <!-- 0 tests --> </tbody> <tbody id="sC.5.66"> @@ -3242,7 +3201,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.3.2a">C.5.66 Section 13.3.2 Breaks inside elements: 'orphans', 'widows'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.66.#q353"> + <tbody id="sC.5.66.#q21.353"> <!-- 0 tests --> </tbody> <tbody id="sC.5.67"> @@ -3251,7 +3210,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.3.3">C.5.67 Section 13.3.3 Allowed page breaks</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.67.#q354"> + <tbody id="sC.5.67.#q21.354"> <!-- 0 tests --> </tbody> <tbody id="sC.5.68"> @@ -3260,7 +3219,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.3.3a">C.5.68 Section 13.3.3 Allowed page breaks</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.68.#q355"> + <tbody id="sC.5.68.#q21.355"> <!-- 0 tests --> </tbody> <tbody id="sC.5.69"> @@ -3269,7 +3228,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.3.3b">C.5.69 Section 13.3.3 Allowed page breaks</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.69.#q356"> + <tbody id="sC.5.69.#q21.356"> <!-- 0 tests --> </tbody> <tbody id="sC.5.70"> @@ -3278,7 +3237,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.3.5">C.5.70 Section 13.3.5 "Best" page breaks</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.70.#q357"> + <tbody id="sC.5.70.#q21.357"> <!-- 0 tests --> </tbody> <tbody id="sC.5.71"> @@ -3287,7 +3246,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.14.2">C.5.71 Section 14.2 The background</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.71.#q358"> + <tbody id="sC.5.71.#q21.358"> <!-- 0 tests --> </tbody> <tbody id="sC.5.72"> @@ -3296,7 +3255,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.14.2a">C.5.72 Section 14.2 The background</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.72.#q359"> + <tbody id="sC.5.72.#q21.359"> <!-- 0 tests --> </tbody> <tbody id="sC.5.73"> @@ -3305,7 +3264,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.14.2.1a">C.5.73 Section 14.2.1 Background properties: 'background-color', 'background-image', 'background-repeat', 'background-attachment', 'background-position', and 'background'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.73.#q360"> + <tbody id="sC.5.73.#q21.360"> <!-- 0 tests --> </tbody> <tbody id="sC.5.74"> @@ -3314,7 +3273,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.15.6">C.5.74 Section 15.6 Font boldness: the 'font-weight' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.74.#q361"> + <tbody id="sC.5.74.#q21.361"> <!-- 0 tests --> </tbody> <tbody id="sC.5.75"> @@ -3323,7 +3282,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.16.6">C.5.75 Section 16.6 Whitespace: the 'white-space' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.75.#q362"> + <tbody id="sC.5.75.#q21.362"> <!-- 0 tests --> </tbody> <tbody id="sC.5.76"> @@ -3332,19 +3291,8 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.16.6.1">C.5.76 Section 16.6.1 The 'white-space' processing model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.76.#q363"> - <!-- 1 tests --> - <tr id="white-space-007-C.5.76.#q363" class="ahem"> - <td> - <a href="white-space-007.xht">white-space-007</a></td> - <td></td> - <td><abbr class="ahem" title="Requires Ahem font">Ahem</abbr></td> - <td>white-space - <ul class="assert"> - <li>'white-space: normal' and 'white-space: nowrap' should collapse sequences of white space. Regarding wrapping, line breaking opportunities are determined on the text prior to white space collapsing steps.</li> - </ul> - </td> - </tr> + <tbody id="sC.5.76.#q21.363"> + <!-- 0 tests --> </tbody> <tbody id="sC.5.77"> <tr><th colspan="4" scope="rowgroup"> @@ -3352,7 +3300,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.17.2.1">C.5.77 Section 17.2.1 Anonymous table objects</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.77.#q364"> + <tbody id="sC.5.77.#q21.364"> <!-- 0 tests --> </tbody> <tbody id="sC.5.78"> @@ -3361,7 +3309,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.17.2.1a">C.5.78 Section 17.2.1 Anonymous table objects</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.78.#q365"> + <tbody id="sC.5.78.#q21.365"> <!-- 0 tests --> </tbody> <tbody id="sC.5.79"> @@ -3370,7 +3318,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.17.4">C.5.79 Section 17.4 Tables in the visual formatting model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.79.#q366"> + <tbody id="sC.5.79.#q21.366"> <!-- 0 tests --> </tbody> <tbody id="sC.5.80"> @@ -3379,7 +3327,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.17.5.4a">C.5.80 Section 17.5.4 Horizontal alignment in a column</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.80.#q367"> + <tbody id="sC.5.80.#q21.367"> <!-- 0 tests --> </tbody> <tbody id="sC.5.81"> @@ -3388,7 +3336,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.18.1">C.5.81 Section 18.1 Cursors: the 'cursor' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.81.#q368"> + <tbody id="sC.5.81.#q21.368"> <!-- 0 tests --> </tbody> <tbody id="sC.5.82"> @@ -3397,7 +3345,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.B.2">C.5.82 Section B.2 Informative references</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.82.#q369"> + <tbody id="sC.5.82.#q21.369"> <!-- 0 tests --> </tbody> <tbody id="sC.5.83"> @@ -3406,7 +3354,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.D">C.5.83 Appendix D. Default style sheet for HTML 4</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.83.#q370"> + <tbody id="sC.5.83.#q21.370"> <!-- 0 tests --> </tbody> <tbody id="sC.5.84"> @@ -3415,7 +3363,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.Da">C.5.84 Appendix D. Default style sheet for HTML 4</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.84.#q371"> + <tbody id="sC.5.84.#q21.371"> <!-- 0 tests --> </tbody> <tbody id="sC.5.85"> @@ -3424,7 +3372,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.E.2">C.5.85 Section E.2 Painting order</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.85.#q372"> + <tbody id="sC.5.85.#q21.372"> <!-- 0 tests --> </tbody> <tbody id="sC.5.86"> @@ -3433,7 +3381,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.G">C.5.86 Appendix G. Grammar of CSS 2.1</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.86.#q373"> + <tbody id="sC.5.86.#q21.373"> <!-- 0 tests --> </tbody> <tbody id="sC.5.87"> @@ -3442,7 +3390,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.G.1">C.5.87 Section G.1 Grammar</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.87.#q374"> + <tbody id="sC.5.87.#q21.374"> <!-- 0 tests --> </tbody> <tbody id="sC.5.88"> @@ -3451,7 +3399,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.G.2">C.5.88 Section G.2 Lexical scanner</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.88.#q375"> + <tbody id="sC.5.88.#q21.375"> <!-- 0 tests --> </tbody> <tbody id="sC.5.89"> @@ -3460,7 +3408,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.G.2a">C.5.89 Section G.2 Lexical scanner</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.89.#q376"> + <tbody id="sC.5.89.#q21.376"> <!-- 0 tests --> </tbody> <tbody id="sC.5.90"> @@ -3469,7 +3417,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.G.2b">C.5.90 Section G.2 Lexical scanner</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.90.#q377"> + <tbody id="sC.5.90.#q21.377"> <!-- 0 tests --> </tbody> <tbody id="sC.5.91"> @@ -3478,7 +3426,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.G.2c">C.5.91 Section G.2 Lexical scanner</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.91.#q378"> + <tbody id="sC.5.91.#q21.378"> <!-- 0 tests --> </tbody> <tbody id="sC.5.92"> @@ -3487,7 +3435,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.I">C.5.92 Appendix I. Index</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.92.#q379"> + <tbody id="sC.5.92.#q21.379"> <!-- 0 tests --> </tbody> <tbody id="sC.6"> @@ -3502,7 +3450,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.2b">C.6.1 Section 4.2 Rules for handling parsing errors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.6.1.#q381"> + <tbody id="sC.6.1.#q21.381"> <!-- 0 tests --> </tbody> <tbody id="sC.6.2"> @@ -3511,7 +3459,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.3.3c">C.6.2 Section 13.3.3 Allowed page breaks</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.6.2.#q382"> + <tbody id="sC.6.2.#q21.382"> <!-- 0 tests --> </tbody> <tbody id="sC.6.3"> @@ -3520,7 +3468,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.15.3">C.6.3 Section 15.3 Font family: the 'font-family' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.6.3.#q383"> + <tbody id="sC.6.3.#q21.383"> <!-- 0 tests --> </tbody> <tbody id="sC.6.4"> @@ -3529,7 +3477,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.15.3.1.1">C.6.4 Section 15.3.1.1 serif</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.6.4.#q384"> + <tbody id="sC.6.4.#q21.384"> <!-- 0 tests --> </tbody> <tbody id="sC.6.5"> @@ -3538,7 +3486,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.15.7">C.6.5 Section 15.7 Font size: the 'font-size' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.6.5.#q385"> + <tbody id="sC.6.5.#q21.385"> <!-- 0 tests --> </tbody> <tbody id="sC.6.6"> @@ -3547,7 +3495,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.17.5.2.1">C.6.6 Section 17.5.2.1 Fixed table layout</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.6.6.#q386"> + <tbody id="sC.6.6.#q21.386"> <!-- 0 tests --> </tbody> <tbody id="sC.6.7"> @@ -3556,7 +3504,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.17.5.3">C.6.7 Section 17.5.3 Table height layout</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.6.7.#q387"> + <tbody id="sC.6.7.#q21.387"> <!-- 0 tests --> </tbody> <tbody id="sC.6.8"> @@ -3565,7 +3513,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.Ga">C.6.8 Appendix G. Grammar of CSS 2.1</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.6.8.#q388"> + <tbody id="sC.6.8.#q21.388"> <!-- 0 tests --> </tbody> <tbody id="sC.7"> @@ -3580,7 +3528,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.1">C.7.1 Section 1.4.2.1 Value</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.1.#q390"> + <tbody id="sC.7.1.#q21.390"> <!-- 0 tests --> </tbody> <tbody id="sC.7.2"> @@ -3589,7 +3537,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.3.1">C.7.2 Section 3.1 Definitions</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.2.#q391"> + <tbody id="sC.7.2.#q21.391"> <!-- 0 tests --> </tbody> <tbody id="sC.7.3"> @@ -3598,7 +3546,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.1.1">C.7.3 Section 4.1.1 Tokenization</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.3.#q392"> + <tbody id="sC.7.3.#q21.392"> <!-- 0 tests --> </tbody> <tbody id="sC.7.4"> @@ -3607,7 +3555,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.1.1a">C.7.4 Section 4.1.1 Tokenization</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.4.#q393"> + <tbody id="sC.7.4.#q21.393"> <!-- 0 tests --> </tbody> <tbody id="sC.7.5"> @@ -3616,7 +3564,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.1.1b">C.7.5 Section 4.1.1 Tokenization</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.5.#q394"> + <tbody id="sC.7.5.#q21.394"> <!-- 0 tests --> </tbody> <tbody id="sC.7.6"> @@ -3625,7 +3573,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.1.1c">C.7.6 Section 4.1.1 Tokenization</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.6.#q395"> + <tbody id="sC.7.6.#q21.395"> <!-- 0 tests --> </tbody> <tbody id="sC.7.7"> @@ -3634,7 +3582,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.1.2.2">C.7.7 Section 4.1.2.2 Informative Historical Notes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.7.#q396"> + <tbody id="sC.7.7.#q21.396"> <!-- 0 tests --> </tbody> <tbody id="sC.7.8"> @@ -3643,7 +3591,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.1.3">C.7.8 Section 4.1.3 Characters and case</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.8.#q397"> + <tbody id="sC.7.8.#q21.397"> <!-- 0 tests --> </tbody> <tbody id="sC.7.9"> @@ -3652,7 +3600,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.1.3a">C.7.9 Section 4.1.3 Characters and case</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.9.#q398"> + <tbody id="sC.7.9.#q21.398"> <!-- 0 tests --> </tbody> <tbody id="sC.7.10"> @@ -3661,7 +3609,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.1.8">C.7.10 Section 4.1.8 Declarations and properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.10.#q399"> + <tbody id="sC.7.10.#q21.399"> <!-- 0 tests --> </tbody> <tbody id="sC.7.11"> @@ -3670,7 +3618,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.2">C.7.11 Section 4.2 Rules for handling parsing errors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.11.#q400"> + <tbody id="sC.7.11.#q21.400"> <!-- 0 tests --> </tbody> <tbody id="sC.7.12"> @@ -3679,7 +3627,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.3.2">C.7.12 Section 4.3.2 Lengths</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.12.#q401"> + <tbody id="sC.7.12.#q21.401"> <!-- 0 tests --> </tbody> <tbody id="sC.7.13"> @@ -3688,7 +3636,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.3.2a">C.7.13 Section 4.3.2 Lengths</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.13.#q402"> + <tbody id="sC.7.13.#q21.402"> <!-- 0 tests --> </tbody> <tbody id="sC.7.14"> @@ -3697,7 +3645,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.3.4a">C.7.14 Section 4.3.4 URLs and URIs</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.14.#q403"> + <tbody id="sC.7.14.#q21.403"> <!-- 0 tests --> </tbody> <tbody id="sC.7.15"> @@ -3706,7 +3654,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.3.4">C.7.15 Section 4.3.4 URLs and URIs</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.15.#q404"> + <tbody id="sC.7.15.#q21.404"> <!-- 0 tests --> </tbody> <tbody id="sC.7.16"> @@ -3715,7 +3663,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.5.8.2">C.7.16 Section 5.8.2 Default attribute values in DTDs</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.16.#q405"> + <tbody id="sC.7.16.#q21.405"> <!-- 0 tests --> </tbody> <tbody id="sC.7.17"> @@ -3724,7 +3672,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.5.11.4">C.7.17 Section 5.11.4 The language pseudo-class: :lang</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.17.#q406"> + <tbody id="sC.7.17.#q21.406"> <!-- 0 tests --> </tbody> <tbody id="sC.7.18"> @@ -3733,7 +3681,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.5.12">C.7.18 Section 5.12 Pseudo-elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.18.#q407"> + <tbody id="sC.7.18.#q21.407"> <!-- 0 tests --> </tbody> <tbody id="sC.7.19"> @@ -3742,7 +3690,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.5.12.1">C.7.19 Section 5.12.1 The :first-line pseudo-element</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.19.#q408"> + <tbody id="sC.7.19.#q21.408"> <!-- 0 tests --> </tbody> <tbody id="sC.7.20"> @@ -3751,7 +3699,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.5.12.2">C.7.20 Section 5.12.2 The :first-letter pseudo-element</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.20.#q409"> + <tbody id="sC.7.20.#q21.409"> <!-- 0 tests --> </tbody> <tbody id="sC.7.21"> @@ -3760,7 +3708,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.6.2">C.7.21 Section 6.2 Inheritance</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.21.#q410"> + <tbody id="sC.7.21.#q21.410"> <!-- 0 tests --> </tbody> <tbody id="sC.7.22"> @@ -3769,7 +3717,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.6.4.4">C.7.22 Section 6.4.4 Precedence of non-CSS presentational hints</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.22.#q411"> + <tbody id="sC.7.22.#q21.411"> <!-- 0 tests --> </tbody> <tbody id="sC.7.23"> @@ -3778,7 +3726,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.7.3">C.7.23 Section 7.3 Recognized media types</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.23.#q412"> + <tbody id="sC.7.23.#q21.412"> <!-- 0 tests --> </tbody> <tbody id="sC.7.24"> @@ -3787,7 +3735,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.8.3.1">C.7.24 Section 8.3.1 Collapsing margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.24.#q413"> + <tbody id="sC.7.24.#q21.413"> <!-- 0 tests --> </tbody> <tbody id="sC.7.25"> @@ -3796,7 +3744,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.8.3.1a">C.7.25 Section 8.3.1 Collapsing margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.25.#q414"> + <tbody id="sC.7.25.#q21.414"> <!-- 0 tests --> </tbody> <tbody id="sC.7.26"> @@ -3805,7 +3753,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.2.1">C.7.26 Section 9.2.1 Block-level elements and block boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.26.#q415"> + <tbody id="sC.7.26.#q21.415"> <!-- 0 tests --> </tbody> <tbody id="sC.7.27"> @@ -3814,7 +3762,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.2.1.1">C.7.27 Section 9.2.1.1 Anonymous block boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.27.#q416"> + <tbody id="sC.7.27.#q21.416"> <!-- 0 tests --> </tbody> <tbody id="sC.7.28"> @@ -3823,7 +3771,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.2.1.1a">C.7.28 Section 9.2.1.1 Anonymous block boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.28.#q417"> + <tbody id="sC.7.28.#q21.417"> <!-- 0 tests --> </tbody> <tbody id="sC.7.29"> @@ -3832,7 +3780,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.2.1.1b">C.7.29 Section 9.2.1.1 Anonymous block boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.29.#q418"> + <tbody id="sC.7.29.#q21.418"> <!-- 0 tests --> </tbody> <tbody id="sC.7.30"> @@ -3841,7 +3789,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.2.1.1c">C.7.30 Section 9.2.1.1 Anonymous block boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.30.#q419"> + <tbody id="sC.7.30.#q21.419"> <!-- 0 tests --> </tbody> <tbody id="sC.7.31"> @@ -3850,7 +3798,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.2.2">C.7.31 Section 9.2.2 Inline-level elements and inline boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.31.#q420"> + <tbody id="sC.7.31.#q21.420"> <!-- 0 tests --> </tbody> <tbody id="sC.7.32"> @@ -3859,7 +3807,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.2.3a">C.7.32 Section 9.2.3 Run-in boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.32.#q421"> + <tbody id="sC.7.32.#q21.421"> <!-- 0 tests --> </tbody> <tbody id="sC.7.33"> @@ -3868,7 +3816,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.2.4">C.7.33 Section 9.2.4 The 'display' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.33.#q422"> + <tbody id="sC.7.33.#q21.422"> <!-- 0 tests --> </tbody> <tbody id="sC.7.34"> @@ -3877,7 +3825,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.2.4a">C.7.34 Section 9.2.4 The 'display' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.34.#q423"> + <tbody id="sC.7.34.#q21.423"> <!-- 0 tests --> </tbody> <tbody id="sC.7.35"> @@ -3886,7 +3834,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.3">C.7.35 Section 9.3 Positioning schemes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.35.#q424"> + <tbody id="sC.7.35.#q21.424"> <!-- 0 tests --> </tbody> <tbody id="sC.7.36"> @@ -3895,7 +3843,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.4">C.7.36 Section 9.4 Normal flow</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.36.#q425"> + <tbody id="sC.7.36.#q21.425"> <!-- 0 tests --> </tbody> <tbody id="sC.7.37"> @@ -3904,7 +3852,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.3.2">C.7.37 Section 9.3.2 Box offsets: 'top', 'right', 'bottom', 'left'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.37.#q426"> + <tbody id="sC.7.37.#q21.426"> <!-- 0 tests --> </tbody> <tbody id="sC.7.38"> @@ -3913,7 +3861,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.5">C.7.38 Section 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.38.#q427"> + <tbody id="sC.7.38.#q21.427"> <!-- 0 tests --> </tbody> <tbody id="sC.7.39"> @@ -3922,7 +3870,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.5a">C.7.39 Section 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.39.#q428"> + <tbody id="sC.7.39.#q21.428"> <!-- 0 tests --> </tbody> <tbody id="sC.7.40"> @@ -3931,7 +3879,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.5.2">C.7.40 Section 9.5.2 Controlling flow next to floats: the 'clear' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.40.#q429"> + <tbody id="sC.7.40.#q21.429"> <!-- 0 tests --> </tbody> <tbody id="sC.7.41"> @@ -3940,7 +3888,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.5.2a">C.7.41 Section 9.5.2 Controlling flow next to floats: the 'clear' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.41.#q430"> + <tbody id="sC.7.41.#q21.430"> <!-- 0 tests --> </tbody> <tbody id="sC.7.42"> @@ -3949,7 +3897,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.5.2b">C.7.42 Section 9.5.2 Controlling flow next to floats: the 'clear' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.42.#q431"> + <tbody id="sC.7.42.#q21.431"> <!-- 0 tests --> </tbody> <tbody id="sC.7.43"> @@ -3958,7 +3906,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.5.2c">C.7.43 Section 9.5.2 Controlling flow next to floats: the 'clear' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.43.#q432"> + <tbody id="sC.7.43.#q21.432"> <!-- 0 tests --> </tbody> <tbody id="sC.7.44"> @@ -3967,7 +3915,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.14.2.1">C.7.44 Section 14.2.1 Background properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.44.#q433"> + <tbody id="sC.7.44.#q21.433"> <!-- 0 tests --> </tbody> <tbody id="sC.7.45"> @@ -3976,7 +3924,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.9.1">C.7.45 Section 9.9.1 Specifying the stack level: the 'z-index' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.45.#q434"> + <tbody id="sC.7.45.#q21.434"> <!-- 0 tests --> </tbody> <tbody id="sC.7.46"> @@ -3985,7 +3933,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.10">C.7.46 Section 9.10 Text direction: the 'direction' and 'unicode-bidi' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.46.#q435"> + <tbody id="sC.7.46.#q21.435"> <!-- 0 tests --> </tbody> <tbody id="sC.7.47"> @@ -3994,7 +3942,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.10a">C.7.47 Section 9.10 Text direction: the 'direction' and 'unicode-bidi' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.47.#q436"> + <tbody id="sC.7.47.#q21.436"> <!-- 0 tests --> </tbody> <tbody id="sC.7.48"> @@ -4003,7 +3951,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.10b">C.7.48 Section 9.10 Text direction: the 'direction' and 'unicode-bidi' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.48.#q437"> + <tbody id="sC.7.48.#q21.437"> <!-- 0 tests --> </tbody> <tbody id="sC.7.49"> @@ -4012,7 +3960,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.1">C.7.49 Section 10.1 Definition of "containing block"</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.49.#q438"> + <tbody id="sC.7.49.#q21.438"> <!-- 0 tests --> </tbody> <tbody id="sC.7.50"> @@ -4021,7 +3969,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.2">C.7.50 Section 10.2 Content width: the 'width' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.50.#q439"> + <tbody id="sC.7.50.#q21.439"> <!-- 0 tests --> </tbody> <tbody id="sC.7.51"> @@ -4030,7 +3978,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.2a">C.7.51 Section 10.2 Content width: the 'width' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.51.#q440"> + <tbody id="sC.7.51.#q21.440"> <!-- 0 tests --> </tbody> <tbody id="sC.7.52"> @@ -4039,7 +3987,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.2b">C.7.52 Section 10.2 Content width: the 'width' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.52.#q441"> + <tbody id="sC.7.52.#q21.441"> <!-- 0 tests --> </tbody> <tbody id="sC.7.53"> @@ -4048,7 +3996,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.5">C.7.53 Section 10.5 Content height: the 'height' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.53.#q442"> + <tbody id="sC.7.53.#q21.442"> <!-- 0 tests --> </tbody> <tbody id="sC.7.54"> @@ -4057,7 +4005,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.5a">C.7.54 Section 10.5 Content height: the 'height' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.54.#q443"> + <tbody id="sC.7.54.#q21.443"> <!-- 0 tests --> </tbody> <tbody id="sC.7.55"> @@ -4066,7 +4014,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.6.7">C.7.55 Section 10.6.7 'Auto' heights for block formatting context roots</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.55.#q444"> + <tbody id="sC.7.55.#q21.444"> <!-- 0 tests --> </tbody> <tbody id="sC.7.56"> @@ -4075,7 +4023,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.7">C.7.56 Section 10.7 Minimum and maximum heights: 'min-height' and 'max-height'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.56.#q445"> + <tbody id="sC.7.56.#q21.445"> <!-- 0 tests --> </tbody> <tbody id="sC.7.57"> @@ -4084,7 +4032,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.8">C.7.57 Section 10.8 Line height calculations: the 'line-height' and 'vertical-align' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.57.#q446"> + <tbody id="sC.7.57.#q21.446"> <!-- 0 tests --> </tbody> <tbody id="sC.7.58"> @@ -4093,7 +4041,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.8a">C.7.58 Section 10.8 Line height calculations: the 'line-height' and 'vertical-align' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.58.#q447"> + <tbody id="sC.7.58.#q21.447"> <!-- 0 tests --> </tbody> <tbody id="sC.7.59"> @@ -4102,7 +4050,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.8.1">C.7.59 Section 10.8.1 Leading and half-leading</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.59.#q448"> + <tbody id="sC.7.59.#q21.448"> <!-- 0 tests --> </tbody> <tbody id="sC.7.60"> @@ -4111,7 +4059,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.8.1a">C.7.60 Section 10.8.1 Leading and half-leading</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.60.#q449"> + <tbody id="sC.7.60.#q21.449"> <!-- 0 tests --> </tbody> <tbody id="sC.7.61"> @@ -4120,7 +4068,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.8.1b">C.7.61 Section 10.8.1 Leading and half-leading</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.61.#q450"> + <tbody id="sC.7.61.#q21.450"> <!-- 0 tests --> </tbody> <tbody id="sC.7.62"> @@ -4129,7 +4077,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.11.1">C.7.62 Section 11.1 Overflow and clipping</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.62.#q451"> + <tbody id="sC.7.62.#q21.451"> <!-- 0 tests --> </tbody> <tbody id="sC.7.63"> @@ -4138,7 +4086,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.11.1.1">C.7.63 Section 11.1.1 Overflow: the 'overflow' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.63.#q452"> + <tbody id="sC.7.63.#q21.452"> <!-- 0 tests --> </tbody> <tbody id="sC.7.64"> @@ -4147,7 +4095,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.11.1.1a">C.7.64 Section 11.1.1 Overflow: the 'overflow' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.64.#q453"> + <tbody id="sC.7.64.#q21.453"> <!-- 0 tests --> </tbody> <tbody id="sC.7.65"> @@ -4156,7 +4104,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.11.1.1b">C.7.65 Section 11.1.1 Overflow: the 'overflow' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.65.#q454"> + <tbody id="sC.7.65.#q21.454"> <!-- 0 tests --> </tbody> <tbody id="sC.7.66"> @@ -4165,7 +4113,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.11.1.2">C.7.66 Section 11.1.2 Clipping: the 'clip' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.66.#q455"> + <tbody id="sC.7.66.#q21.455"> <!-- 0 tests --> </tbody> <tbody id="sC.7.67"> @@ -4174,7 +4122,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.12.5">C.7.67 Section 12.5 Lists</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.67.#q456"> + <tbody id="sC.7.67.#q21.456"> <!-- 0 tests --> </tbody> <tbody id="sC.7.68"> @@ -4183,7 +4131,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.12.5.1">C.7.68 Section 12.5.1 Lists: the 'list-style-type', 'list-style-image', 'list-style-position', and 'list-style' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.68.#q457"> + <tbody id="sC.7.68.#q21.457"> <!-- 0 tests --> </tbody> <tbody id="sC.7.69"> @@ -4192,7 +4140,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.12.5.1a">C.7.69 Section 12.5.1 Lists: the 'list-style-type', 'list-style-image', 'list-style-position', and 'list-style' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.69.#q458"> + <tbody id="sC.7.69.#q21.458"> <!-- 0 tests --> </tbody> <tbody id="sC.7.70"> @@ -4201,7 +4149,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.12.5.1b">C.7.70 Section 12.5.1 Lists: the 'list-style-type', 'list-style-image', 'list-style-position', and 'list-style' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.70.#q459"> + <tbody id="sC.7.70.#q21.459"> <!-- 0 tests --> </tbody> <tbody id="sC.7.71"> @@ -4210,7 +4158,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.12.5.1c">C.7.71 Section 12.5.1 Lists: the 'list-style-type', 'list-style-image', 'list-style-position', and 'list-style' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.71.#q460"> + <tbody id="sC.7.71.#q21.460"> <!-- 0 tests --> </tbody> <tbody id="sC.7.72"> @@ -4219,7 +4167,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.12.5.1d">C.7.72 Section 12.5.1 Lists: the 'list-style-type', 'list-style-image', 'list-style-position', and 'list-style' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.72.#q461"> + <tbody id="sC.7.72.#q21.461"> <!-- 0 tests --> </tbody> <tbody id="sC.7.73"> @@ -4228,7 +4176,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.13.2">C.7.73 Section 13.2 Page boxes: the @page rule</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.73.#q462"> + <tbody id="sC.7.73.#q21.462"> <!-- 0 tests --> </tbody> <tbody id="sC.7.74"> @@ -4237,7 +4185,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.13.2.2">C.7.74 Section 13.2.2 Page selectors: selecting left, right, and first pages</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.74.#q463"> + <tbody id="sC.7.74.#q21.463"> <!-- 0 tests --> </tbody> <tbody id="sC.7.75"> @@ -4246,7 +4194,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.13.3.2">C.7.75 Section 13.3.2 Breaks inside elements: 'orphans', 'widows'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.75.#q464"> + <tbody id="sC.7.75.#q21.464"> <!-- 0 tests --> </tbody> <tbody id="sC.7.76"> @@ -4255,7 +4203,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.13.3.3">C.7.76 Section 13.3.3 Allowed page breaks</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.76.#q465"> + <tbody id="sC.7.76.#q21.465"> <!-- 0 tests --> </tbody> <tbody id="sC.7.77"> @@ -4264,7 +4212,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.15.3">C.7.77 Section 15.3 Font family: the 'font-family' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.77.#q466"> + <tbody id="sC.7.77.#q21.466"> <!-- 0 tests --> </tbody> <tbody id="sC.7.78"> @@ -4273,7 +4221,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.15.3.1">C.7.78 Section 15.3.1 Generic font families</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.78.#q467"> + <tbody id="sC.7.78.#q21.467"> <!-- 0 tests --> </tbody> <tbody id="sC.7.79"> @@ -4282,7 +4230,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.15.6">C.7.79 Section 15.6 Font boldness: the 'font-weight' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.79.#q468"> + <tbody id="sC.7.79.#q21.468"> <!-- 0 tests --> </tbody> <tbody id="sC.7.80"> @@ -4291,7 +4239,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.15.6q">C.7.80 Section 15.6 Font boldness: the 'font-weight' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.80.#q469"> + <tbody id="sC.7.80.#q21.469"> <!-- 0 tests --> </tbody> <tbody id="sC.7.81"> @@ -4300,7 +4248,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.15.7">C.7.81 Section 15.7 Font size: the 'font-size' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.81.#q470"> + <tbody id="sC.7.81.#q21.470"> <!-- 0 tests --> </tbody> <tbody id="sC.7.82"> @@ -4309,7 +4257,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.16.1">C.7.82 Section 16.1 Indentation: the 'text-indent' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.82.#q471"> + <tbody id="sC.7.82.#q21.471"> <!-- 0 tests --> </tbody> <tbody id="sC.7.83"> @@ -4318,7 +4266,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.16.1a">C.7.83 Section 16.1 Indentation: the 'text-indent' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.83.#q472"> + <tbody id="sC.7.83.#q21.472"> <!-- 0 tests --> </tbody> <tbody id="sC.7.84"> @@ -4327,7 +4275,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.16.2">C.7.84 Section 16.2 Alignment: the 'text-align' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.84.#q473"> + <tbody id="sC.7.84.#q21.473"> <!-- 0 tests --> </tbody> <tbody id="sC.7.85"> @@ -4336,7 +4284,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.16.2a">C.7.85 Section 16.2 Alignment: the 'text-align' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.85.#q474"> + <tbody id="sC.7.85.#q21.474"> <!-- 0 tests --> </tbody> <tbody id="sC.7.86"> @@ -4345,7 +4293,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.16.3.1">C.7.86 Section 16.3.1 Underlining, overlining, striking, and blinking: the 'text-decoration' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.86.#q475"> + <tbody id="sC.7.86.#q21.475"> <!-- 0 tests --> </tbody> <tbody id="sC.7.87"> @@ -4354,7 +4302,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.16.3.1a">C.7.87 Section 16.3.1 Underlining, overlining, striking, and blinking: the 'text-decoration' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.87.#q476"> + <tbody id="sC.7.87.#q21.476"> <!-- 0 tests --> </tbody> <tbody id="sC.7.88"> @@ -4363,7 +4311,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.16.4">C.7.88 Section 16.4 Letter and word spacing: the 'letter-spacing' and 'word-spacing' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.88.#q477"> + <tbody id="sC.7.88.#q21.477"> <!-- 0 tests --> </tbody> <tbody id="sC.7.89"> @@ -4372,7 +4320,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.16.6">C.7.89 Section 16.6 White space: the 'white-space' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.89.#q478"> + <tbody id="sC.7.89.#q21.478"> <!-- 0 tests --> </tbody> <tbody id="sC.7.90"> @@ -4381,7 +4329,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.16.6.1">C.7.90 Section 16.6.1 The 'white-space' processing model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.90.#q479"> + <tbody id="sC.7.90.#q21.479"> <!-- 0 tests --> </tbody> <tbody id="sC.7.91"> @@ -4390,7 +4338,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.16.6.1a">C.7.91 Section 16.6.1 The 'white-space' processing model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.91.#q480"> + <tbody id="sC.7.91.#q21.480"> <!-- 0 tests --> </tbody> <tbody id="sC.7.92"> @@ -4399,7 +4347,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.16.6.1b">C.7.92 Section 16.6.1 The 'white-space' processing model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.92.#q481"> + <tbody id="sC.7.92.#q21.481"> <!-- 0 tests --> </tbody> <tbody id="sC.7.93"> @@ -4408,7 +4356,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.17.2">C.7.93 Section 17.2 The CSS table model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.93.#q482"> + <tbody id="sC.7.93.#q21.482"> <!-- 0 tests --> </tbody> <tbody id="sC.7.94"> @@ -4417,7 +4365,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.17.2.1">C.7.94 Section 17.2.1 Anonymous table objects</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.94.#q483"> + <tbody id="sC.7.94.#q21.483"> <!-- 0 tests --> </tbody> <tbody id="sC.7.95"> @@ -4426,7 +4374,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.17.2.1a">C.7.95 Section 17.2.1 Anonymous table objects</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.95.#q484"> + <tbody id="sC.7.95.#q21.484"> <!-- 0 tests --> </tbody> <tbody id="sC.7.96"> @@ -4435,7 +4383,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.17.4">C.7.96 Section 17.4 Tables in the visual formatting model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.96.#q485"> + <tbody id="sC.7.96.#q21.485"> <!-- 0 tests --> </tbody> <tbody id="sC.7.97"> @@ -4444,7 +4392,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.17.4a">C.7.97 Section 17.4 Tables in the visual formatting model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.97.#q486"> + <tbody id="sC.7.97.#q21.486"> <!-- 0 tests --> </tbody> <tbody id="sC.7.98"> @@ -4453,7 +4401,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.17.5.2.2">C.7.98 Section 17.5.2.2 Automatic table layout</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.98.#q487"> + <tbody id="sC.7.98.#q21.487"> <!-- 0 tests --> </tbody> <tbody id="sC.7.99"> @@ -4462,7 +4410,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.17.5.3">C.7.99 Section 17.5.3 Table height algorithms</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.99.#q488"> + <tbody id="sC.7.99.#q21.488"> <!-- 0 tests --> </tbody> <tbody id="sC.7.100"> @@ -4471,7 +4419,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.17.5.4">C.7.100 Section 17.5.4 Horizontal alignment in a column</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.100.#q489"> + <tbody id="sC.7.100.#q21.489"> <!-- 0 tests --> </tbody> <tbody id="sC.7.101"> @@ -4480,7 +4428,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.B.2">C.7.101 Section B.2 Informative references</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.101.#q490"> + <tbody id="sC.7.101.#q21.490"> <!-- 0 tests --> </tbody> <tbody id="sC.7.102"> @@ -4489,7 +4437,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.D">C.7.102 Section D. Default style sheet for HTML 4</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.102.#q491"> + <tbody id="sC.7.102.#q21.491"> <!-- 0 tests --> </tbody> <tbody id="sC.7.103"> @@ -4498,7 +4446,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.E.2">C.7.103 Section E.2 Painting order</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.103.#q492"> + <tbody id="sC.7.103.#q21.492"> <!-- 0 tests --> </tbody> <tbody id="sC.7.104"> @@ -4507,7 +4455,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.G">C.7.104 Appendix G Grammar of CSS 2.1</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.104.#q493"> + <tbody id="sC.7.104.#q21.493"> <!-- 0 tests --> </tbody> <tbody id="sC.8"> @@ -4516,7 +4464,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#errata4">C.8 Changes since the working draft of 7 December 2010</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.#q494"> + <tbody id="sC.8.#q21.494"> <!-- 0 tests --> </tbody> <tbody id="sC.8.1"> @@ -4525,7 +4473,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.8.3.1">C.8.1 8.3.1 Collapsing margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.1.#q495"> + <tbody id="sC.8.1.#q21.495"> <!-- 0 tests --> </tbody> <tbody id="sC.8.2"> @@ -4534,7 +4482,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.10.8.1">C.8.2 10.8.1 Leading and half-leading</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.2.#q496"> + <tbody id="sC.8.2.#q21.496"> <!-- 0 tests --> </tbody> <tbody id="sC.8.3"> @@ -4543,7 +4491,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.10.3">C.8.3 10.3 Calculating widths and margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.3.#q497"> + <tbody id="sC.8.3.#q21.497"> <!-- 0 tests --> </tbody> <tbody id="sC.8.4"> @@ -4552,7 +4500,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.14.3">C.8.4 14.3 Gamma correction</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.4.#q498"> + <tbody id="sC.8.4.#q21.498"> <!-- 0 tests --> </tbody> <tbody id="sC.8.5"> @@ -4561,7 +4509,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.11.1.2">C.8.5 11.1.2 Clipping: the 'clip' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.5.#q499"> + <tbody id="sC.8.5.#q21.499"> <!-- 0 tests --> </tbody> <tbody id="sC.8.6"> @@ -4570,7 +4518,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.4.2">C.8.6 9.4.2 Inline formatting contexts</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.6.#q500"> + <tbody id="sC.8.6.#q21.500"> <!-- 0 tests --> </tbody> <tbody id="sC.8.7"> @@ -4579,7 +4527,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.10.3.2">C.8.7 10.3.2 Inline, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.7.#q501"> + <tbody id="sC.8.7.#q21.501"> <!-- 0 tests --> </tbody> <tbody id="sC.8.8"> @@ -4588,7 +4536,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.10.1">C.8.8 10.1 Definition of "containing block"</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.8.#q502"> + <tbody id="sC.8.8.#q21.502"> <!-- 0 tests --> </tbody> <tbody id="sC.8.9"> @@ -4597,7 +4545,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.13.2.2">C.8.9 13.2.2 Page selectors: selecting left, right, and first pages</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.9.#q503"> + <tbody id="sC.8.9.#q21.503"> <!-- 0 tests --> </tbody> <tbody id="sC.8.10"> @@ -4606,7 +4554,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.8.3.1a">C.8.10 8.3.1 Collapsing margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.10.#q504"> + <tbody id="sC.8.10.#q21.504"> <!-- 0 tests --> </tbody> <tbody id="sC.8.11"> @@ -4615,7 +4563,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.10.8">C.8.11 10.8 Line height calculations: the 'line-height' and 'vertical-align' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.11.#q505"> + <tbody id="sC.8.11.#q21.505"> <!-- 0 tests --> </tbody> <tbody id="sC.8.12"> @@ -4624,7 +4572,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.10.8.1a">C.8.12 10.8.1 Leading and half-leading</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.12.#q506"> + <tbody id="sC.8.12.#q21.506"> <!-- 0 tests --> </tbody> <tbody id="sC.8.13"> @@ -4633,7 +4581,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.10.6.1a">C.8.13 10.6.1 Inline, non-replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.13.#q507"> + <tbody id="sC.8.13.#q21.507"> <!-- 0 tests --> </tbody> <tbody id="sC.8.14"> @@ -4642,7 +4590,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.5.1">C.8.14 9.5.1 Positioning the float: the 'float' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.14.#q508"> + <tbody id="sC.8.14.#q21.508"> <!-- 0 tests --> </tbody> <tbody id="sC.8.15"> @@ -4651,7 +4599,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.2.1.1">C.8.15 9.2.1.1 Anonymous block boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.15.#q509"> + <tbody id="sC.8.15.#q21.509"> <!-- 0 tests --> </tbody> <tbody id="sC.8.16"> @@ -4660,7 +4608,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.5.12.1">C.8.16 5.12.1 The :first-line pseudo-element</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.16.#q510"> + <tbody id="sC.8.16.#q21.510"> <!-- 0 tests --> </tbody> <tbody id="sC.8.17"> @@ -4669,7 +4617,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.16.6">C.8.17 16.6 White space: the 'white-space' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.17.#q511"> + <tbody id="sC.8.17.#q21.511"> <!-- 0 tests --> </tbody> <tbody id="sC.8.18"> @@ -4678,7 +4626,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.12.5.1">C.8.18 12.5.1 Lists: the 'list-style-type', 'list-style-image', 'list-style-position', and 'list-style' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.18.#q512"> + <tbody id="sC.8.18.#q21.512"> <!-- 0 tests --> </tbody> <tbody id="sC.8.19"> @@ -4687,7 +4635,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.7">C.8.19 9.7 Relationships between 'display', 'position', and 'float'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.19.#q513"> + <tbody id="sC.8.19.#q21.513"> <!-- 0 tests --> </tbody> <tbody id="sC.8.20"> @@ -4696,7 +4644,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.4.2a">C.8.20 9.4.2 Inline formatting contexts</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.20.#q514"> + <tbody id="sC.8.20.#q21.514"> <!-- 0 tests --> </tbody> <tbody id="sC.8.21"> @@ -4705,7 +4653,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.4.1.9">C.8.21 4.1.9 Comments</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.21.#q515"> + <tbody id="sC.8.21.#q21.515"> <!-- 0 tests --> </tbody> <tbody id="sC.8.22"> @@ -4714,7 +4662,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.12.5.1a">C.8.22 12.5.1 Lists: the 'list-style-type', 'list-style-image', 'list-style-position', and 'list-style' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.22.#q516"> + <tbody id="sC.8.22.#q21.516"> <!-- 0 tests --> </tbody> <tbody id="sC.8.23"> @@ -4723,7 +4671,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.5.1a">C.8.23 9.5.1 Positioning the float: the 'float' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.23.#q517"> + <tbody id="sC.8.23.#q21.517"> <!-- 0 tests --> </tbody> <tbody id="sC.8.24"> @@ -4732,7 +4680,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.3">C.8.24 9.3 Positioning schemes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.24.#q518"> + <tbody id="sC.8.24.#q21.518"> <!-- 0 tests --> </tbody> <tbody id="sC.8.25"> @@ -4741,7 +4689,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.10">C.8.25 9.10 Text direction: the 'direction' and 'unicode-bidi' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.25.#q519"> + <tbody id="sC.8.25.#q21.519"> <!-- 0 tests --> </tbody> <tbody id="sC.8.26"> @@ -4750,7 +4698,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.16.3.1">C.8.26 16.3.1 Underlining, overlining, striking, and blinking: the 'text-decoration' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.26.#q520"> + <tbody id="sC.8.26.#q21.520"> <!-- 0 tests --> </tbody> <tbody id="sC.8.27"> @@ -4759,7 +4707,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.16.3.1a">C.8.27 16.3.1 Underlining, overlining, striking, and blinking: the 'text-decoration' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.27.#q521"> + <tbody id="sC.8.27.#q21.521"> <!-- 0 tests --> </tbody> <tbody id="sC.8.28"> @@ -4768,7 +4716,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.10.4">C.8.28 10.4 Minimum and maximum widths: 'min-width' and 'max-width'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.28.#q522"> + <tbody id="sC.8.28.#q21.522"> <!-- 0 tests --> </tbody> <tbody id="sC.8.29"> @@ -4777,7 +4725,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.3.2">C.8.29 9.3.2 Box offsets: 'top', 'right', 'bottom', 'left'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.29.#q523"> + <tbody id="sC.8.29.#q21.523"> <!-- 0 tests --> </tbody> <tbody id="sC.8.30"> @@ -4786,7 +4734,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.2.1.1a">C.8.30 9.2.1.1 Anonymous block boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.30.#q524"> + <tbody id="sC.8.30.#q21.524"> <!-- 0 tests --> </tbody> <tbody id="sC.8.31"> @@ -4795,7 +4743,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.2.1.1b">C.8.31 17.4 Tables in the visual formatting model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.31.#q525"> + <tbody id="sC.8.31.#q21.525"> <!-- 0 tests --> </tbody> <tbody id="sC.8.32"> @@ -4807,7 +4755,7 @@ <tbody id="sC.8.32.#img-clip"> <!-- 0 tests --> </tbody> - <tbody id="sC.8.32.#q526"> + <tbody id="sC.8.32.#q21.526"> <!-- 0 tests --> </tbody> <tbody id="sC.8.33"> @@ -4816,7 +4764,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.13.2">C.8.33 13.2 Page boxes: the @page rule</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.33.#q527"> + <tbody id="sC.8.33.#q21.527"> <!-- 0 tests --> </tbody> <tbody id="sC.8.34"> @@ -4825,7 +4773,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.4.1.1">C.8.34 4.1.1 Tokenization</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.34.#q528"> + <tbody id="sC.8.34.#q21.528"> <!-- 0 tests --> </tbody> <tbody id="sC.8.35"> @@ -4834,7 +4782,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.4.2">C.8.35 4.2 Rules for handling parsing errors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.35.#q529"> + <tbody id="sC.8.35.#q21.529"> <!-- 0 tests --> </tbody> <tbody id="sC.8.36"> @@ -4843,7 +4791,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.3.1">C.8.36 3.1 Definitions</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.36.#q530"> + <tbody id="sC.8.36.#q21.530"> <!-- 0 tests --> </tbody> <tbody id="sC.8.37"> @@ -4852,7 +4800,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.4.3.4">C.8.37 4.3.4 URLs and URIs</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.37.#q531"> + <tbody id="sC.8.37.#q21.531"> <!-- 0 tests --> </tbody> <tbody id="sC.8.38"> @@ -4861,7 +4809,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.5">C.8.38 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.38.#q532"> + <tbody id="sC.8.38.#q21.532"> <!-- 0 tests --> </tbody> <tbody id="sC.8.39"> @@ -4870,7 +4818,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.11.1.1">C.8.39 11.1.1 Overflow: the 'overflow' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.39.#q533"> + <tbody id="sC.8.39.#q21.533"> <!-- 0 tests --> </tbody> <tbody id="sC.8.40"> @@ -4879,7 +4827,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.2.1.1c">C.8.40 9.2.1.1 Anonymous block boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.40.#q534"> + <tbody id="sC.8.40.#q21.534"> <!-- 0 tests --> </tbody> <tbody id="sC.8.41"> @@ -4888,7 +4836,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.16.2">C.8.41 16.2 Alignment: the 'text-align' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.41.#q535"> + <tbody id="sC.8.41.#q21.535"> <!-- 0 tests --> </tbody> <tbody id="sC.8.42"> @@ -4897,7 +4845,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.5a">C.8.42 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.42.#q536"> + <tbody id="sC.8.42.#q21.536"> <!-- 0 tests --> </tbody> <tbody id="sC.8.43"> @@ -4906,7 +4854,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.4.2b">C.8.43 9.4.2 Inline formatting contexts</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.43.#q537"> + <tbody id="sC.8.43.#q21.537"> <!-- 0 tests --> </tbody> <tbody id="sC.8.44"> @@ -4915,7 +4863,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.5.12">C.8.44 5.12 Pseudo-elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.44.#q538"> + <tbody id="sC.8.44.#q21.538"> <!-- 0 tests --> </tbody> <tbody id="sC.8.45"> @@ -4924,7 +4872,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.5b">C.8.45 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.45.#q539"> + <tbody id="sC.8.45.#q21.539"> <!-- 0 tests --> </tbody> <tbody id="sC.8.46"> @@ -4933,7 +4881,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.5c">C.8.46 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.46.#q540"> + <tbody id="sC.8.46.#q21.540"> <!-- 0 tests --> </tbody> <tbody id="sC.8.47"> @@ -4942,7 +4890,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.14.2.1">C.8.47 14.2.1 Background properties: 'background-color', 'background-image', 'background-repeat', 'background-attachment', 'background-position', and 'background'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.47.#q541"> + <tbody id="sC.8.47.#q21.541"> <!-- 0 tests --> </tbody> <tbody id="sC.8.48"> @@ -4951,7 +4899,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.2.4">C.8.48 9.2.4 The 'display' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.48.#q542"> + <tbody id="sC.8.48.#q21.542"> <!-- 0 tests --> </tbody> <tbody id="sC.8.49"> @@ -4960,7 +4908,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.6.1.2">C.8.49 6.1.2 Computed values</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.49.#q543"> + <tbody id="sC.8.49.#q21.543"> <!-- 0 tests --> </tbody> <tbody id="sC.8.50"> @@ -4969,7 +4917,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.10.3.2a">C.8.50 10.3.2 Inline, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.50.#q544"> + <tbody id="sC.8.50.#q21.544"> <!-- 0 tests --> </tbody> <tbody id="sC.8.51"> @@ -4978,7 +4926,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.5.2d">C.8.51 Section 9.5.2 Controlling flow next to floats: the 'clear' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.51.#q545"> + <tbody id="sC.8.51.#q21.545"> <!-- 0 tests --> </tbody> <tbody id="sC.8.52"> @@ -4987,7 +4935,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.G.2">C.8.52 G.2 Lexical scanner</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.52.#q546"> + <tbody id="sC.8.52.#q21.546"> <!-- 0 tests --> </tbody> <tbody id="sC.8.53"> @@ -4996,7 +4944,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.5.2e">C.8.53 Section 9.5.2 Controlling flow next to floats: the 'clear' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.53.#q547"> + <tbody id="sC.8.53.#q21.547"> <!-- 0 tests --> </tbody> <tbody id="sC.8.54"> @@ -5005,7 +4953,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.5b">C.8.54 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.54.#q548"> + <tbody id="sC.8.54.#q21.548"> <!-- 0 tests --> </tbody> <tbody id="sC.8.55"> @@ -5014,7 +4962,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.6.3">C.8.55 10.6.3 Block-level non-replaced elements in normal flow when 'overflow' computes to 'visible'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.55.#q549"> + <tbody id="sC.8.55.#q21.549"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-D.xht b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-D.xht index e545bb18322..25686c7f8f7 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-D.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-D.xht @@ -30,7 +30,10 @@ <tbody id="sD"> <tr><th colspan="4" scope="rowgroup"> <a href="#sD">+</a> - <a href="https://www.w3.org/TR/CSS21/sample.html">D Default style sheet for HTML 4</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/sample.html#q22.0">D Default style sheet for HTML 4</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="sD.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="sD.#bidi"> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-E.xht b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-E.xht index db091b778bc..da61f955249 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-E.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-E.xht @@ -30,7 +30,10 @@ <tbody id="sE"> <tr><th colspan="4" scope="rowgroup"> <a href="#sE">+</a> - <a href="https://www.w3.org/TR/CSS21/zindex.html">E Elaborate description of Stacking Contexts</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/zindex.html#q23.0">E Elaborate description of Stacking Contexts</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="sE.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="sE.1"> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-F.xht b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-F.xht index e21dce70fa5..e3076552071 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-F.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-F.xht @@ -30,7 +30,10 @@ <tbody id="sF"> <tr><th colspan="4" scope="rowgroup"> <a href="#sF">+</a> - <a href="https://www.w3.org/TR/CSS21/propidx.html">F Full property table</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/propidx.html#q24.0">F Full property table</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="sF.#annoying-warning"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-G.xht b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-G.xht index aabf7a4165f..887475ba8de 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-G.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-G.xht @@ -30,7 +30,10 @@ <tbody id="sG"> <tr><th colspan="4" scope="rowgroup"> <a href="#sG">+</a> - <a href="https://www.w3.org/TR/CSS21/grammar.html">G Grammar of CSS 2.1</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/grammar.html#q25.0">G Grammar of CSS 2.1</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="sG.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="sG.1"> @@ -94,7 +97,7 @@ <tbody id="sG.4"> <tr><th colspan="4" scope="rowgroup"> <a href="#sG.4">+</a> - <a href="https://www.w3.org/TR/CSS21/grammar.html#q4">G.4 Implementation note</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/grammar.html#q25.4">G.4 Implementation note</a></th></tr> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-H.xht b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-H.xht index 3eb7ca5905a..39bcb5d13a7 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-H.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-H.xht @@ -30,7 +30,7 @@ <tbody id="sH"> <tr><th colspan="4" scope="rowgroup"> <a href="#sH">+</a> - <a href="https://www.w3.org/TR/CSS21/leftblank.html">H Has been intentionally left blank</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/leftblank.html#q26.0">H Has been intentionally left blank</a></th></tr> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-I.xht b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-I.xht index 1ef7f7f13ac..12f7fc762b4 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1/chapter-I.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1/chapter-I.xht @@ -30,7 +30,10 @@ <tbody id="sI"> <tr><th colspan="4" scope="rowgroup"> <a href="#sI">+</a> - <a href="https://www.w3.org/TR/CSS21/indexlist.html">I Index</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/indexlist.html#q27.0">I Index</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="sI.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="sI.#index-;"> @@ -147,6 +150,9 @@ <tbody id="sI.#index-z"> <!-- 0 tests --> </tbody> + <tbody id="sstatus.#annoying-warning"> + <!-- 0 tests --> + </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/overflow-html-body-001.xht b/tests/wpt/css-tests/css21_dev/xhtml1/overflow-html-body-001.xht new file mode 100644 index 00000000000..6b36f5d2e9b --- /dev/null +++ b/tests/wpt/css-tests/css21_dev/xhtml1/overflow-html-body-001.xht @@ -0,0 +1,24 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title>CSS Test: Overflow on body propagates to viewport</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visufx.html#overflow" /> + <meta name="assert" content="An HTML user agent propagates the 'overflow' property from the 'body' to the viewport." /> + <style type="text/css"> + body + { + overflow: hidden; + } + div + { + height: 110%; + width: 110%; + } + </style> + </head> + <body> + <p>Test passes if the horizontal and vertical scrolling mechanism is not available on the page.</p> + <div></div> + </body> +</html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/reftest-toc.xht b/tests/wpt/css-tests/css21_dev/xhtml1/reftest-toc.xht index e434af6c622..b2681a3481e 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1/reftest-toc.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1/reftest-toc.xht @@ -250,7 +250,7 @@ </tbody> <tbody id="abs-pos-non-replaced-vlr-059" class="ahem image"> <tr> - <td rowspan="1" title="absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'"> + <td rowspan="1" title="absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto'"> <a href="abs-pos-non-replaced-vlr-059.xht">abs-pos-non-replaced-vlr-059</a></td> <td><a href="reference/abs-pos-non-replaced-vrl-004-ref.xht">=</a> </td> <td rowspan="1"><abbr class="ahem" title="Requires Ahem font">Ahem</abbr><abbr class="image" title="Requires bitmap graphic support">Bitmaps</abbr></td> @@ -1146,7 +1146,7 @@ </tbody> <tbody id="abs-pos-non-replaced-vrl-058" class="ahem image"> <tr> - <td rowspan="1" title="absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'"> + <td rowspan="1" title="absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto'"> <a href="abs-pos-non-replaced-vrl-058.xht">abs-pos-non-replaced-vrl-058</a></td> <td><a href="reference/abs-pos-non-replaced-vrl-004-ref.xht">=</a> </td> <td rowspan="1"><abbr class="ahem" title="Requires Ahem font">Ahem</abbr><abbr class="image" title="Requires bitmap graphic support">Bitmaps</abbr></td> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/table-intro-example-001.xht b/tests/wpt/css-tests/css21_dev/xhtml1/table-intro-example-001.xht new file mode 100644 index 00000000000..ba82e39af4f --- /dev/null +++ b/tests/wpt/css-tests/css21_dev/xhtml1/table-intro-example-001.xht @@ -0,0 +1,50 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title>CSS Test: Introduction to Tables (text-align, font-weight)</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/tables.html#tables-intro" /> + <meta name="assert" content="'text-align' and 'font-weight' can be applied to table cells (example from spec section 17.1)." /> + <style type="text/css"> + caption + { + color: blue; + } + td + { + border: 1px solid blue; + height: 5em; + width: 10em; + } + th + { + border: 1px solid blue; + font-weight: bold; + height: 5em; + text-align: center; + width: 10em; + } + </style> + </head> + <body> + <p>Test passes if the text in the left-most box column is centered in its column and darker than the text in the other columns.</p> + <table> + <caption>This is a simple 3x3 table</caption> + <tr id="row1"> + <th>Header 1</th> + <td>Cell 1</td> + <td>Cell 2</td> + </tr> + <tr id="row2"> + <th>Header 2</th> + <td>Cell 3</td> + <td>Cell 4</td> + </tr> + <tr id="row3"> + <th>Header 3</th> + <td>Cell 5</td> + <td>Cell 6</td> + </tr> + </table> + </body> + </html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/table-intro-example-002.xht b/tests/wpt/css-tests/css21_dev/xhtml1/table-intro-example-002.xht new file mode 100644 index 00000000000..1cdd4cd478f --- /dev/null +++ b/tests/wpt/css-tests/css21_dev/xhtml1/table-intro-example-002.xht @@ -0,0 +1,50 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title>CSS Test: Introduction to Tables (vertical-align)</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/tables.html#tables-intro" /> + <meta name="assert" content="'vertical-align' can be set on table cells (example from section 17.1)." /> + <style type="text/css"> + caption + { + color: blue; + } + td + { + border: 1px solid blue; + height: 5em; + vertical-align: middle; + width: 10em; + } + th + { + border: 1px solid blue; + height: 5em; + vertical-align: baseline; + width: 10em; + } + </style> + </head> + <body> + <p>Test passes if the text in the left-most box column is at the very top of the column and text in the other two columns is vertically centered.</p> + <table> + <caption>This is a simple 3x3 table</caption> + <tr id="row1"> + <th>Header 1</th> + <td>Cell 1</td> + <td>Cell 2</td> + </tr> + <tr id="row2"> + <th>Header 2</th> + <td>Cell 3</td> + <td>Cell 4</td> + </tr> + <tr id="row3"> + <th>Header 3</th> + <td>Cell 5</td> + <td>Cell 6</td> + </tr> + </table> + </body> + </html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/table-intro-example-003.xht b/tests/wpt/css-tests/css21_dev/xhtml1/table-intro-example-003.xht new file mode 100644 index 00000000000..7394f283a9a --- /dev/null +++ b/tests/wpt/css-tests/css21_dev/xhtml1/table-intro-example-003.xht @@ -0,0 +1,48 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title>CSS Test: Introduction to Tables (border-collapse, border)</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/tables.html#tables-intro" /> + <meta name="assert" content="'border-collapse' and 'border' can be set on table elements (example from section 17.1)." /> + <style type="text/css"> + table + { + border-collapse: collapse; + } + tr#row1 + { + border: 3px solid blue; + } + tr#row2 + { + border: 1px solid black; + } + tr#row3 + { + border: 1px solid black; + } + </style> + </head> + <body> + <p>Test passes if the box below is separated into three horizontal rows, and the top one has a blue border that is thicker than the borders of the other rows.</p> + <table> + <caption>This is a simple 3x3 table</caption> + <tr id="row1"> + <th>Header 1</th> + <td>Cell 1</td> + <td>Cell 2</td> + </tr> + <tr id="row2"> + <th>Header 2</th> + <td>Cell 3</td> + <td>Cell 4</td> + </tr> + <tr id="row3"> + <th>Header 3</th> + <td>Cell 5</td> + <td>Cell 6</td> + </tr> + </table> + </body> + </html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/table-intro-example-004.xht b/tests/wpt/css-tests/css21_dev/xhtml1/table-intro-example-004.xht new file mode 100644 index 00000000000..b41f9bf2849 --- /dev/null +++ b/tests/wpt/css-tests/css21_dev/xhtml1/table-intro-example-004.xht @@ -0,0 +1,45 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title>CSS Test: Introduction to Tables (caption-side)</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/tables.html#tables-intro" /> + <meta name="assert" content="'caption-side' can be set on a table caption (example from section 17.1)." /> + <style type="text/css"> + caption + { + color: blue; + caption-side: top; + } + td + { + border: solid black; + } + th + { + border: solid black; + } + </style> + </head> + <body> + <p>Test passes if blue text (with the words 'This is a simple 3x3 table') appears above the three-by-three grid below.</p> + <table> + <caption>This is a simple 3x3 table</caption> + <tr id="row1"> + <th>Header 1</th> + <td>Cell 1</td> + <td>Cell 2</td> + </tr> + <tr id="row2"> + <th>Header 2</th> + <td>Cell 3</td> + <td>Cell 4</td> + </tr> + <tr id="row3"> + <th>Header 3</th> + <td>Cell 5</td> + <td>Cell 6</td> + </tr> + </table> + </body> + </html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css21_dev/xhtml1/toc.xht b/tests/wpt/css-tests/css21_dev/xhtml1/toc.xht index 3d44f5c1398..f960046517a 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1/toc.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1/toc.xht @@ -37,22 +37,22 @@ <tbody id="s4"> <tr><th><a href="chapter-4.xht">Chapter 4 - Syntax and basic data types</a></th> - <td>(439 Tests)</td></tr> + <td>(431 Tests)</td></tr> </tbody> <tbody id="s5"> <tr><th><a href="chapter-5.xht">Chapter 5 - Selectors</a></th> - <td>(677 Tests)</td></tr> + <td>(668 Tests)</td></tr> </tbody> <tbody id="s6"> <tr><th><a href="chapter-6.xht">Chapter 6 - Assigning property values, Cascading, and Inheritance</a></th> - <td>(145 Tests)</td></tr> + <td>(117 Tests)</td></tr> </tbody> <tbody id="s7"> <tr><th><a href="chapter-7.xht">Chapter 7 - Media types</a></th> - <td>(22 Tests)</td></tr> + <td>(5 Tests)</td></tr> </tbody> <tbody id="s8"> <tr><th><a href="chapter-8.xht">Chapter 8 - @@ -62,7 +62,7 @@ <tbody id="s9"> <tr><th><a href="chapter-9.xht">Chapter 9 - Visual formatting model</a></th> - <td>(1247 Tests)</td></tr> + <td>(1246 Tests)</td></tr> </tbody> <tbody id="s10"> <tr><th><a href="chapter-10.xht">Chapter 10 - @@ -122,7 +122,7 @@ <tbody id="sC"> <tr><th><a href="chapter-C.xht">Appendix C - Changes</a></th> - <td>(5 Tests)</td></tr> + <td>(0 Tests)</td></tr> </tbody> <tbody id="sD"> <tr><th><a href="chapter-D.xht">Appendix D - diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/abs-pos-non-replaced-vlr-059.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/abs-pos-non-replaced-vlr-059.xht index c0f61875086..f6b43d0a74a 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1print/abs-pos-non-replaced-vlr-059.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/abs-pos-non-replaced-vlr-059.xht @@ -3,7 +3,7 @@ <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> - <title>CSS Writing Modes Test: absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'</title> + <title>CSS Writing Modes Test: absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto'</title> <style type="text/css"> @page { font: italic 8pt sans-serif; color: gray; margin: 7%; @@ -20,7 +20,7 @@ <link rel="match" href="reference/abs-pos-non-replaced-vrl-004-ref.xht" /> <meta name="flags" content="ahem image" /> - <meta name="assert" content="When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left', then solve for 'left'." /> + <meta name="assert" content="When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'." /> <style type="text/css"><![CDATA[ div#containing-block diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/abs-pos-non-replaced-vrl-058.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/abs-pos-non-replaced-vrl-058.xht index c2bf41e172b..a695289871c 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1print/abs-pos-non-replaced-vrl-058.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/abs-pos-non-replaced-vrl-058.xht @@ -3,7 +3,7 @@ <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> - <title>CSS Writing Modes Test: absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'</title> + <title>CSS Writing Modes Test: absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto'</title> <style type="text/css"> @page { font: italic 8pt sans-serif; color: gray; margin: 7%; @@ -20,7 +20,7 @@ <link rel="match" href="reference/abs-pos-non-replaced-vrl-004-ref.xht" /> <meta name="flags" content="ahem image" /> - <meta name="assert" content="When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left', then solve for 'left'." /> + <meta name="assert" content="When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'." /> <style type="text/css"><![CDATA[ div#containing-block diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/basic-html-table-001.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/basic-html-table-001.xht new file mode 100644 index 00000000000..26a4e3e5de2 --- /dev/null +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/basic-html-table-001.xht @@ -0,0 +1,59 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title>CSS Test: HTML table with every table element</title> + <style type="text/css"> + @page { font: italic 8pt sans-serif; color: gray; + margin: 7%; + counter-increment: page; + @top-left { content: "CSS 2.1 Conformance Test Suite"; } + @top-right { content: "Test basic-html-table-001"; } + @bottom-right { content: counter(page); } + } +</style> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/tables.html#table-display" /> + <link rel="help" href="http://www.w3.org/TR/REC-html40/struct/tables.html#h-11.2" /> + <meta name="assert" content="HTML table elements are supported." /> + <style type="text/css"> + caption, td, th + { + background: black; + } + </style> + </head> + <body> + <p>Test passes if there is a solid bar on top of a three-by-three grid of boxes below.</p> + <table border="1"> + <caption>X</caption> + <colgroup> + <col /> + <col /> + </colgroup> + <colgroup> + <col /> + </colgroup> + <thead> + <tr> + <th>XXXXX</th> + <th>XXXXX</th> + <th>XXXXX</th> + </tr> + </thead> + <tfoot> + <tr> + <td>XXXXX</td> + <td>XXXXX</td> + <td>XXXXX</td> + </tr> + </tfoot> + <tbody> + <tr> + <td>XXXXX</td> + <td>XXXXX</td> + <td>XXXXX</td> + </tr> + </tbody> + </table> + </body> +</html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-1.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-1.xht index 71ff793d472..ed573d284aa 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-1.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-1.xht @@ -30,7 +30,10 @@ <tbody id="s1"> <tr><th colspan="4" scope="rowgroup"> <a href="#s1">+</a> - <a href="https://www.w3.org/TR/CSS21/about.html">1 About the CSS 2.1 Specification</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/about.html#q1.0">1 About the CSS 2.1 Specification</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s1.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="s1.1"> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-10.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-10.xht index ba733da8144..37e75a29ed5 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-10.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-10.xht @@ -30,7 +30,10 @@ <tbody id="s10"> <tr><th colspan="4" scope="rowgroup"> <a href="#s10">+</a> - <a href="https://www.w3.org/TR/CSS21/visudet.html">10 Visual formatting model details</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/visudet.html#q10.0">10 Visual formatting model details</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s10.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="s10.1"> @@ -4171,9 +4174,9 @@ <a href="abs-pos-non-replaced-vlr-059.xht">abs-pos-non-replaced-vlr-059</a></td> <td><a href="reference/abs-pos-non-replaced-vrl-004-ref.xht">=</a> </td> <td><abbr class="ahem" title="Requires Ahem font">Ahem</abbr><abbr class="image" title="Requires bitmap graphic support">Bitmaps</abbr></td> - <td>absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left' + <td>absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto' <ul class="assert"> - <li>When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left', then solve for 'left'.</li> + <li>When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'.</li> </ul> </td> </tr> @@ -4699,9 +4702,9 @@ <a href="abs-pos-non-replaced-vrl-058.xht">abs-pos-non-replaced-vrl-058</a></td> <td><a href="reference/abs-pos-non-replaced-vrl-004-ref.xht">=</a> </td> <td><abbr class="ahem" title="Requires Ahem font">Ahem</abbr><abbr class="image" title="Requires bitmap graphic support">Bitmaps</abbr></td> - <td>absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left' + <td>absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto' <ul class="assert"> - <li>When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left', then solve for 'left'.</li> + <li>When 'direction' is 'rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'.</li> </ul> </td> </tr> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-11.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-11.xht index b0cb056530e..a6388179b3a 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-11.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-11.xht @@ -30,7 +30,10 @@ <tbody id="s11"> <tr><th colspan="4" scope="rowgroup"> <a href="#s11">+</a> - <a href="https://www.w3.org/TR/CSS21/visufx.html">11 Visual effects</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/visufx.html#q11.0">11 Visual effects</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s11.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="s11.1"> @@ -616,6 +619,17 @@ </ul> </td> </tr> + <tr id="overflow-html-body-001-11.1.1" class=""> + <td> + <a href="overflow-html-body-001.xht">overflow-html-body-001</a></td> + <td></td> + <td></td> + <td>Overflow on body propagates to viewport + <ul class="assert"> + <li>An HTML user agent propagates the 'overflow' property from the 'body' to the viewport.</li> + </ul> + </td> + </tr> <tr id="overflow-parent-001-11.1.1" class=""> <td> <a href="overflow-parent-001.xht">overflow-parent-001</a></td> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-12.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-12.xht index d3a7c255aa7..ec3b574b825 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-12.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-12.xht @@ -33,6 +33,9 @@ <a href="https://www.w3.org/TR/CSS21/generate.html#generated-text">12 Generated content, automatic numbering, and lists</a></th></tr> <!-- 0 tests --> </tbody> + <tbody id="s12.#annoying-warning"> + <!-- 0 tests --> + </tbody> <tbody id="s12.#x0"> <!-- 0 tests --> </tbody> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-13.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-13.xht index f0ee1586a8b..f89e4e6e376 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-13.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-13.xht @@ -33,6 +33,9 @@ <a href="https://www.w3.org/TR/CSS21/page.html#the-page">13 Paged media</a></th></tr> <!-- 0 tests --> </tbody> + <tbody id="s13.#annoying-warning"> + <!-- 0 tests --> + </tbody> <tbody id="s13.1"> <tr><th colspan="4" scope="rowgroup"> <a href="#s13.1">+</a> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-14.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-14.xht index 810d9c25fe7..1123ff003e3 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-14.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-14.xht @@ -30,7 +30,10 @@ <tbody id="s14"> <tr><th colspan="4" scope="rowgroup"> <a href="#s14">+</a> - <a href="https://www.w3.org/TR/CSS21/colors.html">14 Colors and Backgrounds</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/colors.html#q14.0">14 Colors and Backgrounds</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s14.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="s14.1"> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-15.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-15.xht index 5400d683ecb..31c6e9d5837 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-15.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-15.xht @@ -30,7 +30,10 @@ <tbody id="s15"> <tr><th colspan="4" scope="rowgroup"> <a href="#s15">+</a> - <a href="https://www.w3.org/TR/CSS21/fonts.html">15 Fonts</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/fonts.html#q15.0">15 Fonts</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s15.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="s15.1"> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-16.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-16.xht index 509b6e3191a..b6de913108b 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-16.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-16.xht @@ -30,7 +30,10 @@ <tbody id="s16"> <tr><th colspan="4" scope="rowgroup"> <a href="#s16">+</a> - <a href="https://www.w3.org/TR/CSS21/text.html">16 Text</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/text.html#q16.0">16 Text</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s16.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="s16.1"> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-17.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-17.xht index 82c13a2fded..7badb6c74ee 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-17.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-17.xht @@ -30,7 +30,10 @@ <tbody id="s17"> <tr><th colspan="4" scope="rowgroup"> <a href="#s17">+</a> - <a href="https://www.w3.org/TR/CSS21/tables.html">17 Tables</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/tables.html#q17.0">17 Tables</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s17.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="s17.1"> @@ -137,6 +140,50 @@ </ul> </td> </tr> + <tr id="table-intro-example-001-17.1" class=""> + <td> + <a href="table-intro-example-001.xht">table-intro-example-001</a></td> + <td></td> + <td></td> + <td>Introduction to Tables (text-align, font-weight) + <ul class="assert"> + <li>'text-align' and 'font-weight' can be applied to table cells (example from spec section 17.1).</li> + </ul> + </td> + </tr> + <tr id="table-intro-example-002-17.1" class=""> + <td> + <a href="table-intro-example-002.xht">table-intro-example-002</a></td> + <td></td> + <td></td> + <td>Introduction to Tables (vertical-align) + <ul class="assert"> + <li>'vertical-align' can be set on table cells (example from section 17.1).</li> + </ul> + </td> + </tr> + <tr id="table-intro-example-003-17.1" class=""> + <td> + <a href="table-intro-example-003.xht">table-intro-example-003</a></td> + <td></td> + <td></td> + <td>Introduction to Tables (border-collapse, border) + <ul class="assert"> + <li>'border-collapse' and 'border' can be set on table elements (example from section 17.1).</li> + </ul> + </td> + </tr> + <tr id="table-intro-example-004-17.1" class=""> + <td> + <a href="table-intro-example-004.xht">table-intro-example-004</a></td> + <td></td> + <td></td> + <td>Introduction to Tables (caption-side) + <ul class="assert"> + <li>'caption-side' can be set on a table caption (example from section 17.1).</li> + </ul> + </td> + </tr> <tr id="table-organization-001-17.1" class=""> <td> <a href="table-organization-001.xht">table-organization-001</a></td> @@ -227,6 +274,17 @@ </ul> </td> </tr> + <tr id="basic-html-table-001-17.2" class=""> + <td> + <a href="basic-html-table-001.xht">basic-html-table-001</a></td> + <td></td> + <td></td> + <td>HTML table with every table element + <ul class="assert"> + <li>HTML table elements are supported.</li> + </ul> + </td> + </tr> <tr id="before-content-display-012-17.2" class=""> <td> <a href="before-content-display-012.xht">before-content-display-012</a></td> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-18.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-18.xht index 241fa40de4a..276fd0bcf3f 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-18.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-18.xht @@ -30,7 +30,10 @@ <tbody id="s18"> <tr><th colspan="4" scope="rowgroup"> <a href="#s18">+</a> - <a href="https://www.w3.org/TR/CSS21/ui.html">18 User interface</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/ui.html#q18.0">18 User interface</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s18.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="s18.1"> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-2.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-2.xht index 6e2541a4475..010b4a724bb 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-2.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-2.xht @@ -30,7 +30,10 @@ <tbody id="s2"> <tr><th colspan="4" scope="rowgroup"> <a href="#s2">+</a> - <a href="https://www.w3.org/TR/CSS21/intro.html">2 Introduction to CSS 2.1</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/intro.html#q2.0">2 Introduction to CSS 2.1</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s2.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="s2.1"> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-3.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-3.xht index f61a4865067..9ddd9cc2359 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-3.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-3.xht @@ -30,7 +30,10 @@ <tbody id="s3"> <tr><th colspan="4" scope="rowgroup"> <a href="#s3">+</a> - <a href="https://www.w3.org/TR/CSS21/conform.html">3 Conformance: Requirements and Recommendations</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/conform.html#q3.0">3 Conformance: Requirements and Recommendations</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s3.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="s3.1"> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-4.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-4.xht index 7d04993d7ca..0086ecf94f5 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-4.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-4.xht @@ -13,7 +13,7 @@ <body> <h1>CSS 2.1 Conformance Test Suite</h1> - <h2>Syntax and basic data types (439 tests)</h2> + <h2>Syntax and basic data types (431 tests)</h2> <table width="100%"> <col id="test-column"></col> <col id="refs-column"></col> @@ -30,96 +30,11 @@ <tbody id="s4"> <tr><th colspan="4" scope="rowgroup"> <a href="#s4">+</a> - <a href="https://www.w3.org/TR/CSS21/syndata.html">4 Syntax and basic data types</a></th></tr> - <!-- 8 tests --> - <tr id="counters-001-4" class=""> - <td> - <a href="counters-001.xht">counters-001</a></td> - <td><a href="reference/counters-001-ref.xht">=</a> </td> - <td></td> - <td>Parsing counter functions with just the identifier - <ul class="assert"> - <li>Counters can be referred to using only the identifier.</li> - </ul> - </td> - </tr> - <tr id="counters-002-4" class="invalid"> - <td> - <a href="counters-002.xht">counters-002</a></td> - <td><a href="reference/no-red-filler-text-ref.xht">=</a> </td> - <td><abbr class="invalid" title="Tests invalid CSS">Invalid</abbr></td> - <td>Parsing invalid counter functions - Too many arguments - <ul class="assert"> - <li>A counter is invalid if it has too many arguments.</li> - </ul> - </td> - </tr> - <tr id="ident-014-4" class=""> - <td> - <a href="ident-014.xht">ident-014</a></td> - <td><a href="reference/filler-text-below-green.xht">=</a> </td> - <td></td> - <td>Selector attributes and hyphens - <ul class="assert"> - <li>Attribute selectors can begin with hyphens.</li> - </ul> - </td> - </tr> - <tr id="ident-015-4" class=""> - <td> - <a href="ident-015.xht">ident-015</a></td> - <td><a href="reference/filler-text-below-green.xht">=</a> </td> - <td></td> - <td>Attribute selectors and underscores - <ul class="assert"> - <li>Attribute selectors can begin with underscores.</li> - </ul> - </td> - </tr> - <tr id="ident-016-4" class=""> - <td> - <a href="ident-016.xht">ident-016</a></td> - <td><a href="reference/filler-text-below-green.xht">=</a> </td> - <td></td> - <td>Attribute selectors with hyphens and underscores - <ul class="assert"> - <li>Attribute selectors are valid if they begin with hyphens and then underscores.</li> - </ul> - </td> - </tr> - <tr id="ident-017-4" class="invalid"> - <td> - <a href="ident-017.xht">ident-017</a></td> - <td><a href="reference/no-red-filler-text-ref.xht">=</a> </td> - <td><abbr class="invalid" title="Tests invalid CSS">Invalid</abbr></td> - <td>Attribute selection with digits - <ul class="assert"> - <li>Attribute selectors cannot begin with digits.</li> - </ul> - </td> - </tr> - <tr id="ident-018-4" class="invalid"> - <td> - <a href="ident-018.xht">ident-018</a></td> - <td><a href="reference/no-red-filler-text-ref.xht">=</a> </td> - <td><abbr class="invalid" title="Tests invalid CSS">Invalid</abbr></td> - <td>Attribute selectors starting with hyphens and digits - <ul class="assert"> - <li>Attribute selectors cannot begin with hyphens then digits.</li> - </ul> - </td> - </tr> - <tr id="ident-019-4" class=""> - <td> - <a href="ident-019.xht">ident-019</a></td> - <td><a href="reference/filler-text-below-green.xht">=</a> </td> - <td></td> - <td>Attribute selectors starting with underscore and digits - <ul class="assert"> - <li>Attribute selectors can begin with underscore then digits.</li> - </ul> - </td> - </tr> + <a href="https://www.w3.org/TR/CSS21/syndata.html#q4.0">4 Syntax and basic data types</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s4.#annoying-warning"> + <!-- 0 tests --> </tbody> <tbody id="s4.1"> <tr><th colspan="4" scope="rowgroup"> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-5.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-5.xht index e913af114ae..bfe1618ad1c 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-5.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-5.xht @@ -13,7 +13,7 @@ <body> <h1>CSS 2.1 Conformance Test Suite</h1> - <h2>Selectors (677 tests)</h2> + <h2>Selectors (668 tests)</h2> <table width="100%"> <col id="test-column"></col> <col id="refs-column"></col> @@ -30,80 +30,11 @@ <tbody id="s5"> <tr><th colspan="4" scope="rowgroup"> <a href="#s5">+</a> - <a href="https://www.w3.org/TR/CSS21/selector.html">5 Selectors</a></th></tr> - <!-- 9 tests --> - <tr id="cascade-import-dynamic-001-5" class=""> - <td> - <a href="cascade-import-dynamic-001.xht">cascade-import-dynamic-001</a></td> - <td><a href="reference/ref-this-text-should-be-green.xht">=</a> </td> - <td></td> - <td>Dynamic sheet append (<style>) - </td> - </tr> - <tr id="cascade-import-dynamic-002-5" class=""> - <td> - <a href="cascade-import-dynamic-002.xht">cascade-import-dynamic-002</a></td> - <td><a href="reference/ref-this-text-should-be-green.xht">=</a> </td> - <td></td> - <td>Dynamic sheet append (<link>) - </td> - </tr> - <tr id="cascade-import-dynamic-003-5" class=""> - <td> - <a href="cascade-import-dynamic-003.xht">cascade-import-dynamic-003</a></td> - <td><a href="reference/ref-this-text-should-be-green.xht">=</a> </td> - <td></td> - <td>Dynamic sheet insertion (<style>) - </td> - </tr> - <tr id="cascade-import-dynamic-004-5" class=""> - <td> - <a href="cascade-import-dynamic-004.xht">cascade-import-dynamic-004</a></td> - <td><a href="reference/ref-this-text-should-be-green.xht">=</a> </td> - <td></td> - <td>Dynamic sheet insertion (<link>) - </td> - </tr> - <tr id="cascade-import-dynamic-005-5" class=""> - <td> - <a href="cascade-import-dynamic-005.xht">cascade-import-dynamic-005</a></td> - <td><a href="reference/ref-this-text-should-be-green.xht">=</a> </td> - <td></td> - <td>Dynamic sheet deletion (<style>) - </td> - </tr> - <tr id="cascade-import-dynamic-006-5" class=""> - <td> - <a href="cascade-import-dynamic-006.xht">cascade-import-dynamic-006</a></td> - <td><a href="reference/ref-this-text-should-be-green.xht">=</a> </td> - <td></td> - <td>Dynamic sheet deletion (<link>) - </td> - </tr> - <tr id="cascade-import-dynamic-control-5" class=""> - <td> - <a href="cascade-import-dynamic-control.xht">cascade-import-dynamic-control</a></td> - <td><a href="reference/ref-this-text-should-be-green.xht">=</a> </td> - <td></td> - <td>Control test - </td> - </tr> - <tr id="html-precedence-004-5" class="userstyle"> - <td> - <a href="html-precedence-004.xht">html-precedence-004</a></td> - <td><a href="reference/html-precedence-004-ref.xht">=</a> </td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>User Stylesheets and non-CSS Presentational Hints - </td> - </tr> - <tr id="html-precedence-005-5" class="userstyle"> - <td> - <a href="html-precedence-005.xht">html-precedence-005</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>User Stylesheets and non-CSS Presentational Hints - </td> - </tr> + <a href="https://www.w3.org/TR/CSS21/selector.html#q5.0">5 Selectors</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s5.#annoying-warning"> + <!-- 0 tests --> </tbody> <tbody id="s5.1"> <tr><th colspan="4" scope="rowgroup"> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-6.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-6.xht index 12519429186..5009f4aa553 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-6.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-6.xht @@ -13,7 +13,7 @@ <body> <h1>CSS 2.1 Conformance Test Suite</h1> - <h2>Assigning property values, Cascading, and Inheritance (145 tests)</h2> + <h2>Assigning property values, Cascading, and Inheritance (117 tests)</h2> <table width="100%"> <col id="test-column"></col> <col id="refs-column"></col> @@ -30,316 +30,11 @@ <tbody id="s6"> <tr><th colspan="4" scope="rowgroup"> <a href="#s6">+</a> - <a href="https://www.w3.org/TR/CSS21/cascade.html">6 Assigning property values, Cascading, and Inheritance</a></th></tr> - <!-- 28 tests --> - <tr id="at-import-001-6" class=""> - <td> - <a href="at-import-001.xht">at-import-001</a></td> - <td></td> - <td></td> - <td>@import not as the first declaration - <ul class="assert"> - <li>An @import is ignored if it is not the first statement in a style block.</li> - </ul> - </td> - </tr> - <tr id="at-import-002-6" class=""> - <td> - <a href="at-import-002.xht">at-import-002</a></td> - <td><a href="reference/filler-text-below-green.xht">=</a> </td> - <td></td> - <td>Importing external stylesheets with @import - <ul class="assert"> - <li>An @import used to import external stylesheets.</li> - </ul> - </td> - </tr> - <tr id="at-import-003-6" class=""> - <td> - <a href="at-import-003.xht">at-import-003</a></td> - <td><a href="reference/filler-text-below-green.xht">=</a> </td> - <td></td> - <td>Importing styles using @import with a string - <ul class="assert"> - <li>An @import used with just a string is interpreted as if it had url(...) around it.</li> - </ul> - </td> - </tr> - <tr id="at-import-004-6" class=""> - <td> - <a href="at-import-004.xht">at-import-004</a></td> - <td><a href="reference/no-red-filler-text-ref.xht">=</a> </td> - <td></td> - <td>Media dependency on @import set to 'print' - <ul class="assert"> - <li>Specifying a media-dependency of print does not apply rules to the user agent display.</li> - </ul> - </td> - </tr> - <tr id="at-import-005-6" class=""> - <td> - <a href="at-import-005.xht">at-import-005</a></td> - <td><a href="reference/filler-text-below-green.xht">=</a> </td> - <td></td> - <td>Media dependency on @import set to 'all' - <ul class="assert"> - <li>Specifying the media-dependency of 'all' applies to all media types including user agent display.</li> - </ul> - </td> - </tr> - <tr id="at-import-006-6" class=""> - <td> - <a href="at-import-006.xht">at-import-006</a></td> - <td><a href="reference/filler-text-below-green.xht">=</a> </td> - <td></td> - <td>Media dependency on @import set to 'screen' - <ul class="assert"> - <li>Specifying the media-dependent import rules to 'screen' applies to user agent display.</li> - </ul> - </td> - </tr> - <tr id="at-import-007-6" class=""> - <td> - <a href="at-import-007.xht">at-import-007</a></td> - <td><a href="reference/filler-text-below-green.xht">=</a> </td> - <td></td> - <td>@import with @charset - <ul class="assert"> - <li>An @import is valid after @charset.</li> - </ul> - </td> - </tr> - <tr id="html-precedence-002-6" class=""> - <td> - <a href="html-precedence-002.xht">html-precedence-002</a></td> - <td></td> - <td></td> - <td>Universal selector precedence - <ul class="assert"> - <li>The universal selector and the 'color' attribute have the same specificity. The universal selector is applied since CSS takes precedence.</li> - </ul> - </td> - </tr> - <tr id="html-precedence-003-6" class="userstyle"> - <td> - <a href="html-precedence-003.xht">html-precedence-003</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>User style sheet precedence - <ul class="assert"> - <li>The 'font' element's 'color' attribute trumps the user stylesheet's universal selector. They have the same specificity but the font element is a virtual author rule.</li> - </ul> - </td> - </tr> - <tr id="inherited-value-002-6" class="ahem"> - <td> - <a href="inherited-value-002.xht">inherited-value-002</a></td> - <td></td> - <td><abbr class="ahem" title="Requires Ahem font">Ahem</abbr></td> - <td>Inheriting computed values - <ul class="assert"> - <li>The computed value of a font-size with a percentage is the percentage of its parent's font-size value. A nested element which also has a percentage applies the parents' specified value (which is inherited).</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-001-6" class="userstyle"> - <td> - <a href="user-stylesheet-001.xht">user-stylesheet-001</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>User defined stylesheet can be applied - <ul class="assert"> - <li>User stylesheet can be applied to the page.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-002-6" class="interact userstyle"> - <td> - <a href="user-stylesheet-002.xht">user-stylesheet-002</a></td> - <td></td> - <td><abbr class="interact" title="Requires user interaction">Interact</abbr><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>User defined stylesheet can be applied and persisted - <ul class="assert"> - <li>The user stylesheet is still applied after close and reopen the user agent window.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-003-6" class="userstyle"> - <td> - <a href="user-stylesheet-003.xht">user-stylesheet-003</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Rules with normal declarations in an user defined stylesheet can be overriden by rules with normal declarations from author in a style block - <ul class="assert"> - <li>A CSS rule (with normal - not !important - declarations) in an author style sheet have more weight than a CSS rule (with normal - not !important -declarations) in an user style sheet.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-004-6" class="userstyle"> - <td> - <a href="user-stylesheet-004.xht">user-stylesheet-004</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Rules with normal declarations in an user defined stylesheet can be overriden by normal declarations from author in an inline style attribute - <ul class="assert"> - <li>A normal - not !important - declaration in an inline style from author have more weight than a CSS rule (with normal - not !important -) declarations in an user style sheet.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-005-6" class="userstyle"> - <td> - <a href="user-stylesheet-005.xht">user-stylesheet-005</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Descendant selector defined in user stylesheet can be applied - <ul class="assert"> - <li>The descendant selector defined in user stylesheet is applied to the appropriate element.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-006-6" class="userstyle"> - <td> - <a href="user-stylesheet-006.xht">user-stylesheet-006</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Child selector defined in user stylesheet can be applied - <ul class="assert"> - <li>The child selector defined in user stylesheet is applied to the appropriate element.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-007-6" class="userstyle"> - <td> - <a href="user-stylesheet-007.xht">user-stylesheet-007</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Adjacent sibling selector defined in user stylesheet can be applied - <ul class="assert"> - <li>The adjacent sibling selector defined in user stylesheet is applied to the appropriate element.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-008-6" class="userstyle"> - <td> - <a href="user-stylesheet-008.xht">user-stylesheet-008</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Attribute selector defined in user stylesheet can be applied - <ul class="assert"> - <li>The attribute selector defined in user stylesheet is applied to the appropriate element.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-009-6" class="userstyle"> - <td> - <a href="user-stylesheet-009.xht">user-stylesheet-009</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>ID selector defined in user stylesheet can be applied - <ul class="assert"> - <li>The ID selector defined in user stylesheet is applied to the appropriate element.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-010-6" class="userstyle"> - <td> - <a href="user-stylesheet-010.xht">user-stylesheet-010</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Pseudo-class selector :first-child defined in user stylesheet can be applied - <ul class="assert"> - <li>The pseudo-class selector :first-child defined in user stylesheet is applied to the first child of an element.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-011-6" class="userstyle"> - <td> - <a href="user-stylesheet-011.xht">user-stylesheet-011</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Pseudo-element first-line selector defined in user stylesheet can be applied - <ul class="assert"> - <li>The pseudo-element selector :first-line defined in user stylesheet is applied to the first line of an element.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-012-6" class="history userstyle"> - <td> - <a href="user-stylesheet-012.xht">user-stylesheet-012</a></td> - <td></td> - <td><abbr class="history" title="Requires session history">History</abbr><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Link defined in user stylesheet can be applied - <ul class="assert"> - <li>The pseudo-class selector :link defined in user stylesheet is applied to all links.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-013-6" class="interact userstyle"> - <td> - <a href="user-stylesheet-013.xht">user-stylesheet-013</a></td> - <td></td> - <td><abbr class="interact" title="Requires user interaction">Interact</abbr><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Visited selector defined in user stylesheet can be applied - <ul class="assert"> - <li>The pseudo-class selector :visited defined in user stylesheet is applied when a link has already been visited.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-014-6" class="interact userstyle"> - <td> - <a href="user-stylesheet-014.xht">user-stylesheet-014</a></td> - <td></td> - <td><abbr class="interact" title="Requires user interaction">Interact</abbr><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Hover defined in user stylesheet can be applied - <ul class="assert"> - <li>The pseudo-class selector :hover defined in user stylesheet is applied when the mouse is above an element.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-015-6" class="interact userstyle"> - <td> - <a href="user-stylesheet-015.xht">user-stylesheet-015</a></td> - <td></td> - <td><abbr class="interact" title="Requires user interaction">Interact</abbr><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Pseudo-class :active defined in user stylesheet can be applied - <ul class="assert"> - <li>The pseudo-class selector :active defined in user stylesheet is implemented.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-016-6" class="userstyle"> - <td> - <a href="user-stylesheet-016.xht">user-stylesheet-016</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Pseudo-element first-letter selector defined in user stylesheet can be applied - <ul class="assert"> - <li>The pseudo-element selector :first-letter defined in user stylesheet is applied to the first letter of an element.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-017-6" class="userstyle"> - <td> - <a href="user-stylesheet-017.xht">user-stylesheet-017</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Pseudo-element before selector defined in user stylesheet can be applied - <ul class="assert"> - <li>The pseudo-element selector :before defined in user stylesheet is inserted before an element.</li> - </ul> - </td> - </tr> - <tr id="user-stylesheet-018-6" class="userstyle"> - <td> - <a href="user-stylesheet-018.xht">user-stylesheet-018</a></td> - <td></td> - <td><abbr class="userstyle" title="Requires user style sheet or other special setting">User Style</abbr></td> - <td>Pseudo-element after selector defined in user stylesheet can be applied - <ul class="assert"> - <li>The pseudo-element selector :after defined in user stylesheet is inserted after an element.</li> - </ul> - </td> - </tr> + <a href="https://www.w3.org/TR/CSS21/cascade.html#q6.0">6 Assigning property values, Cascading, and Inheritance</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s6.#annoying-warning"> + <!-- 0 tests --> </tbody> <tbody id="s6.1"> <tr><th colspan="4" scope="rowgroup"> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-7.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-7.xht index 7dfe0c642f1..f991904e8aa 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-7.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-7.xht @@ -13,7 +13,7 @@ <body> <h1>CSS 2.1 Conformance Test Suite</h1> - <h2>Media types (22 tests)</h2> + <h2>Media types (5 tests)</h2> <table width="100%"> <col id="test-column"></col> <col id="refs-column"></col> @@ -30,195 +30,11 @@ <tbody id="s7"> <tr><th colspan="4" scope="rowgroup"> <a href="#s7">+</a> - <a href="https://www.w3.org/TR/CSS21/media.html">7 Media types</a></th></tr> - <!-- 17 tests --> - <tr id="media-dependency-001-7" class=""> - <td> - <a href="media-dependency-001.xht">media-dependency-001</a></td> - <td><a href="reference/filler-text-below-green.xht">=</a> </td> - <td></td> - <td>@media and target mediums - <ul class="assert"> - <li>@media with a target medium applies styles on that target medium (screen).</li> - </ul> - </td> - </tr> - <tr id="media-dependency-002-7" class=""> - <td> - <a href="media-dependency-002.xht">media-dependency-002</a></td> - <td><a href="reference/filler-text-below-green.xht">=</a> </td> - <td></td> - <td>@import and target mediums - <ul class="assert"> - <li>@media with a target medium applies styles on that target medium (screen).</li> - </ul> - </td> - </tr> - <tr id="media-dependency-003-7" class=""> - <td> - <a href="media-dependency-003.xht">media-dependency-003</a></td> - <td><a href="reference/filler-text-below-green.xht">=</a> </td> - <td></td> - <td>Link tags and target mediums - <ul class="assert"> - <li>Link with a target medium applies styles on that target medium (screen).</li> - </ul> - </td> - </tr> - <tr id="media-dependency-004-7" class=""> - <td> - <a href="media-dependency-004.xht">media-dependency-004</a></td> - <td><a href="reference/filler-text-below-green.xht">=</a> </td> - <td></td> - <td>Case-insensitive media types - <ul class="assert"> - <li>Media types are case-insensitive.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-005-7" class="invalid"> - <td> - <a href="media-dependency-005.xht">media-dependency-005</a></td> - <td><a href="reference/filler-text-below-green.xht">=</a> </td> - <td><abbr class="invalid" title="Tests invalid CSS">Invalid</abbr></td> - <td>Ignoring bad media types with @import - <ul class="assert"> - <li>User agent ignores media types it does not understand with @import.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-006-7" class="invalid"> - <td> - <a href="media-dependency-006.xht">media-dependency-006</a></td> - <td><a href="reference/filler-text-below-green.xht">=</a> </td> - <td><abbr class="invalid" title="Tests invalid CSS">Invalid</abbr></td> - <td>Ignoring bad media types with @media - <ul class="assert"> - <li>User agent ignores media types it does not understand with @media.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-007-7" class=""> - <td> - <a href="media-dependency-007.xht">media-dependency-007</a></td> - <td><a href="reference/no-red-filler-text-ref.xht">=</a> </td> - <td></td> - <td>Non-matching target mediums - <ul class="assert"> - <li>The @media block does not apply because it does not match the target medium.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-008-7" class=""> - <td> - <a href="media-dependency-008.xht">media-dependency-008</a></td> - <td><a href="reference/no-red-filler-text-ref.xht">=</a> </td> - <td></td> - <td>Non-matching target mediums and @import - <ul class="assert"> - <li>The @import command does not apply because it does not match the target medium.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-009-7" class=""> - <td> - <a href="media-dependency-009.xht">media-dependency-009</a></td> - <td><a href="reference/filler-text-below-green.xht">=</a> </td> - <td></td> - <td>Matching the 'All' target medium - <ul class="assert"> - <li>The 'all' media type applies to the screen medium.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-010-7" class=""> - <td> - <a href="media-dependency-010.xht">media-dependency-010</a></td> - <td><a href="reference/no-red-filler-text-ref.xht">=</a> </td> - <td></td> - <td>Non-matching target mediums (braille) - <ul class="assert"> - <li>The 'braille' media type does not apply to the screen medium.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-011-7" class=""> - <td> - <a href="media-dependency-011.xht">media-dependency-011</a></td> - <td><a href="reference/no-red-filler-text-ref.xht">=</a> </td> - <td></td> - <td>Non-matching target mediums (embossed) - <ul class="assert"> - <li>The 'embossed' media type does not apply to the screen medium.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-012-7" class=""> - <td> - <a href="media-dependency-012.xht">media-dependency-012</a></td> - <td><a href="reference/no-red-filler-text-ref.xht">=</a> </td> - <td></td> - <td>Non-matching target mediums (handheld) - <ul class="assert"> - <li>The 'handheld' media type does not apply to the screen medium.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-013-7" class=""> - <td> - <a href="media-dependency-013.xht">media-dependency-013</a></td> - <td><a href="reference/no-red-filler-text-ref.xht">=</a> </td> - <td></td> - <td>Non-matching target mediums (projection) - <ul class="assert"> - <li>The 'projection' media type does not apply to the screen medium.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-014-7" class=""> - <td> - <a href="media-dependency-014.xht">media-dependency-014</a></td> - <td><a href="reference/no-red-filler-text-ref.xht">=</a> </td> - <td></td> - <td>Non-matching target mediums (speech) - <ul class="assert"> - <li>The 'speech' media type does not apply to the screen medium.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-015-7" class=""> - <td> - <a href="media-dependency-015.xht">media-dependency-015</a></td> - <td><a href="reference/no-red-filler-text-ref.xht">=</a> </td> - <td></td> - <td>Non-matching target mediums (tty) - <ul class="assert"> - <li>The 'tty' media type does not apply to the screen medium.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-016-7" class=""> - <td> - <a href="media-dependency-016.xht">media-dependency-016</a></td> - <td><a href="reference/no-red-filler-text-ref.xht">=</a> </td> - <td></td> - <td>Non-matching target mediums (tv) - <ul class="assert"> - <li>The 'tv' media type does not apply to the screen medium.</li> - </ul> - </td> - </tr> - <tr id="media-dependency-017-7" class=""> - <td> - <a href="media-dependency-017.xht">media-dependency-017</a></td> - <td><a href="reference/filler-text-below-green.xht">=</a> </td> - <td></td> - <td>Multiple target mediums - <ul class="assert"> - <li>An '@media' rule specifies the target media types separated by commas.</li> - </ul> - </td> - </tr> + <a href="https://www.w3.org/TR/CSS21/media.html#q7.0">7 Media types</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s7.#annoying-warning"> + <!-- 0 tests --> </tbody> <tbody id="s7.1"> <tr><th colspan="4" scope="rowgroup"> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-8.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-8.xht index 471ccaaf28f..70e7346fb13 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-8.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-8.xht @@ -33,6 +33,9 @@ <a href="https://www.w3.org/TR/CSS21/box.html#box-model">8 Box model</a></th></tr> <!-- 0 tests --> </tbody> + <tbody id="s8.#annoying-warning"> + <!-- 0 tests --> + </tbody> <tbody id="s8.1"> <tr><th colspan="4" scope="rowgroup"> <a href="#s8.1">+</a> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-9.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-9.xht index f957c82ac6b..e65591f3fc4 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-9.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-9.xht @@ -13,7 +13,7 @@ <body> <h1>CSS 2.1 Conformance Test Suite</h1> - <h2>Visual formatting model (1247 tests)</h2> + <h2>Visual formatting model (1246 tests)</h2> <table width="100%"> <col id="test-column"></col> <col id="refs-column"></col> @@ -30,16 +30,11 @@ <tbody id="s9"> <tr><th colspan="4" scope="rowgroup"> <a href="#s9">+</a> - <a href="https://www.w3.org/TR/CSS21/visuren.html">9 Visual formatting model</a></th></tr> - <!-- 1 tests --> - <tr id="c5526c-display-000-9" class=""> - <td> - <a href="c5526c-display-000.xht">c5526c-display-000</a></td> - <td></td> - <td></td> - <td>display/box/float/clear test - </td> - </tr> + <a href="https://www.w3.org/TR/CSS21/visuren.html#q9.0">9 Visual formatting model</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="s9.#annoying-warning"> + <!-- 0 tests --> </tbody> <tbody id="s9.1"> <tr><th colspan="4" scope="rowgroup"> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-A.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-A.xht index 918efb8b096..311d98c1bb4 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-A.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-A.xht @@ -30,7 +30,10 @@ <tbody id="sA"> <tr><th colspan="4" scope="rowgroup"> <a href="#sA">+</a> - <a href="https://www.w3.org/TR/CSS21/aural.html">A Aural style sheets</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/aural.html#q19.0">A Aural style sheets</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="sA.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="sA.1"> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-B.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-B.xht index 5bc259221d9..fad1b00c46a 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-B.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-B.xht @@ -30,7 +30,10 @@ <tbody id="sB"> <tr><th colspan="4" scope="rowgroup"> <a href="#sB">+</a> - <a href="https://www.w3.org/TR/CSS21/refs.html">B Bibliography</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/refs.html#q20.0">B Bibliography</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="sB.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="sB.1"> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-C.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-C.xht index da760a656d5..525f0f97da3 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-C.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-C.xht @@ -13,7 +13,7 @@ <body> <h1>CSS 2.1 Conformance Test Suite</h1> - <h2>Changes (5 tests)</h2> + <h2>Changes (0 tests)</h2> <table width="100%"> <col id="test-column"></col> <col id="refs-column"></col> @@ -30,7 +30,10 @@ <tbody id="sC"> <tr><th colspan="4" scope="rowgroup"> <a href="#sC">+</a> - <a href="https://www.w3.org/TR/CSS21/changes.html">C Changes</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/changes.html#q21.0">C Changes</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="sC.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="sC.1"> @@ -45,7 +48,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#a4.3.6">C.1.1 Section 4.3.6 Colors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.1.1.#q2"> + <tbody id="sC.1.1.#q21.2"> <!-- 0 tests --> </tbody> <tbody id="sC.1.2"> @@ -54,7 +57,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#a9.2.4">C.1.2 Section 9.2.4 The 'display' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.1.2.#q3"> + <tbody id="sC.1.2.#q21.3"> <!-- 0 tests --> </tbody> <tbody id="sC.1.3"> @@ -63,7 +66,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#a12.2">C.1.3 Section 12.2 The 'content' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.1.3.#q4"> + <tbody id="sC.1.3.#q21.4"> <!-- 0 tests --> </tbody> <tbody id="sC.1.4"> @@ -72,7 +75,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#a16.6">C.1.4 Section 16.6 White space: the 'white-space' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.1.4.#q5"> + <tbody id="sC.1.4.#q21.5"> <!-- 0 tests --> </tbody> <tbody id="sC.1.5"> @@ -81,7 +84,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#a18.1">C.1.5 Section 18.1 Cursors: the 'cursor' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.1.5.#q6"> + <tbody id="sC.1.5.#q21.6"> <!-- 0 tests --> </tbody> <tbody id="sC.2"> @@ -96,7 +99,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c1.1">C.2.1 Section 1.1 CSS 2.1 vs CSS 2</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.1.#q8"> + <tbody id="sC.2.1.#q21.8"> <!-- 0 tests --> </tbody> <tbody id="sC.2.2"> @@ -105,7 +108,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c1.2">C.2.2 Section 1.2 Reading the specification</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.2.#q9"> + <tbody id="sC.2.2.#q21.9"> <!-- 0 tests --> </tbody> <tbody id="sC.2.3"> @@ -114,7 +117,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c1.3">C.2.3 Section 1.3 How the specification is organized</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.3.#q10"> + <tbody id="sC.2.3.#q21.10"> <!-- 0 tests --> </tbody> <tbody id="sC.2.4"> @@ -123,7 +126,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c1.4.2.1">C.2.4 Section 1.4.2.1 Value</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.4.#q11"> + <tbody id="sC.2.4.#q21.11"> <!-- 0 tests --> </tbody> <tbody id="sC.2.5"> @@ -132,7 +135,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c1.4.2.6">C.2.5 Section 1.4.2.6 Media groups</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.5.#q12"> + <tbody id="sC.2.5.#q21.12"> <!-- 0 tests --> </tbody> <tbody id="sC.2.6"> @@ -141,7 +144,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c1.4.2.7">C.2.6 Section 1.4.2.7 Computed value</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.6.#q13"> + <tbody id="sC.2.6.#q21.13"> <!-- 0 tests --> </tbody> <tbody id="sC.2.7"> @@ -150,7 +153,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c1.4.4">C.2.7 Section 1.4.4 Notes and examples</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.7.#q14"> + <tbody id="sC.2.7.#q21.14"> <!-- 0 tests --> </tbody> <tbody id="sC.2.8"> @@ -159,7 +162,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c1.5">C.2.8 Section 1.5 Acknowledgments</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.8.#q15"> + <tbody id="sC.2.8.#q21.15"> <!-- 0 tests --> </tbody> <tbody id="sC.2.9"> @@ -168,7 +171,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c3.2">C.2.9 Section 3.2 Conformance</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.9.#q16"> + <tbody id="sC.2.9.#q21.16"> <!-- 0 tests --> </tbody> <tbody id="sC.2.10"> @@ -177,7 +180,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c3.3">C.2.10 Section 3.3 Error Conditions</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.10.#q17"> + <tbody id="sC.2.10.#q21.17"> <!-- 0 tests --> </tbody> <tbody id="sC.2.11"> @@ -186,7 +189,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c4.1.1">C.2.11 Section 4.1.1 Tokenization</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.11.#q18"> + <tbody id="sC.2.11.#q21.18"> <!-- 0 tests --> </tbody> <tbody id="sC.2.11.#underscore"> @@ -198,7 +201,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c4.1.3">C.2.12 Section 4.1.3 Characters and case</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.12.#q19"> + <tbody id="sC.2.12.#q21.19"> <!-- 0 tests --> </tbody> <tbody id="sC.2.13"> @@ -207,7 +210,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c4.2">C.2.13 Section 4.2 Rules for handling parsing errors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.13.#q20"> + <tbody id="sC.2.13.#q21.20"> <!-- 0 tests --> </tbody> <tbody id="sC.2.14"> @@ -216,7 +219,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c4.3">C.2.14 Section 4.3 Values</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.14.#q21"> + <tbody id="sC.2.14.#q21.21"> <!-- 0 tests --> </tbody> <tbody id="sC.2.15"> @@ -225,7 +228,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c4.3.2">C.2.15 Section 4.3.2 Lengths</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.15.#q22"> + <tbody id="sC.2.15.#q21.22"> <!-- 0 tests --> </tbody> <tbody id="sC.2.16"> @@ -234,7 +237,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c4.3.4">C.2.16 Section 4.3.4 URLs and URIs</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.16.#q23"> + <tbody id="sC.2.16.#q21.23"> <!-- 0 tests --> </tbody> <tbody id="sC.2.17"> @@ -243,7 +246,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c4.3.5">C.2.17 Section 4.3.5 Counters</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.17.#q24"> + <tbody id="sC.2.17.#q21.24"> <!-- 0 tests --> </tbody> <tbody id="sC.2.18"> @@ -252,7 +255,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c4.3.6">C.2.18 Section 4.3.6 Colors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.18.#q25"> + <tbody id="sC.2.18.#q21.25"> <!-- 0 tests --> </tbody> <tbody id="sC.2.19"> @@ -261,7 +264,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c4.3.8">C.2.19 Section 4.3.8 Unsupported Values</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.19.#q26"> + <tbody id="sC.2.19.#q21.26"> <!-- 0 tests --> </tbody> <tbody id="sC.2.20"> @@ -270,7 +273,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c4.4">C.2.20 Section 4.4 CSS style sheet representation</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.20.#q27"> + <tbody id="sC.2.20.#q21.27"> <!-- 0 tests --> </tbody> <tbody id="sC.2.21"> @@ -279,7 +282,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c5.8.1">C.2.21 Section 5.8.1 Matching attributes and attribute values</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.21.#q28"> + <tbody id="sC.2.21.#q21.28"> <!-- 0 tests --> </tbody> <tbody id="sC.2.22"> @@ -288,7 +291,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c5.8.3">C.2.22 Section 5.8.3 Class selectors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.22.#q29"> + <tbody id="sC.2.22.#q21.29"> <!-- 0 tests --> </tbody> <tbody id="sC.2.23"> @@ -297,7 +300,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c5.9">C.2.23 Section 5.9 ID selectors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.23.#q30"> + <tbody id="sC.2.23.#q21.30"> <!-- 0 tests --> </tbody> <tbody id="sC.2.24"> @@ -306,7 +309,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c5.10">C.2.24 Section 5.10 Pseudo-elements and pseudo-classes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.24.#q31"> + <tbody id="sC.2.24.#q21.31"> <!-- 0 tests --> </tbody> <tbody id="sC.2.25"> @@ -315,7 +318,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c5.11.2">C.2.25 Section 5.11.2 The link pseudo-classes: :link and :visited</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.25.#q32"> + <tbody id="sC.2.25.#q21.32"> <!-- 0 tests --> </tbody> <tbody id="sC.2.26"> @@ -324,7 +327,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c5.11.4">C.2.26 Section 5.11.4 The language pseudo-class: :lang</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.26.#q33"> + <tbody id="sC.2.26.#q21.33"> <!-- 0 tests --> </tbody> <tbody id="sC.2.27"> @@ -333,7 +336,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c5.12.1">C.2.27 Section 5.12.1 The :first-line pseudo-element</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.27.#q34"> + <tbody id="sC.2.27.#q21.34"> <!-- 0 tests --> </tbody> <tbody id="sC.2.28"> @@ -342,7 +345,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c5.12.2">C.2.28 Section 5.12.2 The :first-letter pseudo-element</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.28.#q35"> + <tbody id="sC.2.28.#q21.35"> <!-- 0 tests --> </tbody> <tbody id="sC.2.29"> @@ -351,7 +354,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c6.1">C.2.29 Section 6.1 Specified, computed, and actual values</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.29.#q36"> + <tbody id="sC.2.29.#q21.36"> <!-- 0 tests --> </tbody> <tbody id="sC.2.30"> @@ -360,7 +363,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c6.4.1">C.2.30 Section 6.4.1 Cascading order</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.30.#q37"> + <tbody id="sC.2.30.#q21.37"> <!-- 0 tests --> </tbody> <tbody id="sC.2.31"> @@ -369,7 +372,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c6.4.3">C.2.31 Section 6.4.3 Calculating a selector's specificity</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.31.#q38"> + <tbody id="sC.2.31.#q21.38"> <!-- 0 tests --> </tbody> <tbody id="sC.2.32"> @@ -378,7 +381,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c6.4.4">C.2.32 Section 6.4.4 Precedence of non-CSS presentational hints</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.32.#q39"> + <tbody id="sC.2.32.#q21.39"> <!-- 0 tests --> </tbody> <tbody id="sC.2.33"> @@ -387,7 +390,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c7.3">C.2.33 Section 7.3 Recognized Media Types</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.33.#q40"> + <tbody id="sC.2.33.#q21.40"> <!-- 0 tests --> </tbody> <tbody id="sC.2.34"> @@ -396,7 +399,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c7.3.1">C.2.34 Section 7.3.1 Media Groups</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.34.#q41"> + <tbody id="sC.2.34.#q21.41"> <!-- 0 tests --> </tbody> <tbody id="sC.2.35"> @@ -405,7 +408,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c8.3">C.2.35 Section 8.3 Margin properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.35.#q42"> + <tbody id="sC.2.35.#q21.42"> <!-- 0 tests --> </tbody> <tbody id="sC.2.36"> @@ -414,7 +417,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c8.3.1">C.2.36 Section 8.3.1 Collapsing margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.36.#q43"> + <tbody id="sC.2.36.#q21.43"> <!-- 0 tests --> </tbody> <tbody id="sC.2.37"> @@ -423,7 +426,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c8.4">C.2.37 Section 8.4 Padding properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.37.#q44"> + <tbody id="sC.2.37.#q21.44"> <!-- 0 tests --> </tbody> <tbody id="sC.2.38"> @@ -432,7 +435,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c8.5.2">C.2.38 Section 8.5.2 Border color</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.38.#q45"> + <tbody id="sC.2.38.#q21.45"> <!-- 0 tests --> </tbody> <tbody id="sC.2.39"> @@ -441,7 +444,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c8.5.3">C.2.39 Section 8.5.3 Border style</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.39.#q46"> + <tbody id="sC.2.39.#q21.46"> <!-- 0 tests --> </tbody> <tbody id="sC.2.40"> @@ -450,7 +453,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c8.6">C.2.40 Section 8.6 The box model for inline elements in bidirectional context</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.40.#q47"> + <tbody id="sC.2.40.#q21.47"> <!-- 0 tests --> </tbody> <tbody id="sC.2.41"> @@ -459,7 +462,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.1.2">C.2.41 Section 9.1.2 Containing blocks</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.41.#q48"> + <tbody id="sC.2.41.#q21.48"> <!-- 0 tests --> </tbody> <tbody id="sC.2.42"> @@ -468,7 +471,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.2.1.1">C.2.42 Section 9.2.1.1 Anonymous block boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.42.#q49"> + <tbody id="sC.2.42.#q21.49"> <!-- 0 tests --> </tbody> <tbody id="sC.2.43"> @@ -477,7 +480,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.2.2.1">C.2.43 Section 9.2.2.1 Anonymous inline boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.43.#q50"> + <tbody id="sC.2.43.#q21.50"> <!-- 0 tests --> </tbody> <tbody id="sC.2.44"> @@ -486,7 +489,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.2.3">C.2.44 Section 9.2.3 Run-in boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.44.#q51"> + <tbody id="sC.2.44.#q21.51"> <!-- 0 tests --> </tbody> <tbody id="sC.2.45"> @@ -495,7 +498,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.2.4">C.2.45 Section 9.2.4 The 'display' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.45.#q52"> + <tbody id="sC.2.45.#q21.52"> <!-- 0 tests --> </tbody> <tbody id="sC.2.46"> @@ -504,7 +507,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.3.1">C.2.46 Section 9.3.1 Choosing a positioning scheme</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.46.#q53"> + <tbody id="sC.2.46.#q21.53"> <!-- 0 tests --> </tbody> <tbody id="sC.2.47"> @@ -513,7 +516,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.3.2">C.2.47 Section 9.3.2 Box offsets</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.47.#q54"> + <tbody id="sC.2.47.#q21.54"> <!-- 0 tests --> </tbody> <tbody id="sC.2.48"> @@ -522,7 +525,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.4.1">C.2.48 Section 9.4.1 Block formatting contexts</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.48.#q55"> + <tbody id="sC.2.48.#q21.55"> <!-- 0 tests --> </tbody> <tbody id="sC.2.49"> @@ -531,7 +534,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.4.2">C.2.49 Section 9.4.2 Inline formatting context</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.49.#q56"> + <tbody id="sC.2.49.#q21.56"> <!-- 0 tests --> </tbody> <tbody id="sC.2.50"> @@ -540,7 +543,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.4.3">C.2.50 Section 9.4.3 Relative positioning</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.50.#q57"> + <tbody id="sC.2.50.#q21.57"> <!-- 0 tests --> </tbody> <tbody id="sC.2.51"> @@ -549,7 +552,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.5">C.2.51 Section 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.51.#q58"> + <tbody id="sC.2.51.#q21.58"> <!-- 0 tests --> </tbody> <tbody id="sC.2.52"> @@ -558,7 +561,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.5.1">C.2.52 Section 9.5.1 Positioning the float</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.52.#q59"> + <tbody id="sC.2.52.#q21.59"> <!-- 0 tests --> </tbody> <tbody id="sC.2.53"> @@ -567,7 +570,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.5.2">C.2.53 Section 9.5.2 Controlling flow next to floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.53.#q60"> + <tbody id="sC.2.53.#q21.60"> <!-- 0 tests --> </tbody> <tbody id="sC.2.54"> @@ -576,7 +579,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.7">C.2.54 Section 9.7 Relationships between 'display', 'position', and 'float'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.54.#q61"> + <tbody id="sC.2.54.#q21.61"> <!-- 0 tests --> </tbody> <tbody id="sC.2.55"> @@ -585,7 +588,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.9">C.2.55 Section 9.9 Layered presentation</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.55.#q62"> + <tbody id="sC.2.55.#q21.62"> <!-- 0 tests --> </tbody> <tbody id="sC.2.56"> @@ -594,7 +597,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c9.10">C.2.56 Section 9.10 Text direction</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.56.#q63"> + <tbody id="sC.2.56.#q21.63"> <!-- 0 tests --> </tbody> <tbody id="sC.2.57"> @@ -603,7 +606,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10">C.2.57 Chapter 10 Visual formatting model details</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.57.#q64"> + <tbody id="sC.2.57.#q21.64"> <!-- 0 tests --> </tbody> <tbody id="sC.2.58"> @@ -615,7 +618,7 @@ <tbody id="sC.2.58.#initial-containing-block"> <!-- 0 tests --> </tbody> - <tbody id="sC.2.58.#q65"> + <tbody id="sC.2.58.#q21.65"> <!-- 0 tests --> </tbody> <tbody id="sC.2.59"> @@ -624,7 +627,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.2">C.2.59 Section 10.2 Content width</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.59.#q66"> + <tbody id="sC.2.59.#q21.66"> <!-- 0 tests --> </tbody> <tbody id="sC.2.60"> @@ -633,7 +636,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.3">C.2.60 Section 10.3 Calculating widths and margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.60.#q67"> + <tbody id="sC.2.60.#q21.67"> <!-- 0 tests --> </tbody> <tbody id="sC.2.61"> @@ -642,7 +645,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.3.2">C.2.61 Section 10.3.2 Inline, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.61.#q68"> + <tbody id="sC.2.61.#q21.68"> <!-- 0 tests --> </tbody> <tbody id="sC.2.62"> @@ -651,7 +654,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.3.3">C.2.62 Section 10.3.3 Block-level, non-replaced elements in normal flow</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.62.#q69"> + <tbody id="sC.2.62.#q21.69"> <!-- 0 tests --> </tbody> <tbody id="sC.2.63"> @@ -660,7 +663,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.3.4">C.2.63 Section 10.3.4 Block-level, replaced elements in normal flow</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.63.#q70"> + <tbody id="sC.2.63.#q21.70"> <!-- 0 tests --> </tbody> <tbody id="sC.2.64"> @@ -669,7 +672,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.3.5">C.2.64 Section 10.3.5 Floating, non-replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.64.#q71"> + <tbody id="sC.2.64.#q21.71"> <!-- 0 tests --> </tbody> <tbody id="sC.2.65"> @@ -678,7 +681,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.3.6">C.2.65 Section 10.3.6 Floating, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.65.#q72"> + <tbody id="sC.2.65.#q21.72"> <!-- 0 tests --> </tbody> <tbody id="sC.2.66"> @@ -687,7 +690,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.3.7">C.2.66 Section 10.3.7 Absolutely positioned, non-replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.66.#q73"> + <tbody id="sC.2.66.#q21.73"> <!-- 0 tests --> </tbody> <tbody id="sC.2.67"> @@ -696,7 +699,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.3.8">C.2.67 Section 10.3.8 Absolutely positioned, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.67.#q74"> + <tbody id="sC.2.67.#q21.74"> <!-- 0 tests --> </tbody> <tbody id="sC.2.68"> @@ -705,7 +708,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.4">C.2.68 Section 10.4 Minimum and maximum widths</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.68.#q75"> + <tbody id="sC.2.68.#q21.75"> <!-- 0 tests --> </tbody> <tbody id="sC.2.69"> @@ -714,7 +717,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.5">C.2.69 Section 10.5 Content height</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.69.#q76"> + <tbody id="sC.2.69.#q21.76"> <!-- 0 tests --> </tbody> <tbody id="sC.2.70"> @@ -723,7 +726,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.6">C.2.70 Section 10.6 Calculating heights and margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.70.#q77"> + <tbody id="sC.2.70.#q21.77"> <!-- 0 tests --> </tbody> <tbody id="sC.2.71"> @@ -732,7 +735,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.6.1">C.2.71 Section 10.6.1 Inline, non-replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.71.#q78"> + <tbody id="sC.2.71.#q21.78"> <!-- 0 tests --> </tbody> <tbody id="sC.2.72"> @@ -741,7 +744,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.6.2">C.2.72 Section 10.6.2 Inline replaced elements, block-level replaced elements in normal flow, 'inline-block' replaced elements in normal flow and floating replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.72.#q79"> + <tbody id="sC.2.72.#q21.79"> <!-- 0 tests --> </tbody> <tbody id="sC.2.73"> @@ -750,7 +753,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.6.3">C.2.73 Section 10.6.3 Block-level non-replaced elements in normal flow when 'overflow' computes to 'visible'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.73.#q80"> + <tbody id="sC.2.73.#q21.80"> <!-- 0 tests --> </tbody> <tbody id="sC.2.74"> @@ -759,7 +762,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.6.4">C.2.74 Section 10.6.4 Absolutely positioned, non-replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.74.#q81"> + <tbody id="sC.2.74.#q21.81"> <!-- 0 tests --> </tbody> <tbody id="sC.2.75"> @@ -768,7 +771,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.6.5">C.2.75 Section 10.6.5 Absolutely positioned, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.75.#q82"> + <tbody id="sC.2.75.#q21.82"> <!-- 0 tests --> </tbody> <tbody id="sC.2.76"> @@ -777,7 +780,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.7">C.2.76 Section 10.7 Minimum and maximum heights</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.76.#q83"> + <tbody id="sC.2.76.#q21.83"> <!-- 0 tests --> </tbody> <tbody id="sC.2.77"> @@ -786,7 +789,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.8">C.2.77 Section 10.8 Line height calculations</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.77.#q84"> + <tbody id="sC.2.77.#q21.84"> <!-- 0 tests --> </tbody> <tbody id="sC.2.78"> @@ -795,7 +798,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c10.8.1">C.2.78 Section 10.8.1 Leading and half-leading</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.78.#q85"> + <tbody id="sC.2.78.#q21.85"> <!-- 0 tests --> </tbody> <tbody id="sC.2.79"> @@ -804,7 +807,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c11.1">C.2.79 Section 11.1 Overflow and clipping</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.79.#q86"> + <tbody id="sC.2.79.#q21.86"> <!-- 0 tests --> </tbody> <tbody id="sC.2.80"> @@ -813,7 +816,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c11.1.1">C.2.80 Section 11.1.1 Overflow</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.80.#q87"> + <tbody id="sC.2.80.#q21.87"> <!-- 0 tests --> </tbody> <tbody id="sC.2.81"> @@ -822,7 +825,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c11.1.2">C.2.81 Section 11.1.2 Clipping: the 'clip' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.81.#q88"> + <tbody id="sC.2.81.#q21.88"> <!-- 0 tests --> </tbody> <tbody id="sC.2.82"> @@ -831,7 +834,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c11.2">C.2.82 Section 11.2 Visibility</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.82.#q89"> + <tbody id="sC.2.82.#q21.89"> <!-- 0 tests --> </tbody> <tbody id="sC.2.83"> @@ -840,7 +843,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c12">C.2.83 Chapter 12 Generated content, automatic numbering, and lists</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.83.#q90"> + <tbody id="sC.2.83.#q21.90"> <!-- 0 tests --> </tbody> <tbody id="sC.2.84"> @@ -849,7 +852,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c12.1">C.2.84 Section 12.1 The :before and :after pseudo-elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.84.#q91"> + <tbody id="sC.2.84.#q21.91"> <!-- 0 tests --> </tbody> <tbody id="sC.2.85"> @@ -858,7 +861,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c12.2">C.2.85 Section 12.2 The 'content' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.85.#q92"> + <tbody id="sC.2.85.#q21.92"> <!-- 0 tests --> </tbody> <tbody id="sC.2.86"> @@ -867,7 +870,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c12.3.2">C.2.86 Section 12.3.2 Inserting quotes with the 'content' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.86.#q93"> + <tbody id="sC.2.86.#q21.93"> <!-- 0 tests --> </tbody> <tbody id="sC.2.87"> @@ -876,7 +879,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c12.4">C.2.87 Section 12.4 Automatic counters and numbering</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.87.#q94"> + <tbody id="sC.2.87.#q21.94"> <!-- 0 tests --> </tbody> <tbody id="sC.2.88"> @@ -885,7 +888,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c12.4.1">C.2.88 Section 12.4.1 Nested counters and scope</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.88.#q95"> + <tbody id="sC.2.88.#q21.95"> <!-- 0 tests --> </tbody> <tbody id="sC.2.89"> @@ -894,7 +897,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c12.5">C.2.89 Section 12.5 Lists</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.89.#q96"> + <tbody id="sC.2.89.#q21.96"> <!-- 0 tests --> </tbody> <tbody id="sC.2.90"> @@ -903,7 +906,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c12.5.1">C.2.90 Section 12.5.1 Lists</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.90.#q97"> + <tbody id="sC.2.90.#q21.97"> <!-- 0 tests --> </tbody> <tbody id="sC.2.91"> @@ -912,7 +915,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c13.1">C.2.91 Chapter 13 Paged media</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.91.#q98"> + <tbody id="sC.2.91.#q21.98"> <!-- 0 tests --> </tbody> <tbody id="sC.2.92"> @@ -921,7 +924,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c13.2.2">C.2.92 Section 13.2.2 Page selectors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.92.#q99"> + <tbody id="sC.2.92.#q21.99"> <!-- 0 tests --> </tbody> <tbody id="sC.2.93"> @@ -930,7 +933,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c13.3.1">C.2.93 Section 13.3.1 Page break properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.93.#q100"> + <tbody id="sC.2.93.#q21.100"> <!-- 0 tests --> </tbody> <tbody id="sC.2.94"> @@ -939,7 +942,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c13.3.3">C.2.94 Section 13.3.3 Allowed page breaks</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.94.#q101"> + <tbody id="sC.2.94.#q21.101"> <!-- 0 tests --> </tbody> <tbody id="sC.2.95"> @@ -948,7 +951,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c14.2.1">C.2.95 Section 14.2.1 Background properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.95.#q102"> + <tbody id="sC.2.95.#q21.102"> <!-- 0 tests --> </tbody> <tbody id="sC.2.96"> @@ -957,7 +960,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c14.3">C.2.96 Section 14.3 Gamma correction</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.96.#q103"> + <tbody id="sC.2.96.#q21.103"> <!-- 0 tests --> </tbody> <tbody id="sC.2.97"> @@ -966,7 +969,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c15">C.2.97 Chapter 15 Fonts</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.97.#q104"> + <tbody id="sC.2.97.#q21.104"> <!-- 0 tests --> </tbody> <tbody id="sC.2.98"> @@ -975,7 +978,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c15.2">C.2.98 Section 15.2 Font matching algorithm</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.98.#q105"> + <tbody id="sC.2.98.#q21.105"> <!-- 0 tests --> </tbody> <tbody id="sC.2.99"> @@ -984,7 +987,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c15.3">C.2.99 Section 15.2.2 Font family</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.99.#q106"> + <tbody id="sC.2.99.#q21.106"> <!-- 0 tests --> </tbody> <tbody id="sC.2.100"> @@ -993,7 +996,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c15.5">C.2.100 Section 15.5 Small-caps</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.100.#q107"> + <tbody id="sC.2.100.#q21.107"> <!-- 0 tests --> </tbody> <tbody id="sC.2.101"> @@ -1002,7 +1005,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c15.6">C.2.101 Section 15.6 Font boldness</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.101.#q108"> + <tbody id="sC.2.101.#q21.108"> <!-- 0 tests --> </tbody> <tbody id="sC.2.102"> @@ -1011,7 +1014,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c15.7">C.2.102 Section 15.7 Font size</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.102.#q109"> + <tbody id="sC.2.102.#q21.109"> <!-- 0 tests --> </tbody> <tbody id="sC.2.103"> @@ -1020,7 +1023,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c16">C.2.103 Chapter 16 Text</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.103.#q110"> + <tbody id="sC.2.103.#q21.110"> <!-- 0 tests --> </tbody> <tbody id="sC.2.104"> @@ -1029,7 +1032,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c16.2">C.2.104 Section 16.2 Alignment</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.104.#q111"> + <tbody id="sC.2.104.#q21.111"> <!-- 0 tests --> </tbody> <tbody id="sC.2.105"> @@ -1038,7 +1041,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c16.3.1">C.2.105 Section 16.3.1 Underlining, over lining, striking, and blinking</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.105.#q112"> + <tbody id="sC.2.105.#q21.112"> <!-- 0 tests --> </tbody> <tbody id="sC.2.106"> @@ -1047,7 +1050,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c16.4">C.2.106 Section 16.4 Letter and word spacing</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.106.#q113"> + <tbody id="sC.2.106.#q21.113"> <!-- 0 tests --> </tbody> <tbody id="sC.2.107"> @@ -1056,7 +1059,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c16.5">C.2.107 Section 16.5 Capitalization</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.107.#q114"> + <tbody id="sC.2.107.#q21.114"> <!-- 0 tests --> </tbody> <tbody id="sC.2.108"> @@ -1065,7 +1068,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c16.6">C.2.108 Section 16.6 White space</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.108.#q115"> + <tbody id="sC.2.108.#q21.115"> <!-- 0 tests --> </tbody> <tbody id="sC.2.109"> @@ -1074,7 +1077,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17">C.2.109 Chapter 17 Tables</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.109.#q116"> + <tbody id="sC.2.109.#q21.116"> <!-- 0 tests --> </tbody> <tbody id="sC.2.110"> @@ -1083,7 +1086,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.2">C.2.110 Section 17.2 The CSS table model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.110.#q117"> + <tbody id="sC.2.110.#q21.117"> <!-- 0 tests --> </tbody> <tbody id="sC.2.111"> @@ -1092,7 +1095,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.2.1">C.2.111 Section 17.2.1 Anonymous table objects</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.111.#q118"> + <tbody id="sC.2.111.#q21.118"> <!-- 0 tests --> </tbody> <tbody id="sC.2.112"> @@ -1101,7 +1104,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.4">C.2.112 Section 17.4 Tables in the visual formatting model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.112.#q119"> + <tbody id="sC.2.112.#q21.119"> <!-- 0 tests --> </tbody> <tbody id="sC.2.113"> @@ -1110,7 +1113,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.4.1">C.2.113 Section 17.4.1 Caption position and alignment</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.113.#q120"> + <tbody id="sC.2.113.#q21.120"> <!-- 0 tests --> </tbody> <tbody id="sC.2.114"> @@ -1119,7 +1122,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.5">C.2.114 Section 17.5 Visual layout of table contents</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.114.#q121"> + <tbody id="sC.2.114.#q21.121"> <!-- 0 tests --> </tbody> <tbody id="sC.2.115"> @@ -1128,7 +1131,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.5.1">C.2.115 Section 17.5.1 Table layers and transparency</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.115.#q122"> + <tbody id="sC.2.115.#q21.122"> <!-- 0 tests --> </tbody> <tbody id="sC.2.116"> @@ -1137,7 +1140,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.5.2.1">C.2.116 Section 17.5.2.1 Fixed table layout</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.116.#q123"> + <tbody id="sC.2.116.#q21.123"> <!-- 0 tests --> </tbody> <tbody id="sC.2.117"> @@ -1146,7 +1149,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.5.2.2">C.2.117 Section 17.5.2.2 Automatic table layout</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.117.#q124"> + <tbody id="sC.2.117.#q21.124"> <!-- 0 tests --> </tbody> <tbody id="sC.2.118"> @@ -1155,7 +1158,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.5.3">C.2.118 Section 17.5.3 Table height algorithms</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.118.#q125"> + <tbody id="sC.2.118.#q21.125"> <!-- 0 tests --> </tbody> <tbody id="sC.2.119"> @@ -1164,7 +1167,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.5.4">C.2.119 Section 17.5.4 Horizontal alignment in a column</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.119.#q126"> + <tbody id="sC.2.119.#q21.126"> <!-- 0 tests --> </tbody> <tbody id="sC.2.120"> @@ -1173,7 +1176,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.6">C.2.120 Section 17.6 Borders</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.120.#q127"> + <tbody id="sC.2.120.#q21.127"> <!-- 0 tests --> </tbody> <tbody id="sC.2.121"> @@ -1182,7 +1185,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.6.1">C.2.121 Section 17.6.1 The separated borders model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.121.#q128"> + <tbody id="sC.2.121.#q21.128"> <!-- 0 tests --> </tbody> <tbody id="sC.2.122"> @@ -1191,7 +1194,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.6.1.1">C.2.122 Section 17.6.1.1 Borders and Backgrounds around empty cells</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.122.#q129"> + <tbody id="sC.2.122.#q21.129"> <!-- 0 tests --> </tbody> <tbody id="sC.2.123"> @@ -1200,7 +1203,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.6.2">C.2.123 Section 17.6.2 The collapsing border model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.123.#q130"> + <tbody id="sC.2.123.#q21.130"> <!-- 0 tests --> </tbody> <tbody id="sC.2.124"> @@ -1209,7 +1212,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c17.6.2.1">C.2.124 Section 17.6.2.1 Border conflict resolution</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.124.#q131"> + <tbody id="sC.2.124.#q21.131"> <!-- 0 tests --> </tbody> <tbody id="sC.2.125"> @@ -1218,7 +1221,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c18.1">C.2.125 Section 18.1 Cursors: the 'cursor' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.125.#q132"> + <tbody id="sC.2.125.#q21.132"> <!-- 0 tests --> </tbody> <tbody id="sC.2.126"> @@ -1227,7 +1230,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#c18.4">C.2.126 Section 18.4 Dynamic outlines</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.126.#q133"> + <tbody id="sC.2.126.#q21.133"> <!-- 0 tests --> </tbody> <tbody id="sC.2.127"> @@ -1236,7 +1239,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s-12">C.2.127 Chapter 12 Generated content, automatic numbering, and lists</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.127.#q134"> + <tbody id="sC.2.127.#q21.134"> <!-- 0 tests --> </tbody> <tbody id="sC.2.128"> @@ -1245,7 +1248,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#cA">C.2.128 Appendix A. Aural style sheets</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.128.#q135"> + <tbody id="sC.2.128.#q21.135"> <!-- 0 tests --> </tbody> <tbody id="sC.2.129"> @@ -1254,7 +1257,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#cA.5">C.2.129 Appendix A Section 5 Pause properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.129.#q136"> + <tbody id="sC.2.129.#q21.136"> <!-- 0 tests --> </tbody> <tbody id="sC.2.130"> @@ -1263,7 +1266,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#cA.6">C.2.130 Appendix A Section 6 Cue properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.130.#q137"> + <tbody id="sC.2.130.#q21.137"> <!-- 0 tests --> </tbody> <tbody id="sC.2.131"> @@ -1272,7 +1275,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#cA.7">C.2.131 Appendix A Section 7 Mixing properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.131.#q138"> + <tbody id="sC.2.131.#q21.138"> <!-- 0 tests --> </tbody> <tbody id="sC.2.132"> @@ -1281,7 +1284,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#cB">C.2.132 Appendix B Bibliography</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.132.#q139"> + <tbody id="sC.2.132.#q21.139"> <!-- 0 tests --> </tbody> <tbody id="sC.2.133"> @@ -1290,7 +1293,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#other">C.2.133 Other</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.2.133.#q140"> + <tbody id="sC.2.133.#q21.140"> <!-- 0 tests --> </tbody> <tbody id="sC.3"> @@ -1305,19 +1308,8 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x-shorthand-inherit">C.3.1 Shorthand properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.1.#q142"> - <!-- 1 tests --> - <tr id="font-045-C.3.1.#q142" class="ahem invalid"> - <td> - <a href="font-045.xht">font-045</a></td> - <td></td> - <td><abbr class="ahem" title="Requires Ahem font">Ahem</abbr><abbr class="invalid" title="Tests invalid CSS">Invalid</abbr></td> - <td>font - inherit keyword value - <ul class="assert"> - <li>The inherit keyword value cannot mix with other subproperty values</li> - </ul> - </td> - </tr> + <tbody id="sC.3.1.#q21.142"> + <!-- 0 tests --> </tbody> <tbody id="sC.3.2"> <tr><th colspan="4" scope="rowgroup"> @@ -1325,7 +1317,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x-applies-table">C.3.2 Applies to</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.2.#q143"> + <tbody id="sC.3.2.#q21.143"> <!-- 0 tests --> </tbody> <tbody id="sC.3.3"> @@ -1334,7 +1326,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x4.1.1">C.3.3 Section 4.1.1 (and G2)</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.3.#q144"> + <tbody id="sC.3.3.#q21.144"> <!-- 0 tests --> </tbody> <tbody id="sC.3.4"> @@ -1343,7 +1335,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x4.1.3">C.3.4 Section 4.1.3 Characters and case</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.4.#q145"> + <tbody id="sC.3.4.#q21.145"> <!-- 0 tests --> </tbody> <tbody id="sC.3.5"> @@ -1352,7 +1344,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x4.3">C.3.5 Section 4.3 (Double sign problem)</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.5.#q146"> + <tbody id="sC.3.5.#q21.146"> <!-- 0 tests --> </tbody> <tbody id="sC.3.6"> @@ -1361,7 +1353,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x4.3.2">C.3.6 Section 4.3.2 Lengths</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.6.#q147"> + <tbody id="sC.3.6.#q21.147"> <!-- 0 tests --> </tbody> <tbody id="sC.3.7"> @@ -1370,7 +1362,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x4.3.3">C.3.7 Section 4.3.3 Percentages</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.7.#q148"> + <tbody id="sC.3.7.#q21.148"> <!-- 0 tests --> </tbody> <tbody id="sC.3.8"> @@ -1379,7 +1371,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x4.3.4">C.3.8 Section 4.3.4 URLs and URIs</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.8.#q149"> + <tbody id="sC.3.8.#q21.149"> <!-- 0 tests --> </tbody> <tbody id="sC.3.9"> @@ -1388,7 +1380,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x4.3.5">C.3.9 Section 4.3.5 Counters</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.9.#q150"> + <tbody id="sC.3.9.#q21.150"> <!-- 0 tests --> </tbody> <tbody id="sC.3.10"> @@ -1397,7 +1389,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x4.3.6">C.3.10 Section 4.3.6 Colors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.10.#q151"> + <tbody id="sC.3.10.#q21.151"> <!-- 0 tests --> </tbody> <tbody id="sC.3.11"> @@ -1406,7 +1398,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x4.3.7">C.3.11 Section 4.3.7 Strings</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.11.#q152"> + <tbody id="sC.3.11.#q21.152"> <!-- 0 tests --> </tbody> <tbody id="sC.3.12"> @@ -1415,7 +1407,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x5.10">C.3.12 Section 5.10 Pseudo-elements and pseudo-classes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.12.#q153"> + <tbody id="sC.3.12.#q21.153"> <!-- 0 tests --> </tbody> <tbody id="sC.3.13"> @@ -1424,7 +1416,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x6.4">C.3.13 Section 6.4 The cascade</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.13.#q154"> + <tbody id="sC.3.13.#q21.154"> <!-- 0 tests --> </tbody> <tbody id="sC.3.14"> @@ -1433,7 +1425,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x8.1">C.3.14 Section 8.1 Box Dimensions</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.14.#q155"> + <tbody id="sC.3.14.#q21.155"> <!-- 0 tests --> </tbody> <tbody id="sC.3.15"> @@ -1442,7 +1434,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x8.2">C.3.15 Section 8.2 Example of margins, padding, and borders</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.15.#q156"> + <tbody id="sC.3.15.#q21.156"> <!-- 0 tests --> </tbody> <tbody id="sC.3.16"> @@ -1451,7 +1443,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x8.5.4">C.3.16 Section 8.5.4 Border shorthand properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.16.#q157"> + <tbody id="sC.3.16.#q21.157"> <!-- 0 tests --> </tbody> <tbody id="sC.3.17"> @@ -1460,7 +1452,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.2.1">C.3.17 Section 9.2.1 Block-level elements and block boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.17.#q158"> + <tbody id="sC.3.17.#q21.158"> <!-- 0 tests --> </tbody> <tbody id="sC.3.18"> @@ -1469,7 +1461,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.3.1">C.3.18 Section 9.3.1 Choosing a positioning scheme</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.18.#q159"> + <tbody id="sC.3.18.#q21.159"> <!-- 0 tests --> </tbody> <tbody id="sC.3.19"> @@ -1478,7 +1470,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.3.2">C.3.19 Section 9.3.2 Box offsets</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.19.#q160"> + <tbody id="sC.3.19.#q21.160"> <!-- 0 tests --> </tbody> <tbody id="sC.3.20"> @@ -1487,7 +1479,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.4.1">C.3.20 Section 9.4.1 Block formatting contexts</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.20.#q161"> + <tbody id="sC.3.20.#q21.161"> <!-- 0 tests --> </tbody> <tbody id="sC.3.21"> @@ -1496,7 +1488,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.4.2">C.3.21 Section 9.4.2 Inline formatting context</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.21.#q162"> + <tbody id="sC.3.21.#q21.162"> <!-- 0 tests --> </tbody> <tbody id="sC.3.22"> @@ -1505,7 +1497,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.4.3">C.3.22 Section 9.4.3 Relative positioning</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.22.#q163"> + <tbody id="sC.3.22.#q21.163"> <!-- 0 tests --> </tbody> <tbody id="sC.3.23"> @@ -1514,7 +1506,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.5">C.3.23 Section 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.23.#q164"> + <tbody id="sC.3.23.#q21.164"> <!-- 0 tests --> </tbody> <tbody id="sC.3.24"> @@ -1523,7 +1515,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.5.1">C.3.24 Section 9.5.1 Positioning the float</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.24.#q165"> + <tbody id="sC.3.24.#q21.165"> <!-- 0 tests --> </tbody> <tbody id="sC.3.25"> @@ -1532,7 +1524,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.5.2">C.3.25 Section 9.5.2 Controlling flow next to floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.25.#q166"> + <tbody id="sC.3.25.#q21.166"> <!-- 0 tests --> </tbody> <tbody id="sC.3.26"> @@ -1541,7 +1533,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.6">C.3.26 Section 9.6 Absolute positioning</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.26.#q167"> + <tbody id="sC.3.26.#q21.167"> <!-- 0 tests --> </tbody> <tbody id="sC.3.27"> @@ -1550,7 +1542,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.7">C.3.27 Section 9.7 Relationships between 'display', 'position', and 'float'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.27.#q168"> + <tbody id="sC.3.27.#q21.168"> <!-- 0 tests --> </tbody> <tbody id="sC.3.28"> @@ -1559,7 +1551,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x9.10">C.3.28 Section 9.10 Text direction</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.28.#q169"> + <tbody id="sC.3.28.#q21.169"> <!-- 0 tests --> </tbody> <tbody id="sC.3.29"> @@ -1568,7 +1560,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x10.1">C.3.29 Section 10.1 Definition of "containing block"</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.29.#q170"> + <tbody id="sC.3.29.#q21.170"> <!-- 0 tests --> </tbody> <tbody id="sC.3.30"> @@ -1577,7 +1569,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x10.3.3">C.3.30 Section 10.3.3 Block-level, non-replaced elements in normal flow</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.30.#q171"> + <tbody id="sC.3.30.#q21.171"> <!-- 0 tests --> </tbody> <tbody id="sC.3.31"> @@ -1586,7 +1578,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x10.4">C.3.31 Section 10.4 Minimum and maximum widths</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.31.#q172"> + <tbody id="sC.3.31.#q21.172"> <!-- 0 tests --> </tbody> <tbody id="sC.3.32"> @@ -1595,7 +1587,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x10.6.3">C.3.32 Section 10.6.3 Block-level non-replaced elements in normal flow when 'overflow' computes to 'visible'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.32.#q173"> + <tbody id="sC.3.32.#q21.173"> <!-- 0 tests --> </tbody> <tbody id="sC.3.33"> @@ -1604,7 +1596,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x10.7">C.3.33 Section 10.7 Minimum and maximum heights</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.33.#q174"> + <tbody id="sC.3.33.#q21.174"> <!-- 0 tests --> </tbody> <tbody id="sC.3.34"> @@ -1613,7 +1605,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x11.1.1">C.3.34 Section 11.1.1 Overflow</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.34.#q175"> + <tbody id="sC.3.34.#q21.175"> <!-- 0 tests --> </tbody> <tbody id="sC.3.35"> @@ -1622,7 +1614,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x11.1.2">C.3.35 Section 11.1.2 Clipping: the 'clip' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.35.#q176"> + <tbody id="sC.3.35.#q21.176"> <!-- 0 tests --> </tbody> <tbody id="sC.3.36"> @@ -1631,7 +1623,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x11.2">C.3.36 Section 11.2 Visibility</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.36.#q177"> + <tbody id="sC.3.36.#q21.177"> <!-- 0 tests --> </tbody> <tbody id="sC.3.37"> @@ -1640,7 +1632,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x12.4.2">C.3.37 Section 12.4.2 Counter styles</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.37.#q178"> + <tbody id="sC.3.37.#q21.178"> <!-- 0 tests --> </tbody> <tbody id="sC.3.38"> @@ -1649,7 +1641,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x12.6.2">C.3.38 Section 12.6.2 Lists</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.38.#q179"> + <tbody id="sC.3.38.#q21.179"> <!-- 0 tests --> </tbody> <tbody id="sC.3.39"> @@ -1658,7 +1650,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x14.2">C.3.39 Section 14.2 The background</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.39.#q180"> + <tbody id="sC.3.39.#q21.180"> <!-- 0 tests --> </tbody> <tbody id="sC.3.40"> @@ -1667,7 +1659,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x14.2.1">C.3.40 Section 14.2.1 Background properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.40.#q181"> + <tbody id="sC.3.40.#q21.181"> <!-- 0 tests --> </tbody> <tbody id="sC.3.41"> @@ -1676,7 +1668,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x15.2">C.3.41 Section 15.2 Font matching algorithm</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.41.#q182"> + <tbody id="sC.3.41.#q21.182"> <!-- 0 tests --> </tbody> <tbody id="sC.3.42"> @@ -1685,7 +1677,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x15.7">C.3.42 Section 15.7 Font size</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.42.#q183"> + <tbody id="sC.3.42.#q21.183"> <!-- 0 tests --> </tbody> <tbody id="sC.3.43"> @@ -1694,7 +1686,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x16.1">C.3.43 Section 16.1 Indentation</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.43.#q184"> + <tbody id="sC.3.43.#q21.184"> <!-- 0 tests --> </tbody> <tbody id="sC.3.44"> @@ -1703,7 +1695,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x16.2">C.3.44 Section 16.2 Alignment</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.44.#q185"> + <tbody id="sC.3.44.#q21.185"> <!-- 0 tests --> </tbody> <tbody id="sC.3.45"> @@ -1712,7 +1704,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x17.2">C.3.45 Section 17.2 The CSS table model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.45.#q186"> + <tbody id="sC.3.45.#q21.186"> <!-- 0 tests --> </tbody> <tbody id="sC.3.46"> @@ -1721,7 +1713,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x17.2.1">C.3.46 Section 17.2.1 Anonymous table objects</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.46.#q187"> + <tbody id="sC.3.46.#q21.187"> <!-- 0 tests --> </tbody> <tbody id="sC.3.47"> @@ -1730,7 +1722,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x17.4">C.3.47 Section 17.4 Tables in the visual formatting model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.47.#q188"> + <tbody id="sC.3.47.#q21.188"> <!-- 0 tests --> </tbody> <tbody id="sC.3.48"> @@ -1739,7 +1731,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x17.5">C.3.48 Section 17.5 Visual layout of table contents</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.48.#q189"> + <tbody id="sC.3.48.#q21.189"> <!-- 0 tests --> </tbody> <tbody id="sC.3.49"> @@ -1748,7 +1740,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x17.5.1">C.3.49 Section 17.5.1 Table layers and transparency</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.49.#q190"> + <tbody id="sC.3.49.#q21.190"> <!-- 0 tests --> </tbody> <tbody id="sC.3.50"> @@ -1757,7 +1749,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x17.6.1">C.3.50 Section 17.6.1 The separated borders model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.50.#q191"> + <tbody id="sC.3.50.#q21.191"> <!-- 0 tests --> </tbody> <tbody id="sC.3.51"> @@ -1766,7 +1758,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#x18.2">C.3.51 Section 18.2 System Colors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.51.#q192"> + <tbody id="sC.3.51.#q21.192"> <!-- 0 tests --> </tbody> <tbody id="sC.3.52"> @@ -1775,7 +1767,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#xE.2">C.3.52 Section E.2 Painting order</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.3.52.#q193"> + <tbody id="sC.3.52.#q21.193"> <!-- 0 tests --> </tbody> <tbody id="sC.4"> @@ -1790,7 +1782,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r2.1">C.4.1 Section 2.1 A brief CSS 2.1 tutorial for HTML</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.1.#q195"> + <tbody id="sC.4.1.#q21.195"> <!-- 0 tests --> </tbody> <tbody id="sC.4.2"> @@ -1799,7 +1791,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r2.2">C.4.2 Section 2.2 A brief CSS 2.1 tutorial for XML</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.2.#q196"> + <tbody id="sC.4.2.#q21.196"> <!-- 0 tests --> </tbody> <tbody id="sC.4.3"> @@ -1808,7 +1800,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r2.3">C.4.3 Section 2.3 The CSS 2.1 processing model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.3.#q197"> + <tbody id="sC.4.3.#q21.197"> <!-- 0 tests --> </tbody> <tbody id="sC.4.4"> @@ -1817,7 +1809,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r3.1">C.4.4 Section 3.1 Definitions</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.4.#q198"> + <tbody id="sC.4.4.#q21.198"> <!-- 0 tests --> </tbody> <tbody id="sC.4.5"> @@ -1826,7 +1818,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r4.1">C.4.5 Section 4.1 Syntax</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.5.#q199"> + <tbody id="sC.4.5.#q21.199"> <!-- 0 tests --> </tbody> <tbody id="sC.4.6"> @@ -1835,7 +1827,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r4.1.1">C.4.6 Section 4.1.1 Tokenization</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.6.#q200"> + <tbody id="sC.4.6.#q21.200"> <!-- 0 tests --> </tbody> <tbody id="sC.4.7"> @@ -1844,7 +1836,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r4.1.3">C.4.7 Section 4.1.3 Characters and case</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.7.#q201"> + <tbody id="sC.4.7.#q21.201"> <!-- 0 tests --> </tbody> <tbody id="sC.4.8"> @@ -1853,7 +1845,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r4.1.7">C.4.8 Section 4.1.7 Rule sets, declaration blocks, and selectors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.8.#q202"> + <tbody id="sC.4.8.#q21.202"> <!-- 0 tests --> </tbody> <tbody id="sC.4.9"> @@ -1862,7 +1854,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r4.2">C.4.9 Section 4.2 Rules for handling parsing errors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.9.#q203"> + <tbody id="sC.4.9.#q21.203"> <!-- 0 tests --> </tbody> <tbody id="sC.4.10"> @@ -1871,7 +1863,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r4.3.1">C.4.10 Section 4.3.1 Integers and real numbers</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.10.#q204"> + <tbody id="sC.4.10.#q21.204"> <!-- 0 tests --> </tbody> <tbody id="sC.4.11"> @@ -1880,7 +1872,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r4.3.2">C.4.11 Section 4.3.2 Lengths</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.11.#q205"> + <tbody id="sC.4.11.#q21.205"> <!-- 0 tests --> </tbody> <tbody id="sC.4.12"> @@ -1889,7 +1881,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r4.3.4">C.4.12 Section 4.3.4 URLs and URIs</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.12.#q206"> + <tbody id="sC.4.12.#q21.206"> <!-- 0 tests --> </tbody> <tbody id="sC.4.13"> @@ -1898,7 +1890,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r5.1">C.4.13 Section 5.1 Pattern matching</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.13.#q207"> + <tbody id="sC.4.13.#q21.207"> <!-- 0 tests --> </tbody> <tbody id="sC.4.14"> @@ -1907,7 +1899,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r5.7">C.4.14 Section 5.7 Adjacent sibling selectors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.14.#q208"> + <tbody id="sC.4.14.#q21.208"> <!-- 0 tests --> </tbody> <tbody id="sC.4.15"> @@ -1916,7 +1908,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r5.8.1">C.4.15 Section 5.8.1 Matching attributes and attribute values</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.15.#q209"> + <tbody id="sC.4.15.#q21.209"> <!-- 0 tests --> </tbody> <tbody id="sC.4.16"> @@ -1925,7 +1917,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r5.8.2">C.4.16 Section 5.8.2 Default attribute values in DTDs</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.16.#q210"> + <tbody id="sC.4.16.#q21.210"> <!-- 0 tests --> </tbody> <tbody id="sC.4.17"> @@ -1934,7 +1926,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r5.9">C.4.17 Section 5.9 ID selectors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.17.#q211"> + <tbody id="sC.4.17.#q21.211"> <!-- 0 tests --> </tbody> <tbody id="sC.4.18"> @@ -1943,7 +1935,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r5.11.3">C.4.18 Section 5.11.3 The dynamic pseudo-classes: :hover, :active, and :focus</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.18.#q212"> + <tbody id="sC.4.18.#q21.212"> <!-- 0 tests --> </tbody> <tbody id="sC.4.19"> @@ -1952,7 +1944,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r5.11.4">C.4.19 Section 5.11.4 The language pseudo-class: :lang</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.19.#q213"> + <tbody id="sC.4.19.#q21.213"> <!-- 0 tests --> </tbody> <tbody id="sC.4.20"> @@ -1961,7 +1953,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r5.12.2">C.4.20 Section 5.12.2 The :first-letter pseudo-element</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.20.#q214"> + <tbody id="sC.4.20.#q21.214"> <!-- 0 tests --> </tbody> <tbody id="sC.4.21"> @@ -1970,7 +1962,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r6.2">C.4.21 Section 6.2 Inheritance</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.21.#q215"> + <tbody id="sC.4.21.#q21.215"> <!-- 0 tests --> </tbody> <tbody id="sC.4.22"> @@ -1979,7 +1971,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r6.2.1">C.4.22 Section 6.2.1 The 'inherit' value</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.22.#q216"> + <tbody id="sC.4.22.#q21.216"> <!-- 0 tests --> </tbody> <tbody id="sC.4.23"> @@ -1988,7 +1980,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r6.3">C.4.23 Section 6.3 The @import rule</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.23.#q217"> + <tbody id="sC.4.23.#q21.217"> <!-- 0 tests --> </tbody> <tbody id="sC.4.24"> @@ -1997,7 +1989,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r6.4">C.4.24 Section 6.4 The Cascade</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.24.#q218"> + <tbody id="sC.4.24.#q21.218"> <!-- 0 tests --> </tbody> <tbody id="sC.4.25"> @@ -2006,7 +1998,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r6.4.1">C.4.25 Section 6.4.1 Cascading order</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.25.#q219"> + <tbody id="sC.4.25.#q21.219"> <!-- 0 tests --> </tbody> <tbody id="sC.4.26"> @@ -2015,7 +2007,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r6.4.3">C.4.26 Section 6.4.3 Calculating a selector's specificity</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.26.#q220"> + <tbody id="sC.4.26.#q21.220"> <!-- 0 tests --> </tbody> <tbody id="sC.4.27"> @@ -2024,7 +2016,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r7.2.1">C.4.27 Section 7.2.1 The @media rule</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.27.#q221"> + <tbody id="sC.4.27.#q21.221"> <!-- 0 tests --> </tbody> <tbody id="sC.4.28"> @@ -2033,7 +2025,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r7.3">C.4.28 Section 7.3 Recognized media types</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.28.#q222"> + <tbody id="sC.4.28.#q21.222"> <!-- 0 tests --> </tbody> <tbody id="sC.4.29"> @@ -2042,7 +2034,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r7.3.1">C.4.29 Section 7.3.1 Media groups</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.29.#q223"> + <tbody id="sC.4.29.#q21.223"> <!-- 0 tests --> </tbody> <tbody id="sC.4.30"> @@ -2051,7 +2043,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r8.1">C.4.30 Section 8.1 Box dimensions</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.30.#q224"> + <tbody id="sC.4.30.#q21.224"> <!-- 0 tests --> </tbody> <tbody id="sC.4.31"> @@ -2060,7 +2052,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r8.3">C.4.31 Section 8.3 Margin properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.31.#q225"> + <tbody id="sC.4.31.#q21.225"> <!-- 0 tests --> </tbody> <tbody id="sC.4.32"> @@ -2069,7 +2061,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r8.3.1">C.4.32 Section 8.3.1 Collapsing margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.32.#q226"> + <tbody id="sC.4.32.#q21.226"> <!-- 0 tests --> </tbody> <tbody id="sC.4.33"> @@ -2078,7 +2070,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r8.5.3">C.4.33 Section 8.5.3 Border style</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.33.#q227"> + <tbody id="sC.4.33.#q21.227"> <!-- 0 tests --> </tbody> <tbody id="sC.4.34"> @@ -2087,7 +2079,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r9.1.1">C.4.34 Section 9.1.1 The viewport</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.34.#q228"> + <tbody id="sC.4.34.#q21.228"> <!-- 0 tests --> </tbody> <tbody id="sC.4.35"> @@ -2096,7 +2088,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r9.2.4">C.4.35 Section 9.2.4 The 'display' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.35.#q229"> + <tbody id="sC.4.35.#q21.229"> <!-- 0 tests --> </tbody> <tbody id="sC.4.36"> @@ -2105,7 +2097,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r9.3.1">C.4.36 Section 9.3.1 Choosing a positioning scheme</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.36.#q230"> + <tbody id="sC.4.36.#q21.230"> <!-- 0 tests --> </tbody> <tbody id="sC.4.37"> @@ -2114,7 +2106,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r9.3.2">C.4.37 Section 9.3.2 Box offsets</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.37.#q231"> + <tbody id="sC.4.37.#q21.231"> <!-- 0 tests --> </tbody> <tbody id="sC.4.38"> @@ -2123,7 +2115,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r9.4.2">C.4.38 Section 9.4.2 Inline formatting context</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.38.#q232"> + <tbody id="sC.4.38.#q21.232"> <!-- 0 tests --> </tbody> <tbody id="sC.4.39"> @@ -2132,7 +2124,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r9.4.3">C.4.39 Section 9.4.3 Relative positioning</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.39.#q233"> + <tbody id="sC.4.39.#q21.233"> <!-- 0 tests --> </tbody> <tbody id="sC.4.40"> @@ -2141,7 +2133,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r9.5">C.4.40 Section 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.40.#q234"> + <tbody id="sC.4.40.#q21.234"> <!-- 0 tests --> </tbody> <tbody id="sC.4.41"> @@ -2150,7 +2142,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r9.5.1">C.4.41 Section 9.5.1 Positioning the float</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.41.#q235"> + <tbody id="sC.4.41.#q21.235"> <!-- 0 tests --> </tbody> <tbody id="sC.4.42"> @@ -2159,7 +2151,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r9.5.2">C.4.42 Section 9.5.2 Controlling flow next to floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.42.#q236"> + <tbody id="sC.4.42.#q21.236"> <!-- 0 tests --> </tbody> <tbody id="sC.4.43"> @@ -2168,7 +2160,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r9.8">C.4.43 Section 9.8 Comparison of normal flow, floats, and absolute positioning</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.43.#q237"> + <tbody id="sC.4.43.#q21.237"> <!-- 0 tests --> </tbody> <tbody id="sC.4.44"> @@ -2177,7 +2169,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r10.1">C.4.44 Section 10.1 Definition of "containing block"</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.44.#q238"> + <tbody id="sC.4.44.#q21.238"> <!-- 0 tests --> </tbody> <tbody id="sC.4.45"> @@ -2186,7 +2178,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r10.2">C.4.45 Section 10.2 Content width</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.45.#q239"> + <tbody id="sC.4.45.#q21.239"> <!-- 0 tests --> </tbody> <tbody id="sC.4.46"> @@ -2195,7 +2187,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r10.3.3">C.4.46 Section 10.3.3 Block-level, non-replaced elements in normal flow</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.46.#q240"> + <tbody id="sC.4.46.#q21.240"> <!-- 0 tests --> </tbody> <tbody id="sC.4.47"> @@ -2204,7 +2196,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r10.3.8">C.4.47 Section 10.3.8 Absolutely positioning, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.47.#q241"> + <tbody id="sC.4.47.#q21.241"> <!-- 0 tests --> </tbody> <tbody id="sC.4.48"> @@ -2213,7 +2205,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r10.4">C.4.48 Section 10.4 Minimum and maximum widths</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.48.#q242"> + <tbody id="sC.4.48.#q21.242"> <!-- 0 tests --> </tbody> <tbody id="sC.4.49"> @@ -2222,7 +2214,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r10.6.1">C.4.49 Section 10.6 Calculating heights and margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.49.#q243"> + <tbody id="sC.4.49.#q21.243"> <!-- 0 tests --> </tbody> <tbody id="sC.4.50"> @@ -2231,7 +2223,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r10.7">C.4.50 Section 10.7 Minimum and maximum heights</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.50.#q244"> + <tbody id="sC.4.50.#q21.244"> <!-- 0 tests --> </tbody> <tbody id="sC.4.51"> @@ -2240,7 +2232,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r10.8">C.4.51 Section 10.8 Line height calculations</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.51.#q245"> + <tbody id="sC.4.51.#q21.245"> <!-- 0 tests --> </tbody> <tbody id="sC.4.52"> @@ -2249,7 +2241,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r10.8.1">C.4.52 Section 10.8.1 Leading and half-leading</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.52.#q246"> + <tbody id="sC.4.52.#q21.246"> <!-- 0 tests --> </tbody> <tbody id="sC.4.53"> @@ -2258,7 +2250,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r11.1">C.4.53 Section 11.1 Overflow and clipping</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.53.#q247"> + <tbody id="sC.4.53.#q21.247"> <!-- 0 tests --> </tbody> <tbody id="sC.4.54"> @@ -2267,7 +2259,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r11.1.1">C.4.54 Section 11.1.1 Overflow</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.54.#q248"> + <tbody id="sC.4.54.#q21.248"> <!-- 0 tests --> </tbody> <tbody id="sC.4.55"> @@ -2276,7 +2268,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r11.1.2">C.4.55 Section 11.1.2 Clipping</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.55.#q249"> + <tbody id="sC.4.55.#q21.249"> <!-- 0 tests --> </tbody> <tbody id="sC.4.56"> @@ -2285,19 +2277,8 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r11.2">C.4.56 Section 11.2 Visibility</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.56.#q250"> - <!-- 1 tests --> - <tr id="visibility-005-C.4.56.#q250" class="ahem"> - <td> - <a href="visibility-005.xht">visibility-005</a></td> - <td><a href="reference/ref-filled-green-100px-square.xht">=</a> </td> - <td><abbr class="ahem" title="Requires Ahem font">Ahem</abbr></td> - <td>visibility - descendants of a 'visibility: hidden' element - <ul class="assert"> - <li>Descendants of a 'visibility: hidden' element will be visible if they have 'visibility: visible'</li> - </ul> - </td> - </tr> + <tbody id="sC.4.56.#q21.250"> + <!-- 0 tests --> </tbody> <tbody id="sC.4.57"> <tr><th colspan="4" scope="rowgroup"> @@ -2305,7 +2286,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r12.1">C.4.57 Section 12.1 The :before and :after pseudo-elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.57.#q251"> + <tbody id="sC.4.57.#q21.251"> <!-- 0 tests --> </tbody> <tbody id="sC.4.58"> @@ -2314,7 +2295,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r12.2">C.4.58 Section 12.2 The 'content' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.58.#q252"> + <tbody id="sC.4.58.#q21.252"> <!-- 0 tests --> </tbody> <tbody id="sC.4.59"> @@ -2323,7 +2304,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r12.3.2">C.4.59 Section 12.3.2 Inserting quotes with the 'content' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.59.#q253"> + <tbody id="sC.4.59.#q21.253"> <!-- 0 tests --> </tbody> <tbody id="sC.4.60"> @@ -2332,7 +2313,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r12.4">C.4.60 Section 12.4 Automatic counters and numbering</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.60.#q254"> + <tbody id="sC.4.60.#q21.254"> <!-- 0 tests --> </tbody> <tbody id="sC.4.61"> @@ -2341,7 +2322,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r12.4.3">C.4.61 Section 12.4.3 Counters in elements with 'display: none'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.61.#q255"> + <tbody id="sC.4.61.#q21.255"> <!-- 0 tests --> </tbody> <tbody id="sC.4.62"> @@ -2350,7 +2331,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r14.2">C.4.62 Section 14.2 The background</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.62.#q256"> + <tbody id="sC.4.62.#q21.256"> <!-- 0 tests --> </tbody> <tbody id="sC.4.63"> @@ -2359,7 +2340,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r15.1">C.4.63 Section 15.1 Fonts Introduction</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.63.#q257"> + <tbody id="sC.4.63.#q21.257"> <!-- 0 tests --> </tbody> <tbody id="sC.4.64"> @@ -2368,7 +2349,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r15.2">C.4.64 Section 15.2 Font matching algorithm</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.64.#q258"> + <tbody id="sC.4.64.#q21.258"> <!-- 0 tests --> </tbody> <tbody id="sC.4.65"> @@ -2377,7 +2358,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r15.3">C.4.65 Section 15.2.2 Font family</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.65.#q259"> + <tbody id="sC.4.65.#q21.259"> <!-- 0 tests --> </tbody> <tbody id="sC.4.66"> @@ -2386,7 +2367,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r15.3.1">C.4.66 Section 15.3.1 Generic font families</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.66.#q260"> + <tbody id="sC.4.66.#q21.260"> <!-- 0 tests --> </tbody> <tbody id="sC.4.67"> @@ -2395,7 +2376,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r15.4">C.4.67 Section 15.4 Font styling</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.67.#q261"> + <tbody id="sC.4.67.#q21.261"> <!-- 0 tests --> </tbody> <tbody id="sC.4.68"> @@ -2404,7 +2385,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r15.5">C.4.68 Section 15.5 Small-caps</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.68.#q262"> + <tbody id="sC.4.68.#q21.262"> <!-- 0 tests --> </tbody> <tbody id="sC.4.69"> @@ -2413,7 +2394,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r15.6">C.4.69 Section 15.6 Font boldness</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.69.#q263"> + <tbody id="sC.4.69.#q21.263"> <!-- 0 tests --> </tbody> <tbody id="sC.4.70"> @@ -2422,7 +2403,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r15.7">C.4.70 Section 15.7 Font size</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.70.#q264"> + <tbody id="sC.4.70.#q21.264"> <!-- 0 tests --> </tbody> <tbody id="sC.4.71"> @@ -2431,7 +2412,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r16.1">C.4.71 Section 16.1 Indentation</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.71.#q265"> + <tbody id="sC.4.71.#q21.265"> <!-- 0 tests --> </tbody> <tbody id="sC.4.72"> @@ -2440,7 +2421,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r16.2">C.4.72 Section 16.2 Alignment</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.72.#q266"> + <tbody id="sC.4.72.#q21.266"> <!-- 0 tests --> </tbody> <tbody id="sC.4.73"> @@ -2449,7 +2430,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r16.3.1">C.4.73 Section 16.3.1 Underlining, over lining, striking, and blinking</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.73.#q267"> + <tbody id="sC.4.73.#q21.267"> <!-- 0 tests --> </tbody> <tbody id="sC.4.74"> @@ -2458,7 +2439,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r16.5">C.4.74 Section 16.5 Capitalization</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.74.#q268"> + <tbody id="sC.4.74.#q21.268"> <!-- 0 tests --> </tbody> <tbody id="sC.4.75"> @@ -2467,7 +2448,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r16.6">C.4.75 Section 16.6 White space</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.75.#q269"> + <tbody id="sC.4.75.#q21.269"> <!-- 0 tests --> </tbody> <tbody id="sC.4.76"> @@ -2476,7 +2457,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.1">C.4.76 Section 17.1 Introduction to tables</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.76.#q270"> + <tbody id="sC.4.76.#q21.270"> <!-- 0 tests --> </tbody> <tbody id="sC.4.77"> @@ -2485,7 +2466,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.2">C.4.77 Section 17.2 The CSS table model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.77.#q271"> + <tbody id="sC.4.77.#q21.271"> <!-- 0 tests --> </tbody> <tbody id="sC.4.78"> @@ -2494,7 +2475,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.2.1">C.4.78 Section 17.2.1 Anonymous table objects</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.78.#q272"> + <tbody id="sC.4.78.#q21.272"> <!-- 0 tests --> </tbody> <tbody id="sC.4.79"> @@ -2503,7 +2484,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.4">C.4.79 Section 17.4 Tables in the visual formatting model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.79.#q273"> + <tbody id="sC.4.79.#q21.273"> <!-- 0 tests --> </tbody> <tbody id="sC.4.80"> @@ -2512,7 +2493,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.5">C.4.80 Section 17.5 Visual layout of table contents</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.80.#q274"> + <tbody id="sC.4.80.#q21.274"> <!-- 0 tests --> </tbody> <tbody id="sC.4.81"> @@ -2521,7 +2502,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.5.1">C.4.81 Section 17.5.1 Table layers and transparency</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.81.#q275"> + <tbody id="sC.4.81.#q21.275"> <!-- 0 tests --> </tbody> <tbody id="sC.4.82"> @@ -2530,7 +2511,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.5.2">C.4.82 Section 17.5.2 Table width algorithms</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.82.#q276"> + <tbody id="sC.4.82.#q21.276"> <!-- 0 tests --> </tbody> <tbody id="sC.4.83"> @@ -2539,7 +2520,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.5.2.1">C.4.83 Section 17.5.2.1 Fixed table layout</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.83.#q277"> + <tbody id="sC.4.83.#q21.277"> <!-- 0 tests --> </tbody> <tbody id="sC.4.84"> @@ -2548,7 +2529,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.5.2.2">C.4.84 Section 17.5.2.2 Automatic table layout</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.84.#q278"> + <tbody id="sC.4.84.#q21.278"> <!-- 0 tests --> </tbody> <tbody id="sC.4.85"> @@ -2557,7 +2538,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.5.4">C.4.85 Section 17.5.4 Horizontal alignment in a column</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.85.#q279"> + <tbody id="sC.4.85.#q21.279"> <!-- 0 tests --> </tbody> <tbody id="sC.4.86"> @@ -2566,7 +2547,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.5.5">C.4.86 Section 17.5.5 Dynamic row and column effects</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.86.#q280"> + <tbody id="sC.4.86.#q21.280"> <!-- 0 tests --> </tbody> <tbody id="sC.4.87"> @@ -2575,7 +2556,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.6.1">C.4.87 Section 17.6.1 The separated borders model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.87.#q281"> + <tbody id="sC.4.87.#q21.281"> <!-- 0 tests --> </tbody> <tbody id="sC.4.88"> @@ -2584,7 +2565,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r17.6.2">C.4.88 Section 17.6.2 The collapsing borders model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.88.#q282"> + <tbody id="sC.4.88.#q21.282"> <!-- 0 tests --> </tbody> <tbody id="sC.4.89"> @@ -2593,7 +2574,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r18.2">C.4.89 Section 18.2 System Colors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.89.#q283"> + <tbody id="sC.4.89.#q21.283"> <!-- 0 tests --> </tbody> <tbody id="sC.4.90"> @@ -2602,7 +2583,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r18.4">C.4.90 Section 18.4 Dynamic outlines</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.90.#q284"> + <tbody id="sC.4.90.#q21.284"> <!-- 0 tests --> </tbody> <tbody id="sC.4.91"> @@ -2611,7 +2592,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#r18.4.1">C.4.91 Section 18.4.1 Outlines and the focus</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.91.#q285"> + <tbody id="sC.4.91.#q21.285"> <!-- 0 tests --> </tbody> <tbody id="sC.4.92"> @@ -2620,7 +2601,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#rD">C.4.92 Appendix D Default style sheet for HTML 4</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.4.92.#q286"> + <tbody id="sC.4.92.#q21.286"> <!-- 0 tests --> </tbody> <tbody id="sC.5"> @@ -2635,7 +2616,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.1.4.2.1">C.5.1 Section 1.4.2.1 Value</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.1.#q288"> + <tbody id="sC.5.1.#q21.288"> <!-- 0 tests --> </tbody> <tbody id="sC.5.2"> @@ -2644,7 +2625,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.2.3">C.5.2 Section 2.3 The CSS 2.1 processing model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.2.#q289"> + <tbody id="sC.5.2.#q21.289"> <!-- 0 tests --> </tbody> <tbody id="sC.5.3"> @@ -2653,7 +2634,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.3.1">C.5.3 Section 3.1 Definitions</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.3.#q290"> + <tbody id="sC.5.3.#q21.290"> <!-- 0 tests --> </tbody> <tbody id="sC.5.4"> @@ -2662,7 +2643,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.1.1">C.5.4 Section 4.1.1 Tokenization</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.4.#q291"> + <tbody id="sC.5.4.#q21.291"> <!-- 0 tests --> </tbody> <tbody id="sC.5.5"> @@ -2671,7 +2652,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.1.2.2">C.5.5 Section 4.1.2.2 Informative Historical Notes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.5.#q292"> + <tbody id="sC.5.5.#q21.292"> <!-- 0 tests --> </tbody> <tbody id="sC.5.6"> @@ -2680,7 +2661,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.1.3">C.5.6 Section 4.1.3 Characters and case</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.6.#q293"> + <tbody id="sC.5.6.#q21.293"> <!-- 0 tests --> </tbody> <tbody id="sC.5.7"> @@ -2689,7 +2670,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.1.3a">C.5.7 Section 4.1.3 Characters and case</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.7.#q294"> + <tbody id="sC.5.7.#q21.294"> <!-- 0 tests --> </tbody> <tbody id="sC.5.8"> @@ -2698,7 +2679,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.1.3b">C.5.8 Section 4.1.3 Characters and case</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.8.#q295"> + <tbody id="sC.5.8.#q21.295"> <!-- 0 tests --> </tbody> <tbody id="sC.5.9"> @@ -2707,7 +2688,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.1.3c">C.5.9 Section 4.1.3 Characters and case</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.9.#q296"> + <tbody id="sC.5.9.#q21.296"> <!-- 0 tests --> </tbody> <tbody id="sC.5.10"> @@ -2716,7 +2697,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.1.5">C.5.10 Section 4.1.5 At-rules</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.10.#q297"> + <tbody id="sC.5.10.#q21.297"> <!-- 0 tests --> </tbody> <tbody id="sC.5.11"> @@ -2725,7 +2706,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.1.7">C.5.11 Section 4.1.7 Rule sets, declaration blocks, and selectors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.11.#q298"> + <tbody id="sC.5.11.#q21.298"> <!-- 0 tests --> </tbody> <tbody id="sC.5.12"> @@ -2734,7 +2715,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.2">C.5.12 Section 4.2 Rules for handling parsing errors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.12.#q299"> + <tbody id="sC.5.12.#q21.299"> <!-- 0 tests --> </tbody> <tbody id="sC.5.13"> @@ -2743,7 +2724,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.2a">C.5.13 Section 4.2 Rules for handling parsing errors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.13.#q300"> + <tbody id="sC.5.13.#q21.300"> <!-- 0 tests --> </tbody> <tbody id="sC.5.14"> @@ -2752,7 +2733,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.3.2">C.5.14 Section 4.3.2 Lengths</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.14.#q301"> + <tbody id="sC.5.14.#q21.301"> <!-- 0 tests --> </tbody> <tbody id="sC.5.15"> @@ -2761,7 +2742,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.3.5">C.5.15 Section 4.3.5 Counters</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.15.#q302"> + <tbody id="sC.5.15.#q21.302"> <!-- 0 tests --> </tbody> <tbody id="sC.5.16"> @@ -2770,7 +2751,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.5.8.1">C.5.16 Section 5.8.1 Matching attributes and attribute values</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.16.#q303"> + <tbody id="sC.5.16.#q21.303"> <!-- 0 tests --> </tbody> <tbody id="sC.5.17"> @@ -2779,7 +2760,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.5.8.2">C.5.17 Section 5.8.2 Default attribute values in DTDs</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.17.#q304"> + <tbody id="sC.5.17.#q21.304"> <!-- 0 tests --> </tbody> <tbody id="sC.5.18"> @@ -2788,7 +2769,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.5.11.4">C.5.18 Section 5.11.4 The language pseudo-class: :lang</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.18.#q305"> + <tbody id="sC.5.18.#q21.305"> <!-- 0 tests --> </tbody> <tbody id="sC.5.19"> @@ -2797,7 +2778,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.5.12.3">C.5.19 Section 5.12.3 The :before and :after pseudo-elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.19.#q306"> + <tbody id="sC.5.19.#q21.306"> <!-- 0 tests --> </tbody> <tbody id="sC.5.20"> @@ -2806,7 +2787,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.6.3">C.5.20 Section 6.3 The @import rule</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.20.#q307"> + <tbody id="sC.5.20.#q21.307"> <!-- 0 tests --> </tbody> <tbody id="sC.5.21"> @@ -2815,7 +2796,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.6.3a">C.5.21 Section 6.3 The @import rule</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.21.#q308"> + <tbody id="sC.5.21.#q21.308"> <!-- 0 tests --> </tbody> <tbody id="sC.5.22"> @@ -2824,7 +2805,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.6.4.1">C.5.22 Section 6.4.1 Cascading order</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.22.#q309"> + <tbody id="sC.5.22.#q21.309"> <!-- 0 tests --> </tbody> <tbody id="sC.5.23"> @@ -2833,7 +2814,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.6.4.1a">C.5.23 Section 6.4.1 Cascading order</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.23.#q310"> + <tbody id="sC.5.23.#q21.310"> <!-- 0 tests --> </tbody> <tbody id="sC.5.24"> @@ -2842,7 +2823,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.7.2.1">C.5.24 Section 7.2.1 The @media rule</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.24.#q311"> + <tbody id="sC.5.24.#q21.311"> <!-- 0 tests --> </tbody> <tbody id="sC.5.25"> @@ -2851,7 +2832,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.8.3.1">C.5.25 Section 8.3.1 Collapsing margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.25.#q312"> + <tbody id="sC.5.25.#q21.312"> <!-- 0 tests --> </tbody> <tbody id="sC.5.26"> @@ -2860,30 +2841,8 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.8.3.1a">C.5.26 Section 8.3.1 Collapsing margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.26.#q313"> - <!-- 2 tests --> - <tr id="margin-collapse-037-C.5.26.#q313" class=""> - <td> - <a href="margin-collapse-037.xht">margin-collapse-037</a></td> - <td><a href="reference/margin-collapse-037-ref.xht">=</a> </td> - <td></td> - <td>Collapsing margins - margin-bottom of the last in-flow child block collapsing with its parent min-height block's bottom margin - <ul class="assert"> - <li>The 'min-height' of a parent block element should have no influence over whether such parent block element's bottom margin is adjoining to its last child's bottom margin. In such situation, the bottom margin of the parent block element and the bottom margin of its last child should collapse as long as such parent block element has no bottom padding and has no bottom border.</li> - </ul> - </td> - </tr> - <tr id="margin-collapse-038-C.5.26.#q313" class=""> - <td> - <a href="margin-collapse-038.xht">margin-collapse-038</a></td> - <td><a href="reference/margin-collapse-038-ref.xht">=</a> </td> - <td></td> - <td>Collapsing margins - margin-bottom of the last in-flow child block collapsing with its max-height parent block's bottom margin - <ul class="assert"> - <li>The 'max-height' of a parent block element should have no influence over whether such parent block element's bottom margin is adjoining to its last child's bottom margin. In such situation, the bottom margin of the parent block element and the bottom margin of its last child should collapse as long as such parent block element has no bottom padding and has no bottom border.</li> - </ul> - </td> - </tr> + <tbody id="sC.5.26.#q21.313"> + <!-- 0 tests --> </tbody> <tbody id="sC.5.27"> <tr><th colspan="4" scope="rowgroup"> @@ -2891,7 +2850,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.8.3.1b">C.5.27 Section 8.3.1 Collapsing margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.27.#q314"> + <tbody id="sC.5.27.#q21.314"> <!-- 0 tests --> </tbody> <tbody id="sC.5.28"> @@ -2900,7 +2859,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.9.2.2">C.5.28 Section 9.2.2 Inline-level elements and inline boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.28.#q315"> + <tbody id="sC.5.28.#q21.315"> <!-- 0 tests --> </tbody> <tbody id="sC.5.29"> @@ -2909,7 +2868,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.9.2.4">C.5.29 Section 9.2.4 The 'display' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.29.#q316"> + <tbody id="sC.5.29.#q21.316"> <!-- 0 tests --> </tbody> <tbody id="sC.5.30"> @@ -2918,7 +2877,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.9.3.2">C.5.30 Section 9.3.2 Box offsets: 'top', 'right', 'bottom', 'left'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.30.#q317"> + <tbody id="sC.5.30.#q21.317"> <!-- 0 tests --> </tbody> <tbody id="sC.5.31"> @@ -2927,7 +2886,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.9.5">C.5.31 Section 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.31.#q318"> + <tbody id="sC.5.31.#q21.318"> <!-- 0 tests --> </tbody> <tbody id="sC.5.32"> @@ -2936,7 +2895,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.9.5a">C.5.32 Section 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.32.#q319"> + <tbody id="sC.5.32.#q21.319"> <!-- 0 tests --> </tbody> <tbody id="sC.5.33"> @@ -2945,7 +2904,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.9.5.2">C.5.33 Section 9.5.2 Controlling flow next to floats: the 'clear' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.33.#q320"> + <tbody id="sC.5.33.#q21.320"> <!-- 0 tests --> </tbody> <tbody id="sC.5.34"> @@ -2954,7 +2913,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.9.6.1">C.5.34 Section 9.6.1 Fixed positioning</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.34.#q321"> + <tbody id="sC.5.34.#q21.321"> <!-- 0 tests --> </tbody> <tbody id="sC.5.35"> @@ -2963,7 +2922,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.9.9.1">C.5.35 Section 9.9.1 Specifying the stack level: the 'z-index' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.35.#q322"> + <tbody id="sC.5.35.#q21.322"> <!-- 0 tests --> </tbody> <tbody id="sC.5.36"> @@ -2972,7 +2931,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.1">C.5.36 Section 10.1 Definition of "containing block"</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.36.#q323"> + <tbody id="sC.5.36.#q21.323"> <!-- 0 tests --> </tbody> <tbody id="sC.5.37"> @@ -2981,7 +2940,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.3">C.5.37 Section 10.3 Calculating widths and margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.37.#q324"> + <tbody id="sC.5.37.#q21.324"> <!-- 0 tests --> </tbody> <tbody id="sC.5.38"> @@ -2990,7 +2949,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.3.1">C.5.38 Section 10.3.1 Inline, non-replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.38.#q325"> + <tbody id="sC.5.38.#q21.325"> <!-- 0 tests --> </tbody> <tbody id="sC.5.39"> @@ -2999,7 +2958,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.3.2">C.5.39 Section 10.3.2 Inline, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.39.#q326"> + <tbody id="sC.5.39.#q21.326"> <!-- 0 tests --> </tbody> <tbody id="sC.5.40"> @@ -3008,7 +2967,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.3.2a">C.5.40 Section 10.3.2 Inline, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.40.#q327"> + <tbody id="sC.5.40.#q21.327"> <!-- 0 tests --> </tbody> <tbody id="sC.5.41"> @@ -3017,7 +2976,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.3.3">C.5.41 Section 10.3.3 Block-level, non-replaced elements in normal flow</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.41.#q328"> + <tbody id="sC.5.41.#q21.328"> <!-- 0 tests --> </tbody> <tbody id="sC.5.42"> @@ -3026,7 +2985,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.3.7">C.5.42 Section 10.3.7 Absolutely positioned, non-replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.42.#q329"> + <tbody id="sC.5.42.#q21.329"> <!-- 0 tests --> </tbody> <tbody id="sC.5.43"> @@ -3035,7 +2994,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.3.7a">C.5.43 Section 10.3.7 Absolutely positioned, non-replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.43.#q330"> + <tbody id="sC.5.43.#q21.330"> <!-- 0 tests --> </tbody> <tbody id="sC.5.44"> @@ -3044,7 +3003,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.3.8">C.5.44 Section 10.3.8 Absolutely positioned, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.44.#q331"> + <tbody id="sC.5.44.#q21.331"> <!-- 0 tests --> </tbody> <tbody id="sC.5.45"> @@ -3053,7 +3012,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.3.8a">C.5.45 Section 10.3.8 Absolutely positioned, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.45.#q332"> + <tbody id="sC.5.45.#q21.332"> <!-- 0 tests --> </tbody> <tbody id="sC.5.46"> @@ -3062,7 +3021,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.3.8c">C.5.46 Section 10.3.8 Absolutely positioned, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.46.#q333"> + <tbody id="sC.5.46.#q21.333"> <!-- 0 tests --> </tbody> <tbody id="sC.5.47"> @@ -3071,7 +3030,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.5">C.5.47 Section 10.5 Content height: the 'height' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.47.#q334"> + <tbody id="sC.5.47.#q21.334"> <!-- 0 tests --> </tbody> <tbody id="sC.5.48"> @@ -3080,7 +3039,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.6.2">C.5.48 Section 10.6.2 Inline replaced elements […]</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.48.#q335"> + <tbody id="sC.5.48.#q21.335"> <!-- 0 tests --> </tbody> <tbody id="sC.5.49"> @@ -3089,7 +3048,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.6.4">C.5.49 Section 10.6.4 Absolutely positioned, non-replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.49.#q336"> + <tbody id="sC.5.49.#q21.336"> <!-- 0 tests --> </tbody> <tbody id="sC.5.50"> @@ -3098,7 +3057,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.6.5">C.5.50 Section 10.6.5 Absolutely positioned, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.50.#q337"> + <tbody id="sC.5.50.#q21.337"> <!-- 0 tests --> </tbody> <tbody id="sC.5.51"> @@ -3107,7 +3066,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.10.8.1">C.5.51 Section 10.8.1 Leading and half-leading</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.51.#q338"> + <tbody id="sC.5.51.#q21.338"> <!-- 0 tests --> </tbody> <tbody id="sC.5.52"> @@ -3116,7 +3075,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.11.1.1">C.5.52 Section 11.1.1 Overflow: the 'overflow' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.52.#q339"> + <tbody id="sC.5.52.#q21.339"> <!-- 0 tests --> </tbody> <tbody id="sC.5.53"> @@ -3125,7 +3084,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.11.1.2">C.5.53 Section 11.1.2 Clipping: the 'clip' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.53.#q340"> + <tbody id="sC.5.53.#q21.340"> <!-- 0 tests --> </tbody> <tbody id="sC.5.54"> @@ -3134,7 +3093,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.12.2">C.5.54 Section 12.2 The 'content' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.54.#q341"> + <tbody id="sC.5.54.#q21.341"> <!-- 0 tests --> </tbody> <tbody id="sC.5.55"> @@ -3143,7 +3102,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.12.4.2">C.5.55 Section 12.4.2 Counter styles</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.55.#q342"> + <tbody id="sC.5.55.#q21.342"> <!-- 0 tests --> </tbody> <tbody id="sC.5.56"> @@ -3152,7 +3111,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.12.5">C.5.56 Section 12.5 Lists</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.56.#q343"> + <tbody id="sC.5.56.#q21.343"> <!-- 0 tests --> </tbody> <tbody id="sC.5.57"> @@ -3161,7 +3120,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.12.5.1">C.5.57 Section 12.5.1 Lists: the 'list-style-type', 'list-style-image', 'list-style-position', and 'list-style' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.57.#q344"> + <tbody id="sC.5.57.#q21.344"> <!-- 0 tests --> </tbody> <tbody id="sC.5.58"> @@ -3170,7 +3129,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.12.5.1a">C.5.58 Section 12.5.1 Lists: the 'list-style-type', 'list-style-image', 'list-style-position', and 'list-style' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.58.#q345"> + <tbody id="sC.5.58.#q21.345"> <!-- 0 tests --> </tbody> <tbody id="sC.5.59"> @@ -3179,7 +3138,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.12.5.1b">C.5.59 Section 12.5.1 Lists: the 'list-style-type', 'list-style-image', 'list-style-position', and 'list-style' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.59.#q346"> + <tbody id="sC.5.59.#q21.346"> <!-- 0 tests --> </tbody> <tbody id="sC.5.60"> @@ -3188,7 +3147,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.2">C.5.60 Section 13.2 Page boxes: the @page rule</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.60.#q347"> + <tbody id="sC.5.60.#q21.347"> <!-- 0 tests --> </tbody> <tbody id="sC.5.61"> @@ -3197,7 +3156,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.2.1.1">C.5.61 Section 13.2.1.1 Rendering page boxes that do not fit a target sheet</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.61.#q348"> + <tbody id="sC.5.61.#q21.348"> <!-- 0 tests --> </tbody> <tbody id="sC.5.62"> @@ -3206,7 +3165,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.2.3">C.5.62 Section 13.2.3 Content outside the page box</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.62.#q349"> + <tbody id="sC.5.62.#q21.349"> <!-- 0 tests --> </tbody> <tbody id="sC.5.63"> @@ -3215,7 +3174,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.3.1">C.5.63 Section 13.3.1 Page break properties: 'page-break-before', 'page-break-after', 'page-break-inside'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.63.#q350"> + <tbody id="sC.5.63.#q21.350"> <!-- 0 tests --> </tbody> <tbody id="sC.5.64"> @@ -3224,7 +3183,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.3.1a">C.5.64 Section 13.3.1 Page break properties: 'page-break-before', 'page-break-after', 'page-break-inside'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.64.#q351"> + <tbody id="sC.5.64.#q21.351"> <!-- 0 tests --> </tbody> <tbody id="sC.5.65"> @@ -3233,7 +3192,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.3.2">C.5.65 Section 13.3.2 Breaks inside elements: 'orphans', 'widows'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.65.#q352"> + <tbody id="sC.5.65.#q21.352"> <!-- 0 tests --> </tbody> <tbody id="sC.5.66"> @@ -3242,7 +3201,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.3.2a">C.5.66 Section 13.3.2 Breaks inside elements: 'orphans', 'widows'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.66.#q353"> + <tbody id="sC.5.66.#q21.353"> <!-- 0 tests --> </tbody> <tbody id="sC.5.67"> @@ -3251,7 +3210,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.3.3">C.5.67 Section 13.3.3 Allowed page breaks</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.67.#q354"> + <tbody id="sC.5.67.#q21.354"> <!-- 0 tests --> </tbody> <tbody id="sC.5.68"> @@ -3260,7 +3219,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.3.3a">C.5.68 Section 13.3.3 Allowed page breaks</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.68.#q355"> + <tbody id="sC.5.68.#q21.355"> <!-- 0 tests --> </tbody> <tbody id="sC.5.69"> @@ -3269,7 +3228,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.3.3b">C.5.69 Section 13.3.3 Allowed page breaks</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.69.#q356"> + <tbody id="sC.5.69.#q21.356"> <!-- 0 tests --> </tbody> <tbody id="sC.5.70"> @@ -3278,7 +3237,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.3.5">C.5.70 Section 13.3.5 "Best" page breaks</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.70.#q357"> + <tbody id="sC.5.70.#q21.357"> <!-- 0 tests --> </tbody> <tbody id="sC.5.71"> @@ -3287,7 +3246,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.14.2">C.5.71 Section 14.2 The background</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.71.#q358"> + <tbody id="sC.5.71.#q21.358"> <!-- 0 tests --> </tbody> <tbody id="sC.5.72"> @@ -3296,7 +3255,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.14.2a">C.5.72 Section 14.2 The background</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.72.#q359"> + <tbody id="sC.5.72.#q21.359"> <!-- 0 tests --> </tbody> <tbody id="sC.5.73"> @@ -3305,7 +3264,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.14.2.1a">C.5.73 Section 14.2.1 Background properties: 'background-color', 'background-image', 'background-repeat', 'background-attachment', 'background-position', and 'background'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.73.#q360"> + <tbody id="sC.5.73.#q21.360"> <!-- 0 tests --> </tbody> <tbody id="sC.5.74"> @@ -3314,7 +3273,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.15.6">C.5.74 Section 15.6 Font boldness: the 'font-weight' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.74.#q361"> + <tbody id="sC.5.74.#q21.361"> <!-- 0 tests --> </tbody> <tbody id="sC.5.75"> @@ -3323,7 +3282,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.16.6">C.5.75 Section 16.6 Whitespace: the 'white-space' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.75.#q362"> + <tbody id="sC.5.75.#q21.362"> <!-- 0 tests --> </tbody> <tbody id="sC.5.76"> @@ -3332,19 +3291,8 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.16.6.1">C.5.76 Section 16.6.1 The 'white-space' processing model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.76.#q363"> - <!-- 1 tests --> - <tr id="white-space-007-C.5.76.#q363" class="ahem"> - <td> - <a href="white-space-007.xht">white-space-007</a></td> - <td></td> - <td><abbr class="ahem" title="Requires Ahem font">Ahem</abbr></td> - <td>white-space - <ul class="assert"> - <li>'white-space: normal' and 'white-space: nowrap' should collapse sequences of white space. Regarding wrapping, line breaking opportunities are determined on the text prior to white space collapsing steps.</li> - </ul> - </td> - </tr> + <tbody id="sC.5.76.#q21.363"> + <!-- 0 tests --> </tbody> <tbody id="sC.5.77"> <tr><th colspan="4" scope="rowgroup"> @@ -3352,7 +3300,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.17.2.1">C.5.77 Section 17.2.1 Anonymous table objects</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.77.#q364"> + <tbody id="sC.5.77.#q21.364"> <!-- 0 tests --> </tbody> <tbody id="sC.5.78"> @@ -3361,7 +3309,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.17.2.1a">C.5.78 Section 17.2.1 Anonymous table objects</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.78.#q365"> + <tbody id="sC.5.78.#q21.365"> <!-- 0 tests --> </tbody> <tbody id="sC.5.79"> @@ -3370,7 +3318,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.17.4">C.5.79 Section 17.4 Tables in the visual formatting model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.79.#q366"> + <tbody id="sC.5.79.#q21.366"> <!-- 0 tests --> </tbody> <tbody id="sC.5.80"> @@ -3379,7 +3327,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.17.5.4a">C.5.80 Section 17.5.4 Horizontal alignment in a column</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.80.#q367"> + <tbody id="sC.5.80.#q21.367"> <!-- 0 tests --> </tbody> <tbody id="sC.5.81"> @@ -3388,7 +3336,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.18.1">C.5.81 Section 18.1 Cursors: the 'cursor' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.81.#q368"> + <tbody id="sC.5.81.#q21.368"> <!-- 0 tests --> </tbody> <tbody id="sC.5.82"> @@ -3397,7 +3345,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.B.2">C.5.82 Section B.2 Informative references</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.82.#q369"> + <tbody id="sC.5.82.#q21.369"> <!-- 0 tests --> </tbody> <tbody id="sC.5.83"> @@ -3406,7 +3354,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.D">C.5.83 Appendix D. Default style sheet for HTML 4</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.83.#q370"> + <tbody id="sC.5.83.#q21.370"> <!-- 0 tests --> </tbody> <tbody id="sC.5.84"> @@ -3415,7 +3363,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.Da">C.5.84 Appendix D. Default style sheet for HTML 4</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.84.#q371"> + <tbody id="sC.5.84.#q21.371"> <!-- 0 tests --> </tbody> <tbody id="sC.5.85"> @@ -3424,7 +3372,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.E.2">C.5.85 Section E.2 Painting order</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.85.#q372"> + <tbody id="sC.5.85.#q21.372"> <!-- 0 tests --> </tbody> <tbody id="sC.5.86"> @@ -3433,7 +3381,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.G">C.5.86 Appendix G. Grammar of CSS 2.1</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.86.#q373"> + <tbody id="sC.5.86.#q21.373"> <!-- 0 tests --> </tbody> <tbody id="sC.5.87"> @@ -3442,7 +3390,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.G.1">C.5.87 Section G.1 Grammar</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.87.#q374"> + <tbody id="sC.5.87.#q21.374"> <!-- 0 tests --> </tbody> <tbody id="sC.5.88"> @@ -3451,7 +3399,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.G.2">C.5.88 Section G.2 Lexical scanner</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.88.#q375"> + <tbody id="sC.5.88.#q21.375"> <!-- 0 tests --> </tbody> <tbody id="sC.5.89"> @@ -3460,7 +3408,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.G.2a">C.5.89 Section G.2 Lexical scanner</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.89.#q376"> + <tbody id="sC.5.89.#q21.376"> <!-- 0 tests --> </tbody> <tbody id="sC.5.90"> @@ -3469,7 +3417,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.G.2b">C.5.90 Section G.2 Lexical scanner</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.90.#q377"> + <tbody id="sC.5.90.#q21.377"> <!-- 0 tests --> </tbody> <tbody id="sC.5.91"> @@ -3478,7 +3426,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.G.2c">C.5.91 Section G.2 Lexical scanner</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.91.#q378"> + <tbody id="sC.5.91.#q21.378"> <!-- 0 tests --> </tbody> <tbody id="sC.5.92"> @@ -3487,7 +3435,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.I">C.5.92 Appendix I. Index</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.5.92.#q379"> + <tbody id="sC.5.92.#q21.379"> <!-- 0 tests --> </tbody> <tbody id="sC.6"> @@ -3502,7 +3450,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.4.2b">C.6.1 Section 4.2 Rules for handling parsing errors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.6.1.#q381"> + <tbody id="sC.6.1.#q21.381"> <!-- 0 tests --> </tbody> <tbody id="sC.6.2"> @@ -3511,7 +3459,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.13.3.3c">C.6.2 Section 13.3.3 Allowed page breaks</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.6.2.#q382"> + <tbody id="sC.6.2.#q21.382"> <!-- 0 tests --> </tbody> <tbody id="sC.6.3"> @@ -3520,7 +3468,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.15.3">C.6.3 Section 15.3 Font family: the 'font-family' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.6.3.#q383"> + <tbody id="sC.6.3.#q21.383"> <!-- 0 tests --> </tbody> <tbody id="sC.6.4"> @@ -3529,7 +3477,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.15.3.1.1">C.6.4 Section 15.3.1.1 serif</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.6.4.#q384"> + <tbody id="sC.6.4.#q21.384"> <!-- 0 tests --> </tbody> <tbody id="sC.6.5"> @@ -3538,7 +3486,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.15.7">C.6.5 Section 15.7 Font size: the 'font-size' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.6.5.#q385"> + <tbody id="sC.6.5.#q21.385"> <!-- 0 tests --> </tbody> <tbody id="sC.6.6"> @@ -3547,7 +3495,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.17.5.2.1">C.6.6 Section 17.5.2.1 Fixed table layout</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.6.6.#q386"> + <tbody id="sC.6.6.#q21.386"> <!-- 0 tests --> </tbody> <tbody id="sC.6.7"> @@ -3556,7 +3504,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.17.5.3">C.6.7 Section 17.5.3 Table height layout</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.6.7.#q387"> + <tbody id="sC.6.7.#q21.387"> <!-- 0 tests --> </tbody> <tbody id="sC.6.8"> @@ -3565,7 +3513,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#s.Ga">C.6.8 Appendix G. Grammar of CSS 2.1</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.6.8.#q388"> + <tbody id="sC.6.8.#q21.388"> <!-- 0 tests --> </tbody> <tbody id="sC.7"> @@ -3580,7 +3528,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.1">C.7.1 Section 1.4.2.1 Value</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.1.#q390"> + <tbody id="sC.7.1.#q21.390"> <!-- 0 tests --> </tbody> <tbody id="sC.7.2"> @@ -3589,7 +3537,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.3.1">C.7.2 Section 3.1 Definitions</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.2.#q391"> + <tbody id="sC.7.2.#q21.391"> <!-- 0 tests --> </tbody> <tbody id="sC.7.3"> @@ -3598,7 +3546,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.1.1">C.7.3 Section 4.1.1 Tokenization</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.3.#q392"> + <tbody id="sC.7.3.#q21.392"> <!-- 0 tests --> </tbody> <tbody id="sC.7.4"> @@ -3607,7 +3555,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.1.1a">C.7.4 Section 4.1.1 Tokenization</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.4.#q393"> + <tbody id="sC.7.4.#q21.393"> <!-- 0 tests --> </tbody> <tbody id="sC.7.5"> @@ -3616,7 +3564,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.1.1b">C.7.5 Section 4.1.1 Tokenization</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.5.#q394"> + <tbody id="sC.7.5.#q21.394"> <!-- 0 tests --> </tbody> <tbody id="sC.7.6"> @@ -3625,7 +3573,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.1.1c">C.7.6 Section 4.1.1 Tokenization</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.6.#q395"> + <tbody id="sC.7.6.#q21.395"> <!-- 0 tests --> </tbody> <tbody id="sC.7.7"> @@ -3634,7 +3582,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.1.2.2">C.7.7 Section 4.1.2.2 Informative Historical Notes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.7.#q396"> + <tbody id="sC.7.7.#q21.396"> <!-- 0 tests --> </tbody> <tbody id="sC.7.8"> @@ -3643,7 +3591,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.1.3">C.7.8 Section 4.1.3 Characters and case</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.8.#q397"> + <tbody id="sC.7.8.#q21.397"> <!-- 0 tests --> </tbody> <tbody id="sC.7.9"> @@ -3652,7 +3600,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.1.3a">C.7.9 Section 4.1.3 Characters and case</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.9.#q398"> + <tbody id="sC.7.9.#q21.398"> <!-- 0 tests --> </tbody> <tbody id="sC.7.10"> @@ -3661,7 +3609,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.1.8">C.7.10 Section 4.1.8 Declarations and properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.10.#q399"> + <tbody id="sC.7.10.#q21.399"> <!-- 0 tests --> </tbody> <tbody id="sC.7.11"> @@ -3670,7 +3618,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.2">C.7.11 Section 4.2 Rules for handling parsing errors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.11.#q400"> + <tbody id="sC.7.11.#q21.400"> <!-- 0 tests --> </tbody> <tbody id="sC.7.12"> @@ -3679,7 +3627,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.3.2">C.7.12 Section 4.3.2 Lengths</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.12.#q401"> + <tbody id="sC.7.12.#q21.401"> <!-- 0 tests --> </tbody> <tbody id="sC.7.13"> @@ -3688,7 +3636,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.3.2a">C.7.13 Section 4.3.2 Lengths</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.13.#q402"> + <tbody id="sC.7.13.#q21.402"> <!-- 0 tests --> </tbody> <tbody id="sC.7.14"> @@ -3697,7 +3645,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.3.4a">C.7.14 Section 4.3.4 URLs and URIs</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.14.#q403"> + <tbody id="sC.7.14.#q21.403"> <!-- 0 tests --> </tbody> <tbody id="sC.7.15"> @@ -3706,7 +3654,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.4.3.4">C.7.15 Section 4.3.4 URLs and URIs</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.15.#q404"> + <tbody id="sC.7.15.#q21.404"> <!-- 0 tests --> </tbody> <tbody id="sC.7.16"> @@ -3715,7 +3663,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.5.8.2">C.7.16 Section 5.8.2 Default attribute values in DTDs</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.16.#q405"> + <tbody id="sC.7.16.#q21.405"> <!-- 0 tests --> </tbody> <tbody id="sC.7.17"> @@ -3724,7 +3672,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.5.11.4">C.7.17 Section 5.11.4 The language pseudo-class: :lang</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.17.#q406"> + <tbody id="sC.7.17.#q21.406"> <!-- 0 tests --> </tbody> <tbody id="sC.7.18"> @@ -3733,7 +3681,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.5.12">C.7.18 Section 5.12 Pseudo-elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.18.#q407"> + <tbody id="sC.7.18.#q21.407"> <!-- 0 tests --> </tbody> <tbody id="sC.7.19"> @@ -3742,7 +3690,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.5.12.1">C.7.19 Section 5.12.1 The :first-line pseudo-element</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.19.#q408"> + <tbody id="sC.7.19.#q21.408"> <!-- 0 tests --> </tbody> <tbody id="sC.7.20"> @@ -3751,7 +3699,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.5.12.2">C.7.20 Section 5.12.2 The :first-letter pseudo-element</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.20.#q409"> + <tbody id="sC.7.20.#q21.409"> <!-- 0 tests --> </tbody> <tbody id="sC.7.21"> @@ -3760,7 +3708,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.6.2">C.7.21 Section 6.2 Inheritance</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.21.#q410"> + <tbody id="sC.7.21.#q21.410"> <!-- 0 tests --> </tbody> <tbody id="sC.7.22"> @@ -3769,7 +3717,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.6.4.4">C.7.22 Section 6.4.4 Precedence of non-CSS presentational hints</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.22.#q411"> + <tbody id="sC.7.22.#q21.411"> <!-- 0 tests --> </tbody> <tbody id="sC.7.23"> @@ -3778,7 +3726,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.7.3">C.7.23 Section 7.3 Recognized media types</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.23.#q412"> + <tbody id="sC.7.23.#q21.412"> <!-- 0 tests --> </tbody> <tbody id="sC.7.24"> @@ -3787,7 +3735,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.8.3.1">C.7.24 Section 8.3.1 Collapsing margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.24.#q413"> + <tbody id="sC.7.24.#q21.413"> <!-- 0 tests --> </tbody> <tbody id="sC.7.25"> @@ -3796,7 +3744,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.8.3.1a">C.7.25 Section 8.3.1 Collapsing margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.25.#q414"> + <tbody id="sC.7.25.#q21.414"> <!-- 0 tests --> </tbody> <tbody id="sC.7.26"> @@ -3805,7 +3753,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.2.1">C.7.26 Section 9.2.1 Block-level elements and block boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.26.#q415"> + <tbody id="sC.7.26.#q21.415"> <!-- 0 tests --> </tbody> <tbody id="sC.7.27"> @@ -3814,7 +3762,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.2.1.1">C.7.27 Section 9.2.1.1 Anonymous block boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.27.#q416"> + <tbody id="sC.7.27.#q21.416"> <!-- 0 tests --> </tbody> <tbody id="sC.7.28"> @@ -3823,7 +3771,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.2.1.1a">C.7.28 Section 9.2.1.1 Anonymous block boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.28.#q417"> + <tbody id="sC.7.28.#q21.417"> <!-- 0 tests --> </tbody> <tbody id="sC.7.29"> @@ -3832,7 +3780,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.2.1.1b">C.7.29 Section 9.2.1.1 Anonymous block boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.29.#q418"> + <tbody id="sC.7.29.#q21.418"> <!-- 0 tests --> </tbody> <tbody id="sC.7.30"> @@ -3841,7 +3789,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.2.1.1c">C.7.30 Section 9.2.1.1 Anonymous block boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.30.#q419"> + <tbody id="sC.7.30.#q21.419"> <!-- 0 tests --> </tbody> <tbody id="sC.7.31"> @@ -3850,7 +3798,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.2.2">C.7.31 Section 9.2.2 Inline-level elements and inline boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.31.#q420"> + <tbody id="sC.7.31.#q21.420"> <!-- 0 tests --> </tbody> <tbody id="sC.7.32"> @@ -3859,7 +3807,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.2.3a">C.7.32 Section 9.2.3 Run-in boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.32.#q421"> + <tbody id="sC.7.32.#q21.421"> <!-- 0 tests --> </tbody> <tbody id="sC.7.33"> @@ -3868,7 +3816,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.2.4">C.7.33 Section 9.2.4 The 'display' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.33.#q422"> + <tbody id="sC.7.33.#q21.422"> <!-- 0 tests --> </tbody> <tbody id="sC.7.34"> @@ -3877,7 +3825,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.2.4a">C.7.34 Section 9.2.4 The 'display' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.34.#q423"> + <tbody id="sC.7.34.#q21.423"> <!-- 0 tests --> </tbody> <tbody id="sC.7.35"> @@ -3886,7 +3834,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.3">C.7.35 Section 9.3 Positioning schemes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.35.#q424"> + <tbody id="sC.7.35.#q21.424"> <!-- 0 tests --> </tbody> <tbody id="sC.7.36"> @@ -3895,7 +3843,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.4">C.7.36 Section 9.4 Normal flow</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.36.#q425"> + <tbody id="sC.7.36.#q21.425"> <!-- 0 tests --> </tbody> <tbody id="sC.7.37"> @@ -3904,7 +3852,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.3.2">C.7.37 Section 9.3.2 Box offsets: 'top', 'right', 'bottom', 'left'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.37.#q426"> + <tbody id="sC.7.37.#q21.426"> <!-- 0 tests --> </tbody> <tbody id="sC.7.38"> @@ -3913,7 +3861,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.5">C.7.38 Section 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.38.#q427"> + <tbody id="sC.7.38.#q21.427"> <!-- 0 tests --> </tbody> <tbody id="sC.7.39"> @@ -3922,7 +3870,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.5a">C.7.39 Section 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.39.#q428"> + <tbody id="sC.7.39.#q21.428"> <!-- 0 tests --> </tbody> <tbody id="sC.7.40"> @@ -3931,7 +3879,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.5.2">C.7.40 Section 9.5.2 Controlling flow next to floats: the 'clear' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.40.#q429"> + <tbody id="sC.7.40.#q21.429"> <!-- 0 tests --> </tbody> <tbody id="sC.7.41"> @@ -3940,7 +3888,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.5.2a">C.7.41 Section 9.5.2 Controlling flow next to floats: the 'clear' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.41.#q430"> + <tbody id="sC.7.41.#q21.430"> <!-- 0 tests --> </tbody> <tbody id="sC.7.42"> @@ -3949,7 +3897,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.5.2b">C.7.42 Section 9.5.2 Controlling flow next to floats: the 'clear' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.42.#q431"> + <tbody id="sC.7.42.#q21.431"> <!-- 0 tests --> </tbody> <tbody id="sC.7.43"> @@ -3958,7 +3906,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.5.2c">C.7.43 Section 9.5.2 Controlling flow next to floats: the 'clear' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.43.#q432"> + <tbody id="sC.7.43.#q21.432"> <!-- 0 tests --> </tbody> <tbody id="sC.7.44"> @@ -3967,7 +3915,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.14.2.1">C.7.44 Section 14.2.1 Background properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.44.#q433"> + <tbody id="sC.7.44.#q21.433"> <!-- 0 tests --> </tbody> <tbody id="sC.7.45"> @@ -3976,7 +3924,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.9.1">C.7.45 Section 9.9.1 Specifying the stack level: the 'z-index' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.45.#q434"> + <tbody id="sC.7.45.#q21.434"> <!-- 0 tests --> </tbody> <tbody id="sC.7.46"> @@ -3985,7 +3933,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.10">C.7.46 Section 9.10 Text direction: the 'direction' and 'unicode-bidi' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.46.#q435"> + <tbody id="sC.7.46.#q21.435"> <!-- 0 tests --> </tbody> <tbody id="sC.7.47"> @@ -3994,7 +3942,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.10a">C.7.47 Section 9.10 Text direction: the 'direction' and 'unicode-bidi' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.47.#q436"> + <tbody id="sC.7.47.#q21.436"> <!-- 0 tests --> </tbody> <tbody id="sC.7.48"> @@ -4003,7 +3951,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.10b">C.7.48 Section 9.10 Text direction: the 'direction' and 'unicode-bidi' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.48.#q437"> + <tbody id="sC.7.48.#q21.437"> <!-- 0 tests --> </tbody> <tbody id="sC.7.49"> @@ -4012,7 +3960,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.1">C.7.49 Section 10.1 Definition of "containing block"</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.49.#q438"> + <tbody id="sC.7.49.#q21.438"> <!-- 0 tests --> </tbody> <tbody id="sC.7.50"> @@ -4021,7 +3969,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.2">C.7.50 Section 10.2 Content width: the 'width' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.50.#q439"> + <tbody id="sC.7.50.#q21.439"> <!-- 0 tests --> </tbody> <tbody id="sC.7.51"> @@ -4030,7 +3978,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.2a">C.7.51 Section 10.2 Content width: the 'width' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.51.#q440"> + <tbody id="sC.7.51.#q21.440"> <!-- 0 tests --> </tbody> <tbody id="sC.7.52"> @@ -4039,7 +3987,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.2b">C.7.52 Section 10.2 Content width: the 'width' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.52.#q441"> + <tbody id="sC.7.52.#q21.441"> <!-- 0 tests --> </tbody> <tbody id="sC.7.53"> @@ -4048,7 +3996,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.5">C.7.53 Section 10.5 Content height: the 'height' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.53.#q442"> + <tbody id="sC.7.53.#q21.442"> <!-- 0 tests --> </tbody> <tbody id="sC.7.54"> @@ -4057,7 +4005,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.5a">C.7.54 Section 10.5 Content height: the 'height' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.54.#q443"> + <tbody id="sC.7.54.#q21.443"> <!-- 0 tests --> </tbody> <tbody id="sC.7.55"> @@ -4066,7 +4014,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.6.7">C.7.55 Section 10.6.7 'Auto' heights for block formatting context roots</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.55.#q444"> + <tbody id="sC.7.55.#q21.444"> <!-- 0 tests --> </tbody> <tbody id="sC.7.56"> @@ -4075,7 +4023,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.7">C.7.56 Section 10.7 Minimum and maximum heights: 'min-height' and 'max-height'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.56.#q445"> + <tbody id="sC.7.56.#q21.445"> <!-- 0 tests --> </tbody> <tbody id="sC.7.57"> @@ -4084,7 +4032,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.8">C.7.57 Section 10.8 Line height calculations: the 'line-height' and 'vertical-align' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.57.#q446"> + <tbody id="sC.7.57.#q21.446"> <!-- 0 tests --> </tbody> <tbody id="sC.7.58"> @@ -4093,7 +4041,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.8a">C.7.58 Section 10.8 Line height calculations: the 'line-height' and 'vertical-align' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.58.#q447"> + <tbody id="sC.7.58.#q21.447"> <!-- 0 tests --> </tbody> <tbody id="sC.7.59"> @@ -4102,7 +4050,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.8.1">C.7.59 Section 10.8.1 Leading and half-leading</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.59.#q448"> + <tbody id="sC.7.59.#q21.448"> <!-- 0 tests --> </tbody> <tbody id="sC.7.60"> @@ -4111,7 +4059,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.8.1a">C.7.60 Section 10.8.1 Leading and half-leading</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.60.#q449"> + <tbody id="sC.7.60.#q21.449"> <!-- 0 tests --> </tbody> <tbody id="sC.7.61"> @@ -4120,7 +4068,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.8.1b">C.7.61 Section 10.8.1 Leading and half-leading</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.61.#q450"> + <tbody id="sC.7.61.#q21.450"> <!-- 0 tests --> </tbody> <tbody id="sC.7.62"> @@ -4129,7 +4077,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.11.1">C.7.62 Section 11.1 Overflow and clipping</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.62.#q451"> + <tbody id="sC.7.62.#q21.451"> <!-- 0 tests --> </tbody> <tbody id="sC.7.63"> @@ -4138,7 +4086,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.11.1.1">C.7.63 Section 11.1.1 Overflow: the 'overflow' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.63.#q452"> + <tbody id="sC.7.63.#q21.452"> <!-- 0 tests --> </tbody> <tbody id="sC.7.64"> @@ -4147,7 +4095,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.11.1.1a">C.7.64 Section 11.1.1 Overflow: the 'overflow' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.64.#q453"> + <tbody id="sC.7.64.#q21.453"> <!-- 0 tests --> </tbody> <tbody id="sC.7.65"> @@ -4156,7 +4104,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.11.1.1b">C.7.65 Section 11.1.1 Overflow: the 'overflow' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.65.#q454"> + <tbody id="sC.7.65.#q21.454"> <!-- 0 tests --> </tbody> <tbody id="sC.7.66"> @@ -4165,7 +4113,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.11.1.2">C.7.66 Section 11.1.2 Clipping: the 'clip' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.66.#q455"> + <tbody id="sC.7.66.#q21.455"> <!-- 0 tests --> </tbody> <tbody id="sC.7.67"> @@ -4174,7 +4122,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.12.5">C.7.67 Section 12.5 Lists</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.67.#q456"> + <tbody id="sC.7.67.#q21.456"> <!-- 0 tests --> </tbody> <tbody id="sC.7.68"> @@ -4183,7 +4131,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.12.5.1">C.7.68 Section 12.5.1 Lists: the 'list-style-type', 'list-style-image', 'list-style-position', and 'list-style' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.68.#q457"> + <tbody id="sC.7.68.#q21.457"> <!-- 0 tests --> </tbody> <tbody id="sC.7.69"> @@ -4192,7 +4140,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.12.5.1a">C.7.69 Section 12.5.1 Lists: the 'list-style-type', 'list-style-image', 'list-style-position', and 'list-style' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.69.#q458"> + <tbody id="sC.7.69.#q21.458"> <!-- 0 tests --> </tbody> <tbody id="sC.7.70"> @@ -4201,7 +4149,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.12.5.1b">C.7.70 Section 12.5.1 Lists: the 'list-style-type', 'list-style-image', 'list-style-position', and 'list-style' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.70.#q459"> + <tbody id="sC.7.70.#q21.459"> <!-- 0 tests --> </tbody> <tbody id="sC.7.71"> @@ -4210,7 +4158,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.12.5.1c">C.7.71 Section 12.5.1 Lists: the 'list-style-type', 'list-style-image', 'list-style-position', and 'list-style' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.71.#q460"> + <tbody id="sC.7.71.#q21.460"> <!-- 0 tests --> </tbody> <tbody id="sC.7.72"> @@ -4219,7 +4167,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.12.5.1d">C.7.72 Section 12.5.1 Lists: the 'list-style-type', 'list-style-image', 'list-style-position', and 'list-style' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.72.#q461"> + <tbody id="sC.7.72.#q21.461"> <!-- 0 tests --> </tbody> <tbody id="sC.7.73"> @@ -4228,7 +4176,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.13.2">C.7.73 Section 13.2 Page boxes: the @page rule</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.73.#q462"> + <tbody id="sC.7.73.#q21.462"> <!-- 0 tests --> </tbody> <tbody id="sC.7.74"> @@ -4237,7 +4185,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.13.2.2">C.7.74 Section 13.2.2 Page selectors: selecting left, right, and first pages</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.74.#q463"> + <tbody id="sC.7.74.#q21.463"> <!-- 0 tests --> </tbody> <tbody id="sC.7.75"> @@ -4246,7 +4194,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.13.3.2">C.7.75 Section 13.3.2 Breaks inside elements: 'orphans', 'widows'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.75.#q464"> + <tbody id="sC.7.75.#q21.464"> <!-- 0 tests --> </tbody> <tbody id="sC.7.76"> @@ -4255,7 +4203,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.13.3.3">C.7.76 Section 13.3.3 Allowed page breaks</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.76.#q465"> + <tbody id="sC.7.76.#q21.465"> <!-- 0 tests --> </tbody> <tbody id="sC.7.77"> @@ -4264,7 +4212,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.15.3">C.7.77 Section 15.3 Font family: the 'font-family' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.77.#q466"> + <tbody id="sC.7.77.#q21.466"> <!-- 0 tests --> </tbody> <tbody id="sC.7.78"> @@ -4273,7 +4221,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.15.3.1">C.7.78 Section 15.3.1 Generic font families</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.78.#q467"> + <tbody id="sC.7.78.#q21.467"> <!-- 0 tests --> </tbody> <tbody id="sC.7.79"> @@ -4282,7 +4230,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.15.6">C.7.79 Section 15.6 Font boldness: the 'font-weight' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.79.#q468"> + <tbody id="sC.7.79.#q21.468"> <!-- 0 tests --> </tbody> <tbody id="sC.7.80"> @@ -4291,7 +4239,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.15.6q">C.7.80 Section 15.6 Font boldness: the 'font-weight' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.80.#q469"> + <tbody id="sC.7.80.#q21.469"> <!-- 0 tests --> </tbody> <tbody id="sC.7.81"> @@ -4300,7 +4248,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.15.7">C.7.81 Section 15.7 Font size: the 'font-size' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.81.#q470"> + <tbody id="sC.7.81.#q21.470"> <!-- 0 tests --> </tbody> <tbody id="sC.7.82"> @@ -4309,7 +4257,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.16.1">C.7.82 Section 16.1 Indentation: the 'text-indent' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.82.#q471"> + <tbody id="sC.7.82.#q21.471"> <!-- 0 tests --> </tbody> <tbody id="sC.7.83"> @@ -4318,7 +4266,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.16.1a">C.7.83 Section 16.1 Indentation: the 'text-indent' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.83.#q472"> + <tbody id="sC.7.83.#q21.472"> <!-- 0 tests --> </tbody> <tbody id="sC.7.84"> @@ -4327,7 +4275,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.16.2">C.7.84 Section 16.2 Alignment: the 'text-align' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.84.#q473"> + <tbody id="sC.7.84.#q21.473"> <!-- 0 tests --> </tbody> <tbody id="sC.7.85"> @@ -4336,7 +4284,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.16.2a">C.7.85 Section 16.2 Alignment: the 'text-align' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.85.#q474"> + <tbody id="sC.7.85.#q21.474"> <!-- 0 tests --> </tbody> <tbody id="sC.7.86"> @@ -4345,7 +4293,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.16.3.1">C.7.86 Section 16.3.1 Underlining, overlining, striking, and blinking: the 'text-decoration' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.86.#q475"> + <tbody id="sC.7.86.#q21.475"> <!-- 0 tests --> </tbody> <tbody id="sC.7.87"> @@ -4354,7 +4302,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.16.3.1a">C.7.87 Section 16.3.1 Underlining, overlining, striking, and blinking: the 'text-decoration' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.87.#q476"> + <tbody id="sC.7.87.#q21.476"> <!-- 0 tests --> </tbody> <tbody id="sC.7.88"> @@ -4363,7 +4311,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.16.4">C.7.88 Section 16.4 Letter and word spacing: the 'letter-spacing' and 'word-spacing' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.88.#q477"> + <tbody id="sC.7.88.#q21.477"> <!-- 0 tests --> </tbody> <tbody id="sC.7.89"> @@ -4372,7 +4320,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.16.6">C.7.89 Section 16.6 White space: the 'white-space' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.89.#q478"> + <tbody id="sC.7.89.#q21.478"> <!-- 0 tests --> </tbody> <tbody id="sC.7.90"> @@ -4381,7 +4329,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.16.6.1">C.7.90 Section 16.6.1 The 'white-space' processing model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.90.#q479"> + <tbody id="sC.7.90.#q21.479"> <!-- 0 tests --> </tbody> <tbody id="sC.7.91"> @@ -4390,7 +4338,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.16.6.1a">C.7.91 Section 16.6.1 The 'white-space' processing model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.91.#q480"> + <tbody id="sC.7.91.#q21.480"> <!-- 0 tests --> </tbody> <tbody id="sC.7.92"> @@ -4399,7 +4347,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.16.6.1b">C.7.92 Section 16.6.1 The 'white-space' processing model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.92.#q481"> + <tbody id="sC.7.92.#q21.481"> <!-- 0 tests --> </tbody> <tbody id="sC.7.93"> @@ -4408,7 +4356,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.17.2">C.7.93 Section 17.2 The CSS table model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.93.#q482"> + <tbody id="sC.7.93.#q21.482"> <!-- 0 tests --> </tbody> <tbody id="sC.7.94"> @@ -4417,7 +4365,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.17.2.1">C.7.94 Section 17.2.1 Anonymous table objects</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.94.#q483"> + <tbody id="sC.7.94.#q21.483"> <!-- 0 tests --> </tbody> <tbody id="sC.7.95"> @@ -4426,7 +4374,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.17.2.1a">C.7.95 Section 17.2.1 Anonymous table objects</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.95.#q484"> + <tbody id="sC.7.95.#q21.484"> <!-- 0 tests --> </tbody> <tbody id="sC.7.96"> @@ -4435,7 +4383,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.17.4">C.7.96 Section 17.4 Tables in the visual formatting model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.96.#q485"> + <tbody id="sC.7.96.#q21.485"> <!-- 0 tests --> </tbody> <tbody id="sC.7.97"> @@ -4444,7 +4392,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.17.4a">C.7.97 Section 17.4 Tables in the visual formatting model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.97.#q486"> + <tbody id="sC.7.97.#q21.486"> <!-- 0 tests --> </tbody> <tbody id="sC.7.98"> @@ -4453,7 +4401,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.17.5.2.2">C.7.98 Section 17.5.2.2 Automatic table layout</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.98.#q487"> + <tbody id="sC.7.98.#q21.487"> <!-- 0 tests --> </tbody> <tbody id="sC.7.99"> @@ -4462,7 +4410,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.17.5.3">C.7.99 Section 17.5.3 Table height algorithms</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.99.#q488"> + <tbody id="sC.7.99.#q21.488"> <!-- 0 tests --> </tbody> <tbody id="sC.7.100"> @@ -4471,7 +4419,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.17.5.4">C.7.100 Section 17.5.4 Horizontal alignment in a column</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.100.#q489"> + <tbody id="sC.7.100.#q21.489"> <!-- 0 tests --> </tbody> <tbody id="sC.7.101"> @@ -4480,7 +4428,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.B.2">C.7.101 Section B.2 Informative references</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.101.#q490"> + <tbody id="sC.7.101.#q21.490"> <!-- 0 tests --> </tbody> <tbody id="sC.7.102"> @@ -4489,7 +4437,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.D">C.7.102 Section D. Default style sheet for HTML 4</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.102.#q491"> + <tbody id="sC.7.102.#q21.491"> <!-- 0 tests --> </tbody> <tbody id="sC.7.103"> @@ -4498,7 +4446,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.E.2">C.7.103 Section E.2 Painting order</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.103.#q492"> + <tbody id="sC.7.103.#q21.492"> <!-- 0 tests --> </tbody> <tbody id="sC.7.104"> @@ -4507,7 +4455,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.G">C.7.104 Appendix G Grammar of CSS 2.1</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.7.104.#q493"> + <tbody id="sC.7.104.#q21.493"> <!-- 0 tests --> </tbody> <tbody id="sC.8"> @@ -4516,7 +4464,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#errata4">C.8 Changes since the working draft of 7 December 2010</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.#q494"> + <tbody id="sC.8.#q21.494"> <!-- 0 tests --> </tbody> <tbody id="sC.8.1"> @@ -4525,7 +4473,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.8.3.1">C.8.1 8.3.1 Collapsing margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.1.#q495"> + <tbody id="sC.8.1.#q21.495"> <!-- 0 tests --> </tbody> <tbody id="sC.8.2"> @@ -4534,7 +4482,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.10.8.1">C.8.2 10.8.1 Leading and half-leading</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.2.#q496"> + <tbody id="sC.8.2.#q21.496"> <!-- 0 tests --> </tbody> <tbody id="sC.8.3"> @@ -4543,7 +4491,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.10.3">C.8.3 10.3 Calculating widths and margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.3.#q497"> + <tbody id="sC.8.3.#q21.497"> <!-- 0 tests --> </tbody> <tbody id="sC.8.4"> @@ -4552,7 +4500,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.14.3">C.8.4 14.3 Gamma correction</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.4.#q498"> + <tbody id="sC.8.4.#q21.498"> <!-- 0 tests --> </tbody> <tbody id="sC.8.5"> @@ -4561,7 +4509,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.11.1.2">C.8.5 11.1.2 Clipping: the 'clip' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.5.#q499"> + <tbody id="sC.8.5.#q21.499"> <!-- 0 tests --> </tbody> <tbody id="sC.8.6"> @@ -4570,7 +4518,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.4.2">C.8.6 9.4.2 Inline formatting contexts</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.6.#q500"> + <tbody id="sC.8.6.#q21.500"> <!-- 0 tests --> </tbody> <tbody id="sC.8.7"> @@ -4579,7 +4527,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.10.3.2">C.8.7 10.3.2 Inline, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.7.#q501"> + <tbody id="sC.8.7.#q21.501"> <!-- 0 tests --> </tbody> <tbody id="sC.8.8"> @@ -4588,7 +4536,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.10.1">C.8.8 10.1 Definition of "containing block"</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.8.#q502"> + <tbody id="sC.8.8.#q21.502"> <!-- 0 tests --> </tbody> <tbody id="sC.8.9"> @@ -4597,7 +4545,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.13.2.2">C.8.9 13.2.2 Page selectors: selecting left, right, and first pages</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.9.#q503"> + <tbody id="sC.8.9.#q21.503"> <!-- 0 tests --> </tbody> <tbody id="sC.8.10"> @@ -4606,7 +4554,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.8.3.1a">C.8.10 8.3.1 Collapsing margins</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.10.#q504"> + <tbody id="sC.8.10.#q21.504"> <!-- 0 tests --> </tbody> <tbody id="sC.8.11"> @@ -4615,7 +4563,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.10.8">C.8.11 10.8 Line height calculations: the 'line-height' and 'vertical-align' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.11.#q505"> + <tbody id="sC.8.11.#q21.505"> <!-- 0 tests --> </tbody> <tbody id="sC.8.12"> @@ -4624,7 +4572,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.10.8.1a">C.8.12 10.8.1 Leading and half-leading</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.12.#q506"> + <tbody id="sC.8.12.#q21.506"> <!-- 0 tests --> </tbody> <tbody id="sC.8.13"> @@ -4633,7 +4581,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.10.6.1a">C.8.13 10.6.1 Inline, non-replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.13.#q507"> + <tbody id="sC.8.13.#q21.507"> <!-- 0 tests --> </tbody> <tbody id="sC.8.14"> @@ -4642,7 +4590,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.5.1">C.8.14 9.5.1 Positioning the float: the 'float' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.14.#q508"> + <tbody id="sC.8.14.#q21.508"> <!-- 0 tests --> </tbody> <tbody id="sC.8.15"> @@ -4651,7 +4599,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.2.1.1">C.8.15 9.2.1.1 Anonymous block boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.15.#q509"> + <tbody id="sC.8.15.#q21.509"> <!-- 0 tests --> </tbody> <tbody id="sC.8.16"> @@ -4660,7 +4608,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.5.12.1">C.8.16 5.12.1 The :first-line pseudo-element</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.16.#q510"> + <tbody id="sC.8.16.#q21.510"> <!-- 0 tests --> </tbody> <tbody id="sC.8.17"> @@ -4669,7 +4617,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.16.6">C.8.17 16.6 White space: the 'white-space' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.17.#q511"> + <tbody id="sC.8.17.#q21.511"> <!-- 0 tests --> </tbody> <tbody id="sC.8.18"> @@ -4678,7 +4626,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.12.5.1">C.8.18 12.5.1 Lists: the 'list-style-type', 'list-style-image', 'list-style-position', and 'list-style' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.18.#q512"> + <tbody id="sC.8.18.#q21.512"> <!-- 0 tests --> </tbody> <tbody id="sC.8.19"> @@ -4687,7 +4635,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.7">C.8.19 9.7 Relationships between 'display', 'position', and 'float'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.19.#q513"> + <tbody id="sC.8.19.#q21.513"> <!-- 0 tests --> </tbody> <tbody id="sC.8.20"> @@ -4696,7 +4644,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.4.2a">C.8.20 9.4.2 Inline formatting contexts</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.20.#q514"> + <tbody id="sC.8.20.#q21.514"> <!-- 0 tests --> </tbody> <tbody id="sC.8.21"> @@ -4705,7 +4653,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.4.1.9">C.8.21 4.1.9 Comments</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.21.#q515"> + <tbody id="sC.8.21.#q21.515"> <!-- 0 tests --> </tbody> <tbody id="sC.8.22"> @@ -4714,7 +4662,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.12.5.1a">C.8.22 12.5.1 Lists: the 'list-style-type', 'list-style-image', 'list-style-position', and 'list-style' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.22.#q516"> + <tbody id="sC.8.22.#q21.516"> <!-- 0 tests --> </tbody> <tbody id="sC.8.23"> @@ -4723,7 +4671,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.5.1a">C.8.23 9.5.1 Positioning the float: the 'float' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.23.#q517"> + <tbody id="sC.8.23.#q21.517"> <!-- 0 tests --> </tbody> <tbody id="sC.8.24"> @@ -4732,7 +4680,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.3">C.8.24 9.3 Positioning schemes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.24.#q518"> + <tbody id="sC.8.24.#q21.518"> <!-- 0 tests --> </tbody> <tbody id="sC.8.25"> @@ -4741,7 +4689,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.10">C.8.25 9.10 Text direction: the 'direction' and 'unicode-bidi' properties</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.25.#q519"> + <tbody id="sC.8.25.#q21.519"> <!-- 0 tests --> </tbody> <tbody id="sC.8.26"> @@ -4750,7 +4698,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.16.3.1">C.8.26 16.3.1 Underlining, overlining, striking, and blinking: the 'text-decoration' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.26.#q520"> + <tbody id="sC.8.26.#q21.520"> <!-- 0 tests --> </tbody> <tbody id="sC.8.27"> @@ -4759,7 +4707,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.16.3.1a">C.8.27 16.3.1 Underlining, overlining, striking, and blinking: the 'text-decoration' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.27.#q521"> + <tbody id="sC.8.27.#q21.521"> <!-- 0 tests --> </tbody> <tbody id="sC.8.28"> @@ -4768,7 +4716,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.10.4">C.8.28 10.4 Minimum and maximum widths: 'min-width' and 'max-width'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.28.#q522"> + <tbody id="sC.8.28.#q21.522"> <!-- 0 tests --> </tbody> <tbody id="sC.8.29"> @@ -4777,7 +4725,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.3.2">C.8.29 9.3.2 Box offsets: 'top', 'right', 'bottom', 'left'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.29.#q523"> + <tbody id="sC.8.29.#q21.523"> <!-- 0 tests --> </tbody> <tbody id="sC.8.30"> @@ -4786,7 +4734,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.2.1.1a">C.8.30 9.2.1.1 Anonymous block boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.30.#q524"> + <tbody id="sC.8.30.#q21.524"> <!-- 0 tests --> </tbody> <tbody id="sC.8.31"> @@ -4795,7 +4743,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.2.1.1b">C.8.31 17.4 Tables in the visual formatting model</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.31.#q525"> + <tbody id="sC.8.31.#q21.525"> <!-- 0 tests --> </tbody> <tbody id="sC.8.32"> @@ -4807,7 +4755,7 @@ <tbody id="sC.8.32.#img-clip"> <!-- 0 tests --> </tbody> - <tbody id="sC.8.32.#q526"> + <tbody id="sC.8.32.#q21.526"> <!-- 0 tests --> </tbody> <tbody id="sC.8.33"> @@ -4816,7 +4764,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.13.2">C.8.33 13.2 Page boxes: the @page rule</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.33.#q527"> + <tbody id="sC.8.33.#q21.527"> <!-- 0 tests --> </tbody> <tbody id="sC.8.34"> @@ -4825,7 +4773,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.4.1.1">C.8.34 4.1.1 Tokenization</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.34.#q528"> + <tbody id="sC.8.34.#q21.528"> <!-- 0 tests --> </tbody> <tbody id="sC.8.35"> @@ -4834,7 +4782,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.4.2">C.8.35 4.2 Rules for handling parsing errors</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.35.#q529"> + <tbody id="sC.8.35.#q21.529"> <!-- 0 tests --> </tbody> <tbody id="sC.8.36"> @@ -4843,7 +4791,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.3.1">C.8.36 3.1 Definitions</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.36.#q530"> + <tbody id="sC.8.36.#q21.530"> <!-- 0 tests --> </tbody> <tbody id="sC.8.37"> @@ -4852,7 +4800,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.4.3.4">C.8.37 4.3.4 URLs and URIs</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.37.#q531"> + <tbody id="sC.8.37.#q21.531"> <!-- 0 tests --> </tbody> <tbody id="sC.8.38"> @@ -4861,7 +4809,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.5">C.8.38 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.38.#q532"> + <tbody id="sC.8.38.#q21.532"> <!-- 0 tests --> </tbody> <tbody id="sC.8.39"> @@ -4870,7 +4818,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.11.1.1">C.8.39 11.1.1 Overflow: the 'overflow' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.39.#q533"> + <tbody id="sC.8.39.#q21.533"> <!-- 0 tests --> </tbody> <tbody id="sC.8.40"> @@ -4879,7 +4827,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.2.1.1c">C.8.40 9.2.1.1 Anonymous block boxes</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.40.#q534"> + <tbody id="sC.8.40.#q21.534"> <!-- 0 tests --> </tbody> <tbody id="sC.8.41"> @@ -4888,7 +4836,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.16.2">C.8.41 16.2 Alignment: the 'text-align' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.41.#q535"> + <tbody id="sC.8.41.#q21.535"> <!-- 0 tests --> </tbody> <tbody id="sC.8.42"> @@ -4897,7 +4845,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.5a">C.8.42 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.42.#q536"> + <tbody id="sC.8.42.#q21.536"> <!-- 0 tests --> </tbody> <tbody id="sC.8.43"> @@ -4906,7 +4854,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.4.2b">C.8.43 9.4.2 Inline formatting contexts</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.43.#q537"> + <tbody id="sC.8.43.#q21.537"> <!-- 0 tests --> </tbody> <tbody id="sC.8.44"> @@ -4915,7 +4863,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.5.12">C.8.44 5.12 Pseudo-elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.44.#q538"> + <tbody id="sC.8.44.#q21.538"> <!-- 0 tests --> </tbody> <tbody id="sC.8.45"> @@ -4924,7 +4872,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.5b">C.8.45 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.45.#q539"> + <tbody id="sC.8.45.#q21.539"> <!-- 0 tests --> </tbody> <tbody id="sC.8.46"> @@ -4933,7 +4881,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.5c">C.8.46 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.46.#q540"> + <tbody id="sC.8.46.#q21.540"> <!-- 0 tests --> </tbody> <tbody id="sC.8.47"> @@ -4942,7 +4890,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.14.2.1">C.8.47 14.2.1 Background properties: 'background-color', 'background-image', 'background-repeat', 'background-attachment', 'background-position', and 'background'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.47.#q541"> + <tbody id="sC.8.47.#q21.541"> <!-- 0 tests --> </tbody> <tbody id="sC.8.48"> @@ -4951,7 +4899,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.9.2.4">C.8.48 9.2.4 The 'display' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.48.#q542"> + <tbody id="sC.8.48.#q21.542"> <!-- 0 tests --> </tbody> <tbody id="sC.8.49"> @@ -4960,7 +4908,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.6.1.2">C.8.49 6.1.2 Computed values</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.49.#q543"> + <tbody id="sC.8.49.#q21.543"> <!-- 0 tests --> </tbody> <tbody id="sC.8.50"> @@ -4969,7 +4917,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#u.10.3.2a">C.8.50 10.3.2 Inline, replaced elements</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.50.#q544"> + <tbody id="sC.8.50.#q21.544"> <!-- 0 tests --> </tbody> <tbody id="sC.8.51"> @@ -4978,7 +4926,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.5.2d">C.8.51 Section 9.5.2 Controlling flow next to floats: the 'clear' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.51.#q545"> + <tbody id="sC.8.51.#q21.545"> <!-- 0 tests --> </tbody> <tbody id="sC.8.52"> @@ -4987,7 +4935,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.G.2">C.8.52 G.2 Lexical scanner</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.52.#q546"> + <tbody id="sC.8.52.#q21.546"> <!-- 0 tests --> </tbody> <tbody id="sC.8.53"> @@ -4996,7 +4944,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.5.2e">C.8.53 Section 9.5.2 Controlling flow next to floats: the 'clear' property</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.53.#q547"> + <tbody id="sC.8.53.#q21.547"> <!-- 0 tests --> </tbody> <tbody id="sC.8.54"> @@ -5005,7 +4953,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.9.5b">C.8.54 9.5 Floats</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.54.#q548"> + <tbody id="sC.8.54.#q21.548"> <!-- 0 tests --> </tbody> <tbody id="sC.8.55"> @@ -5014,7 +4962,7 @@ <a href="https://www.w3.org/TR/CSS21/changes.html#t.10.6.3">C.8.55 10.6.3 Block-level non-replaced elements in normal flow when 'overflow' computes to 'visible'</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="sC.8.55.#q549"> + <tbody id="sC.8.55.#q21.549"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-D.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-D.xht index e545bb18322..25686c7f8f7 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-D.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-D.xht @@ -30,7 +30,10 @@ <tbody id="sD"> <tr><th colspan="4" scope="rowgroup"> <a href="#sD">+</a> - <a href="https://www.w3.org/TR/CSS21/sample.html">D Default style sheet for HTML 4</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/sample.html#q22.0">D Default style sheet for HTML 4</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="sD.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="sD.#bidi"> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-E.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-E.xht index db091b778bc..da61f955249 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-E.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-E.xht @@ -30,7 +30,10 @@ <tbody id="sE"> <tr><th colspan="4" scope="rowgroup"> <a href="#sE">+</a> - <a href="https://www.w3.org/TR/CSS21/zindex.html">E Elaborate description of Stacking Contexts</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/zindex.html#q23.0">E Elaborate description of Stacking Contexts</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="sE.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="sE.1"> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-F.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-F.xht index e21dce70fa5..e3076552071 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-F.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-F.xht @@ -30,7 +30,10 @@ <tbody id="sF"> <tr><th colspan="4" scope="rowgroup"> <a href="#sF">+</a> - <a href="https://www.w3.org/TR/CSS21/propidx.html">F Full property table</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/propidx.html#q24.0">F Full property table</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="sF.#annoying-warning"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-G.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-G.xht index aabf7a4165f..887475ba8de 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-G.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-G.xht @@ -30,7 +30,10 @@ <tbody id="sG"> <tr><th colspan="4" scope="rowgroup"> <a href="#sG">+</a> - <a href="https://www.w3.org/TR/CSS21/grammar.html">G Grammar of CSS 2.1</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/grammar.html#q25.0">G Grammar of CSS 2.1</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="sG.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="sG.1"> @@ -94,7 +97,7 @@ <tbody id="sG.4"> <tr><th colspan="4" scope="rowgroup"> <a href="#sG.4">+</a> - <a href="https://www.w3.org/TR/CSS21/grammar.html#q4">G.4 Implementation note</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/grammar.html#q25.4">G.4 Implementation note</a></th></tr> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-H.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-H.xht index 3eb7ca5905a..39bcb5d13a7 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-H.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-H.xht @@ -30,7 +30,7 @@ <tbody id="sH"> <tr><th colspan="4" scope="rowgroup"> <a href="#sH">+</a> - <a href="https://www.w3.org/TR/CSS21/leftblank.html">H Has been intentionally left blank</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/leftblank.html#q26.0">H Has been intentionally left blank</a></th></tr> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-I.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-I.xht index 1ef7f7f13ac..12f7fc762b4 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-I.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/chapter-I.xht @@ -30,7 +30,10 @@ <tbody id="sI"> <tr><th colspan="4" scope="rowgroup"> <a href="#sI">+</a> - <a href="https://www.w3.org/TR/CSS21/indexlist.html">I Index</a></th></tr> + <a href="https://www.w3.org/TR/CSS21/indexlist.html#q27.0">I Index</a></th></tr> + <!-- 0 tests --> + </tbody> + <tbody id="sI.#annoying-warning"> <!-- 0 tests --> </tbody> <tbody id="sI.#index-;"> @@ -147,6 +150,9 @@ <tbody id="sI.#index-z"> <!-- 0 tests --> </tbody> + <tbody id="sstatus.#annoying-warning"> + <!-- 0 tests --> + </tbody> </table> </body> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/overflow-html-body-001.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/overflow-html-body-001.xht new file mode 100644 index 00000000000..8bef967a080 --- /dev/null +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/overflow-html-body-001.xht @@ -0,0 +1,33 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title>CSS Test: Overflow on body propagates to viewport</title> + <style type="text/css"> + @page { font: italic 8pt sans-serif; color: gray; + margin: 7%; + counter-increment: page; + @top-left { content: "CSS 2.1 Conformance Test Suite"; } + @top-right { content: "Test overflow-html-body-001"; } + @bottom-right { content: counter(page); } + } +</style> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visufx.html#overflow" /> + <meta name="assert" content="An HTML user agent propagates the 'overflow' property from the 'body' to the viewport." /> + <style type="text/css"> + body + { + overflow: hidden; + } + div + { + height: 110%; + width: 110%; + } + </style> + </head> + <body> + <p>Test passes if the horizontal and vertical scrolling mechanism is not available on the page.</p> + <div></div> + </body> +</html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/reftest-toc.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/reftest-toc.xht index e434af6c622..b2681a3481e 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1print/reftest-toc.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/reftest-toc.xht @@ -250,7 +250,7 @@ </tbody> <tbody id="abs-pos-non-replaced-vlr-059" class="ahem image"> <tr> - <td rowspan="1" title="absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'"> + <td rowspan="1" title="absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto'"> <a href="abs-pos-non-replaced-vlr-059.xht">abs-pos-non-replaced-vlr-059</a></td> <td><a href="reference/abs-pos-non-replaced-vrl-004-ref.xht">=</a> </td> <td rowspan="1"><abbr class="ahem" title="Requires Ahem font">Ahem</abbr><abbr class="image" title="Requires bitmap graphic support">Bitmaps</abbr></td> @@ -1146,7 +1146,7 @@ </tbody> <tbody id="abs-pos-non-replaced-vrl-058" class="ahem image"> <tr> - <td rowspan="1" title="absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto', then solve for 'left'"> + <td rowspan="1" title="absolutely positioned non-replaced element - 'direction: rtl' and 'left' is 'auto', 'width' and 'right' are not 'auto'"> <a href="abs-pos-non-replaced-vrl-058.xht">abs-pos-non-replaced-vrl-058</a></td> <td><a href="reference/abs-pos-non-replaced-vrl-004-ref.xht">=</a> </td> <td rowspan="1"><abbr class="ahem" title="Requires Ahem font">Ahem</abbr><abbr class="image" title="Requires bitmap graphic support">Bitmaps</abbr></td> diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/table-intro-example-001.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/table-intro-example-001.xht new file mode 100644 index 00000000000..6b480b0bc10 --- /dev/null +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/table-intro-example-001.xht @@ -0,0 +1,59 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title>CSS Test: Introduction to Tables (text-align, font-weight)</title> + <style type="text/css"> + @page { font: italic 8pt sans-serif; color: gray; + margin: 7%; + counter-increment: page; + @top-left { content: "CSS 2.1 Conformance Test Suite"; } + @top-right { content: "Test table-intro-example-001"; } + @bottom-right { content: counter(page); } + } +</style> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/tables.html#tables-intro" /> + <meta name="assert" content="'text-align' and 'font-weight' can be applied to table cells (example from spec section 17.1)." /> + <style type="text/css"> + caption + { + color: blue; + } + td + { + border: 1px solid blue; + height: 5em; + width: 10em; + } + th + { + border: 1px solid blue; + font-weight: bold; + height: 5em; + text-align: center; + width: 10em; + } + </style> + </head> + <body> + <p>Test passes if the text in the left-most box column is centered in its column and darker than the text in the other columns.</p> + <table> + <caption>This is a simple 3x3 table</caption> + <tr id="row1"> + <th>Header 1</th> + <td>Cell 1</td> + <td>Cell 2</td> + </tr> + <tr id="row2"> + <th>Header 2</th> + <td>Cell 3</td> + <td>Cell 4</td> + </tr> + <tr id="row3"> + <th>Header 3</th> + <td>Cell 5</td> + <td>Cell 6</td> + </tr> + </table> + </body> + </html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/table-intro-example-002.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/table-intro-example-002.xht new file mode 100644 index 00000000000..fe1afd4fdd3 --- /dev/null +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/table-intro-example-002.xht @@ -0,0 +1,59 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title>CSS Test: Introduction to Tables (vertical-align)</title> + <style type="text/css"> + @page { font: italic 8pt sans-serif; color: gray; + margin: 7%; + counter-increment: page; + @top-left { content: "CSS 2.1 Conformance Test Suite"; } + @top-right { content: "Test table-intro-example-002"; } + @bottom-right { content: counter(page); } + } +</style> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/tables.html#tables-intro" /> + <meta name="assert" content="'vertical-align' can be set on table cells (example from section 17.1)." /> + <style type="text/css"> + caption + { + color: blue; + } + td + { + border: 1px solid blue; + height: 5em; + vertical-align: middle; + width: 10em; + } + th + { + border: 1px solid blue; + height: 5em; + vertical-align: baseline; + width: 10em; + } + </style> + </head> + <body> + <p>Test passes if the text in the left-most box column is at the very top of the column and text in the other two columns is vertically centered.</p> + <table> + <caption>This is a simple 3x3 table</caption> + <tr id="row1"> + <th>Header 1</th> + <td>Cell 1</td> + <td>Cell 2</td> + </tr> + <tr id="row2"> + <th>Header 2</th> + <td>Cell 3</td> + <td>Cell 4</td> + </tr> + <tr id="row3"> + <th>Header 3</th> + <td>Cell 5</td> + <td>Cell 6</td> + </tr> + </table> + </body> + </html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/table-intro-example-003.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/table-intro-example-003.xht new file mode 100644 index 00000000000..9221fab932c --- /dev/null +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/table-intro-example-003.xht @@ -0,0 +1,57 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title>CSS Test: Introduction to Tables (border-collapse, border)</title> + <style type="text/css"> + @page { font: italic 8pt sans-serif; color: gray; + margin: 7%; + counter-increment: page; + @top-left { content: "CSS 2.1 Conformance Test Suite"; } + @top-right { content: "Test table-intro-example-003"; } + @bottom-right { content: counter(page); } + } +</style> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/tables.html#tables-intro" /> + <meta name="assert" content="'border-collapse' and 'border' can be set on table elements (example from section 17.1)." /> + <style type="text/css"> + table + { + border-collapse: collapse; + } + tr#row1 + { + border: 3px solid blue; + } + tr#row2 + { + border: 1px solid black; + } + tr#row3 + { + border: 1px solid black; + } + </style> + </head> + <body> + <p>Test passes if the box below is separated into three horizontal rows, and the top one has a blue border that is thicker than the borders of the other rows.</p> + <table> + <caption>This is a simple 3x3 table</caption> + <tr id="row1"> + <th>Header 1</th> + <td>Cell 1</td> + <td>Cell 2</td> + </tr> + <tr id="row2"> + <th>Header 2</th> + <td>Cell 3</td> + <td>Cell 4</td> + </tr> + <tr id="row3"> + <th>Header 3</th> + <td>Cell 5</td> + <td>Cell 6</td> + </tr> + </table> + </body> + </html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/table-intro-example-004.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/table-intro-example-004.xht new file mode 100644 index 00000000000..bcd2834ac1b --- /dev/null +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/table-intro-example-004.xht @@ -0,0 +1,54 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title>CSS Test: Introduction to Tables (caption-side)</title> + <style type="text/css"> + @page { font: italic 8pt sans-serif; color: gray; + margin: 7%; + counter-increment: page; + @top-left { content: "CSS 2.1 Conformance Test Suite"; } + @top-right { content: "Test table-intro-example-004"; } + @bottom-right { content: counter(page); } + } +</style> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/tables.html#tables-intro" /> + <meta name="assert" content="'caption-side' can be set on a table caption (example from section 17.1)." /> + <style type="text/css"> + caption + { + color: blue; + caption-side: top; + } + td + { + border: solid black; + } + th + { + border: solid black; + } + </style> + </head> + <body> + <p>Test passes if blue text (with the words 'This is a simple 3x3 table') appears above the three-by-three grid below.</p> + <table> + <caption>This is a simple 3x3 table</caption> + <tr id="row1"> + <th>Header 1</th> + <td>Cell 1</td> + <td>Cell 2</td> + </tr> + <tr id="row2"> + <th>Header 2</th> + <td>Cell 3</td> + <td>Cell 4</td> + </tr> + <tr id="row3"> + <th>Header 3</th> + <td>Cell 5</td> + <td>Cell 6</td> + </tr> + </table> + </body> + </html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/css21_dev/xhtml1print/toc.xht b/tests/wpt/css-tests/css21_dev/xhtml1print/toc.xht index 3d44f5c1398..f960046517a 100644 --- a/tests/wpt/css-tests/css21_dev/xhtml1print/toc.xht +++ b/tests/wpt/css-tests/css21_dev/xhtml1print/toc.xht @@ -37,22 +37,22 @@ <tbody id="s4"> <tr><th><a href="chapter-4.xht">Chapter 4 - Syntax and basic data types</a></th> - <td>(439 Tests)</td></tr> + <td>(431 Tests)</td></tr> </tbody> <tbody id="s5"> <tr><th><a href="chapter-5.xht">Chapter 5 - Selectors</a></th> - <td>(677 Tests)</td></tr> + <td>(668 Tests)</td></tr> </tbody> <tbody id="s6"> <tr><th><a href="chapter-6.xht">Chapter 6 - Assigning property values, Cascading, and Inheritance</a></th> - <td>(145 Tests)</td></tr> + <td>(117 Tests)</td></tr> </tbody> <tbody id="s7"> <tr><th><a href="chapter-7.xht">Chapter 7 - Media types</a></th> - <td>(22 Tests)</td></tr> + <td>(5 Tests)</td></tr> </tbody> <tbody id="s8"> <tr><th><a href="chapter-8.xht">Chapter 8 - @@ -62,7 +62,7 @@ <tbody id="s9"> <tr><th><a href="chapter-9.xht">Chapter 9 - Visual formatting model</a></th> - <td>(1247 Tests)</td></tr> + <td>(1246 Tests)</td></tr> </tbody> <tbody id="s10"> <tr><th><a href="chapter-10.xht">Chapter 10 - @@ -122,7 +122,7 @@ <tbody id="sC"> <tr><th><a href="chapter-C.xht">Appendix C - Changes</a></th> - <td>(5 Tests)</td></tr> + <td>(0 Tests)</td></tr> </tbody> <tbody id="sD"> <tr><th><a href="chapter-D.xht">Appendix D - diff --git a/tests/wpt/css-tests/cssom-view-1_dev/html/chapter-13.htm b/tests/wpt/css-tests/cssom-view-1_dev/html/chapter-13.htm index 55876ea792d..9d4bb44bce0 100644 --- a/tests/wpt/css-tests/cssom-view-1_dev/html/chapter-13.htm +++ b/tests/wpt/css-tests/cssom-view-1_dev/html/chapter-13.htm @@ -81,259 +81,259 @@ <tbody id="s.#acks"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-backgrounds-3"> + <tbody id="s.#change-history"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-break-3"> + <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-device-adapt"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-display-3"> + <tbody id="s.#idl-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-overflow-4"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-position-3"> + <tbody id="s.#issues-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-pseudo-4"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-transforms-1"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-values"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-writing-modes-3"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css21"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-box"> + <tbody id="schange-history.#changes-from-2011-08-04"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-cssom"> + <tbody id="schange-history.#changes-from-2013-12-17"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-geometry-1"> + <tbody id="schanges-from-2011-08-04.#ref-for-dom-document-elementsfrompoint-2"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-html"> + <tbody id="schanges-from-2011-08-04.#ref-for-dom-screen-colordepth-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-rfc2119"> + <tbody id="schanges-from-2011-08-04.#ref-for-dom-screen-pixeldepth-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-svg"> + <tbody id="schanges-from-2011-08-04.#ref-for-dom-window-devicepixelratio-2"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-svg2"> + <tbody id="schanges-from-2011-08-04.#ref-for-dom-window-innerwidth-2"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-webidl"> + <tbody id="schanges-from-2011-08-04.#ref-for-dom-window-moveby-2"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-whatwg-dom"> + <tbody id="schanges-from-2011-08-04.#ref-for-dom-window-moveto-2"> <!-- 0 tests --> </tbody> - <tbody id="s.#change-history"> + <tbody id="schanges-from-2011-08-04.#ref-for-dom-window-resizeby-2"> <!-- 0 tests --> </tbody> - <tbody id="s.#changes-from-2011-08-04"> + <tbody id="schanges-from-2011-08-04.#ref-for-dom-window-resizeto-2"> <!-- 0 tests --> </tbody> - <tbody id="s.#changes-from-2013-12-17"> + <tbody id="schanges-from-2011-08-04.#ref-for-page-zoom-2"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-classes"> + <tbody id="schanges-from-2011-08-04.#ref-for-pinch-zoom-2"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-future-proofing"> + <tbody id="schanges-from-2011-08-04.#ref-for-propdef-scroll-behavior-7"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-partial"> + <tbody id="schanges-from-2011-08-04.#ref-for-screen-5"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-responsible"> + <tbody id="schanges-from-2011-08-04.#ref-for-transforms-24"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-testing"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-document-scrollingelement-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-element-clientheight-2"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-element-clientleft-2"> <!-- 0 tests --> </tbody> - <tbody id="s.#document-conventions"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-element-clienttop-2"> <!-- 0 tests --> </tbody> - <tbody id="s.#example-52448c84"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-element-clientwidth-2"> <!-- 0 tests --> </tbody> - <tbody id="s.#idl-index"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-element-scroll-5"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-element-scrollby-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-elsewhere"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-element-scrollheight-2"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-here"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-element-scrollintoview-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-element-scrollintoview-4"> <!-- 0 tests --> </tbody> - <tbody id="s.#issues-index"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-element-scrollleft-6"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-element-scrollleft-7"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-element-scrollto-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-document-elementsfrompoint-2"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-element-scrolltop-6"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-document-scrollingelement-3"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-element-scrollwidth-2"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-element-clientheight-2"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-mediaquerylist-addlistener-4"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-element-clientleft-2"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-window-scroll-11"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-element-clienttop-2"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-window-scrollby-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-element-clientwidth-2"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-window-scrollto-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-element-scroll-5"> + <tbody id="schanges-from-2013-12-17.#ref-for-eventdef-document-scroll-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-element-scrollby-3"> + <tbody id="schanges-from-2013-12-17.#ref-for-eventdef-window-resize-2"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-element-scrollheight-2"> + <tbody id="schanges-from-2013-12-17.#ref-for-mediaquerylist-13"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-element-scrollintoview-3"> + <tbody id="schanges-from-2013-12-17.#ref-for-mediaquerylist-14"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-element-scrollintoview-4"> + <tbody id="schanges-from-2013-12-17.#ref-for-propdef-scroll-behavior-6"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-element-scrollleft-6"> + <tbody id="schanges-from-2013-12-17.#ref-for-valdef-scroll-behavior-auto-1"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-element-scrollleft-7"> + <tbody id="sconform-responsible.#conform-future-proofing"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-element-scrollto-3"> + <tbody id="sconform-responsible.#conform-partial"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-element-scrolltop-6"> + <tbody id="sconform-responsible.#conform-testing"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-element-scrollwidth-2"> + <tbody id="sconformance.#conform-classes"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-mediaquerylist-addlistener-4"> + <tbody id="sconformance.#conform-responsible"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-screen-colordepth-3"> + <tbody id="sconformance.#document-conventions"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-screen-pixeldepth-3"> + <tbody id="sdocument-conventions.#example-52448c84"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-window-devicepixelratio-2"> + <tbody id="sindex.#index-defined-elsewhere"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-window-innerwidth-2"> + <tbody id="sindex.#index-defined-here"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-window-moveby-2"> + <tbody id="sinformative.#biblio-svg2"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-window-moveto-2"> + <tbody id="snormative.#biblio-css-backgrounds-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-window-resizeby-2"> + <tbody id="snormative.#biblio-css-break-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-window-resizeto-2"> + <tbody id="snormative.#biblio-css-device-adapt"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-window-scroll-11"> + <tbody id="snormative.#biblio-css-display-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-window-scrollby-3"> + <tbody id="snormative.#biblio-css-overflow-4"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-window-scrollto-3"> + <tbody id="snormative.#biblio-css-position-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-eventdef-document-scroll-3"> + <tbody id="snormative.#biblio-css-pseudo-4"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-eventdef-window-resize-2"> + <tbody id="snormative.#biblio-css-transforms-1"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-mediaquerylist-13"> + <tbody id="snormative.#biblio-css-values"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-mediaquerylist-14"> + <tbody id="snormative.#biblio-css-writing-modes-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-page-zoom-2"> + <tbody id="snormative.#biblio-css21"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-pinch-zoom-2"> + <tbody id="snormative.#biblio-css3-box"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-propdef-scroll-behavior-6"> + <tbody id="snormative.#biblio-cssom"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-propdef-scroll-behavior-7"> + <tbody id="snormative.#biblio-geometry-1"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-screen-5"> + <tbody id="snormative.#biblio-html"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-transforms-24"> + <tbody id="snormative.#biblio-rfc2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-valdef-scroll-behavior-auto-1"> + <tbody id="snormative.#biblio-svg"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="snormative.#biblio-webidl"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#biblio-whatwg-dom"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="sreferences.#informative"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> - <tbody id="s.#toc"> + <tbody id="sstatus.#toc"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> + <tbody id="sstatus.#w3c_process_revision"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/cssom-view-1_dev/html/matchMediaAddListener.htm b/tests/wpt/css-tests/cssom-view-1_dev/html/matchMediaAddListener.htm index e9f59fdc781..8e188e37b15 100644 --- a/tests/wpt/css-tests/cssom-view-1_dev/html/matchMediaAddListener.htm +++ b/tests/wpt/css-tests/cssom-view-1_dev/html/matchMediaAddListener.htm @@ -4,15 +4,15 @@ <link href="mailto:pwx.frontend@gmail.com" rel="author" title="Chris Wu"> <link href="http://www.w3.org/TR/cssom-view/#the-mediaquerylist-interface" rel="help"> <meta content="dom" name="flags"> - <script src="/resources/testharness.js" type="text/javascript"> - <script src="/resources/testharnessreport.js" type="text/javascript" /> + <script src="/resources/testharness.js" type="text/javascript"></script> + <script src="/resources/testharnessreport.js" type="text/javascript"></script> <style type="text/css"> iframe { border: none; } </style> </head> <body> <div id="log"></div> - <iframe width="200" height="100" id="iframe1" ></iframe> + <iframe width="200" id="iframe1" height="100"></iframe> <script> function reflow(doc) { doc.body.offsetWidth; @@ -59,9 +59,7 @@ }; changeFrameWidth(width_list[0]); - - </script> - </head><body> + </body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/cssom-view-1_dev/implementation-report-TEMPLATE.data b/tests/wpt/css-tests/cssom-view-1_dev/implementation-report-TEMPLATE.data index cf6890fe654..cbee9f30c19 100644 --- a/tests/wpt/css-tests/cssom-view-1_dev/implementation-report-TEMPLATE.data +++ b/tests/wpt/css-tests/cssom-view-1_dev/implementation-report-TEMPLATE.data @@ -21,8 +21,8 @@ html/htmlelement-offset-width-001.htm 2aa3ebf3ff6268a05bc53f09d8f54c32b9f3dac8 ? xhtml1/htmlelement-offset-width-001.xht 2aa3ebf3ff6268a05bc53f09d8f54c32b9f3dac8 ? html/matchmedia.htm 4204705443e44fca78d664f38a2ec9d4308d03f2 ? xhtml1/matchmedia.xht 4204705443e44fca78d664f38a2ec9d4308d03f2 ? -html/matchmediaaddlistener.htm 60aa2e2b20aaa1c20dbece338b8d5583a4456436 ? -xhtml1/matchmediaaddlistener.xht 60aa2e2b20aaa1c20dbece338b8d5583a4456436 ? +html/matchmediaaddlistener.htm 49f502ff600517eab6dfe90e0a21562715b3d6fa ? +xhtml1/matchmediaaddlistener.xht 49f502ff600517eab6dfe90e0a21562715b3d6fa ? html/media-query-list-interface.htm bf107020b2904718b522b5b57fad03c51c059a1e ? xhtml1/media-query-list-interface.xht bf107020b2904718b522b5b57fad03c51c059a1e ? html/mediaquerylist-001.htm 76154c3e1d04e0f61bcabbd17587e4b35f926a36 ? diff --git a/tests/wpt/css-tests/cssom-view-1_dev/testinfo.data b/tests/wpt/css-tests/cssom-view-1_dev/testinfo.data index fe274f5dc84..712f3e1ed23 100644 --- a/tests/wpt/css-tests/cssom-view-1_dev/testinfo.data +++ b/tests/wpt/css-tests/cssom-view-1_dev/testinfo.data @@ -8,7 +8,7 @@ elementFromPoint-001 CSSOM View - 5 - extensions to the Document interface dom, elementFromPosition CSSOM View elementFromPoint dom,script https://www.w3.org/TR/cssom-view/#dom-document-elementfrompoint 8267d99d7721978fab7c386c463d1407df1d1234 `Chris`<mailto:pwx.frontend@gmail.com> htmlelement-offset-width-001 CSSOM View - 7 - element.offsetWidth detatches correctly dom,script https://drafts.csswg.org/cssom-view-1/#dom-htmlelement-offsetwidth 2aa3ebf3ff6268a05bc53f09d8f54c32b9f3dac8 `Michael Howell`<mailto:michael@notriddle.com> element.offsetWidth returns 0 when there is no documentElement. matchMedia CSSOM View matchMedia and MediaQueryList dom,script http://www.w3.org/TR/cssom-view/#dom-window-matchmedia,http://www.w3.org/TR/cssom-view/#the-mediaquerylist-interface,http://www.w3.org/TR/cssom-1/#serializing-media-queries 4204705443e44fca78d664f38a2ec9d4308d03f2 `Rune Lillesveen`<mailto:rune@opera.com> -matchMediaAddListener CSSOM View matchMedia addListener dom,script http://www.w3.org/TR/cssom-view/#the-mediaquerylist-interface 60aa2e2b20aaa1c20dbece338b8d5583a4456436 `Chris Wu`<mailto:pwx.frontend@gmail.com> +matchMediaAddListener CSSOM View matchMedia addListener dom,script http://www.w3.org/TR/cssom-view/#the-mediaquerylist-interface 49f502ff600517eab6dfe90e0a21562715b3d6fa `Chris Wu`<mailto:pwx.frontend@gmail.com> media-query-list-interface Properties and Functions dom,script http://www.w3.org/TR/cssom-view/#extensions-to-the-window-interface,http://www.w3.org/TR/cssom-view/#the-mediaquerylist-interface bf107020b2904718b522b5b57fad03c51c059a1e `Joe Balancio`<mailto:jlbalancio@gmail.com> All properties exist and are readonly. All functions exist and are instances of Function MediaQueryList-001 MediaQueryList script http://www.w3.org/TR/cssom-view/#the-mediaquerylist-interface 76154c3e1d04e0f61bcabbd17587e4b35f926a36 `unbug`<mailto:tidelgl@gmail.com> offsetParent_element_test CSSOM View —— offsetParent element test script http://www.w3.org/TR/cssom-view/#extensions-to-the-htmlelement-interface,http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsetparent 7942a400b775948ca727fc389f224e11721bef2e `neo_and_rayi`<mailto:1988wangxiao@gmail.com> diff --git a/tests/wpt/css-tests/cssom-view-1_dev/xhtml1/chapter-13.xht b/tests/wpt/css-tests/cssom-view-1_dev/xhtml1/chapter-13.xht index eb4f5ae6935..2167e60cedd 100644 --- a/tests/wpt/css-tests/cssom-view-1_dev/xhtml1/chapter-13.xht +++ b/tests/wpt/css-tests/cssom-view-1_dev/xhtml1/chapter-13.xht @@ -81,259 +81,259 @@ <tbody id="s.#acks"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-backgrounds-3"> + <tbody id="s.#change-history"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-break-3"> + <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-device-adapt"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-display-3"> + <tbody id="s.#idl-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-overflow-4"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-position-3"> + <tbody id="s.#issues-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-pseudo-4"> + <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-transforms-1"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-values"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css-writing-modes-3"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css21"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-box"> + <tbody id="schange-history.#changes-from-2011-08-04"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-cssom"> + <tbody id="schange-history.#changes-from-2013-12-17"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-geometry-1"> + <tbody id="schanges-from-2011-08-04.#ref-for-dom-document-elementsfrompoint-2"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-html"> + <tbody id="schanges-from-2011-08-04.#ref-for-dom-screen-colordepth-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-rfc2119"> + <tbody id="schanges-from-2011-08-04.#ref-for-dom-screen-pixeldepth-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-svg"> + <tbody id="schanges-from-2011-08-04.#ref-for-dom-window-devicepixelratio-2"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-svg2"> + <tbody id="schanges-from-2011-08-04.#ref-for-dom-window-innerwidth-2"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-webidl"> + <tbody id="schanges-from-2011-08-04.#ref-for-dom-window-moveby-2"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-whatwg-dom"> + <tbody id="schanges-from-2011-08-04.#ref-for-dom-window-moveto-2"> <!-- 0 tests --> </tbody> - <tbody id="s.#change-history"> + <tbody id="schanges-from-2011-08-04.#ref-for-dom-window-resizeby-2"> <!-- 0 tests --> </tbody> - <tbody id="s.#changes-from-2011-08-04"> + <tbody id="schanges-from-2011-08-04.#ref-for-dom-window-resizeto-2"> <!-- 0 tests --> </tbody> - <tbody id="s.#changes-from-2013-12-17"> + <tbody id="schanges-from-2011-08-04.#ref-for-page-zoom-2"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-classes"> + <tbody id="schanges-from-2011-08-04.#ref-for-pinch-zoom-2"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-future-proofing"> + <tbody id="schanges-from-2011-08-04.#ref-for-propdef-scroll-behavior-7"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-partial"> + <tbody id="schanges-from-2011-08-04.#ref-for-screen-5"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-responsible"> + <tbody id="schanges-from-2011-08-04.#ref-for-transforms-24"> <!-- 0 tests --> </tbody> - <tbody id="s.#conform-testing"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-document-scrollingelement-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-element-clientheight-2"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-element-clientleft-2"> <!-- 0 tests --> </tbody> - <tbody id="s.#document-conventions"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-element-clienttop-2"> <!-- 0 tests --> </tbody> - <tbody id="s.#example-52448c84"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-element-clientwidth-2"> <!-- 0 tests --> </tbody> - <tbody id="s.#idl-index"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-element-scroll-5"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-element-scrollby-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-elsewhere"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-element-scrollheight-2"> <!-- 0 tests --> </tbody> - <tbody id="s.#index-defined-here"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-element-scrollintoview-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-element-scrollintoview-4"> <!-- 0 tests --> </tbody> - <tbody id="s.#issues-index"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-element-scrollleft-6"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-element-scrollleft-7"> <!-- 0 tests --> </tbody> - <tbody id="s.#property-index"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-element-scrollto-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-document-elementsfrompoint-2"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-element-scrolltop-6"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-document-scrollingelement-3"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-element-scrollwidth-2"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-element-clientheight-2"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-mediaquerylist-addlistener-4"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-element-clientleft-2"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-window-scroll-11"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-element-clienttop-2"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-window-scrollby-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-element-clientwidth-2"> + <tbody id="schanges-from-2013-12-17.#ref-for-dom-window-scrollto-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-element-scroll-5"> + <tbody id="schanges-from-2013-12-17.#ref-for-eventdef-document-scroll-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-element-scrollby-3"> + <tbody id="schanges-from-2013-12-17.#ref-for-eventdef-window-resize-2"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-element-scrollheight-2"> + <tbody id="schanges-from-2013-12-17.#ref-for-mediaquerylist-13"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-element-scrollintoview-3"> + <tbody id="schanges-from-2013-12-17.#ref-for-mediaquerylist-14"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-element-scrollintoview-4"> + <tbody id="schanges-from-2013-12-17.#ref-for-propdef-scroll-behavior-6"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-element-scrollleft-6"> + <tbody id="schanges-from-2013-12-17.#ref-for-valdef-scroll-behavior-auto-1"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-element-scrollleft-7"> + <tbody id="sconform-responsible.#conform-future-proofing"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-element-scrollto-3"> + <tbody id="sconform-responsible.#conform-partial"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-element-scrolltop-6"> + <tbody id="sconform-responsible.#conform-testing"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-element-scrollwidth-2"> + <tbody id="sconformance.#conform-classes"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-mediaquerylist-addlistener-4"> + <tbody id="sconformance.#conform-responsible"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-screen-colordepth-3"> + <tbody id="sconformance.#document-conventions"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-screen-pixeldepth-3"> + <tbody id="sdocument-conventions.#example-52448c84"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-window-devicepixelratio-2"> + <tbody id="sindex.#index-defined-elsewhere"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-window-innerwidth-2"> + <tbody id="sindex.#index-defined-here"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-window-moveby-2"> + <tbody id="sinformative.#biblio-svg2"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-window-moveto-2"> + <tbody id="snormative.#biblio-css-backgrounds-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-window-resizeby-2"> + <tbody id="snormative.#biblio-css-break-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-window-resizeto-2"> + <tbody id="snormative.#biblio-css-device-adapt"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-window-scroll-11"> + <tbody id="snormative.#biblio-css-display-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-window-scrollby-3"> + <tbody id="snormative.#biblio-css-overflow-4"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-dom-window-scrollto-3"> + <tbody id="snormative.#biblio-css-position-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-eventdef-document-scroll-3"> + <tbody id="snormative.#biblio-css-pseudo-4"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-eventdef-window-resize-2"> + <tbody id="snormative.#biblio-css-transforms-1"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-mediaquerylist-13"> + <tbody id="snormative.#biblio-css-values"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-mediaquerylist-14"> + <tbody id="snormative.#biblio-css-writing-modes-3"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-page-zoom-2"> + <tbody id="snormative.#biblio-css21"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-pinch-zoom-2"> + <tbody id="snormative.#biblio-css3-box"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-propdef-scroll-behavior-6"> + <tbody id="snormative.#biblio-cssom"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-propdef-scroll-behavior-7"> + <tbody id="snormative.#biblio-geometry-1"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-screen-5"> + <tbody id="snormative.#biblio-html"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-transforms-24"> + <tbody id="snormative.#biblio-rfc2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#ref-for-valdef-scroll-behavior-auto-1"> + <tbody id="snormative.#biblio-svg"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="snormative.#biblio-webidl"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#biblio-whatwg-dom"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="sreferences.#informative"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> - <tbody id="s.#toc"> + <tbody id="sstatus.#toc"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> + <tbody id="sstatus.#w3c_process_revision"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/cssom-view-1_dev/xhtml1/matchMediaAddListener.xht b/tests/wpt/css-tests/cssom-view-1_dev/xhtml1/matchMediaAddListener.xht index e5419d6ddef..a157053817d 100644 --- a/tests/wpt/css-tests/cssom-view-1_dev/xhtml1/matchMediaAddListener.xht +++ b/tests/wpt/css-tests/cssom-view-1_dev/xhtml1/matchMediaAddListener.xht @@ -4,16 +4,16 @@ <link href="mailto:pwx.frontend@gmail.com" rel="author" title="Chris Wu" /> <link href="http://www.w3.org/TR/cssom-view/#the-mediaquerylist-interface" rel="help" /> <meta content="dom" name="flags" /> - <script src="/resources/testharness.js" type="text/javascript"> - <script src="/resources/testharnessreport.js" type="text/javascript" /> - <style type="text/css"> + <script src="/resources/testharness.js" type="text/javascript"></script> + <script src="/resources/testharnessreport.js" type="text/javascript"></script> + <style type="text/css"> iframe { border: none; } - </style> - </head> - <body> - <div id="log"></div> - <iframe width="200" height="100" id="iframe1" ></iframe> - <script> + </style> + </head> + <body> + <div id="log"></div> + <iframe width="200" id="iframe1" height="100"></iframe> + <script> function reflow(doc) { doc.body.offsetWidth; } @@ -59,9 +59,7 @@ }; changeFrameWidth(width_list[0]); - - </script> - </head><body> + </body></html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/filters-1_dev/html/chapter-14.htm b/tests/wpt/css-tests/filters-1_dev/html/chapter-14.htm index 1cfaab090d0..e25f52217a0 100644 --- a/tests/wpt/css-tests/filters-1_dev/html/chapter-14.htm +++ b/tests/wpt/css-tests/filters-1_dev/html/chapter-14.htm @@ -63,75 +63,21 @@ <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-artd"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-compositing"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-compositing-1"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css21"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-animations"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3bg"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3color"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3val"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-html5"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-porterduff"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-rfc2119"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-svg11"> - <!-- 0 tests --> - </tbody> <tbody id="s.#changes"> <!-- 0 tests --> </tbody> <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> - <!-- 0 tests --> - </tbody> <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#experimental"> - <!-- 0 tests --> - </tbody> <tbody id="s.#idl-index"> <!-- 0 tests --> </tbody> <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#normative"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#partial"> - <!-- 0 tests --> - </tbody> <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> @@ -144,15 +90,9 @@ <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> - <!-- 0 tests --> - </tbody> <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> - <!-- 0 tests --> - </tbody> </table> </body> diff --git a/tests/wpt/css-tests/filters-1_dev/html/chapter-B.htm b/tests/wpt/css-tests/filters-1_dev/html/chapter-B.htm index 5653552d9b3..b0d7e2192bc 100644 --- a/tests/wpt/css-tests/filters-1_dev/html/chapter-B.htm +++ b/tests/wpt/css-tests/filters-1_dev/html/chapter-B.htm @@ -117,442 +117,502 @@ <tbody id="sB.#InterfaceSVGFilterPrimitiveStandardAttributes"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGComponentTransferFunctionElement__SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE"> + <tbody id="sInterfaceSVGComponentTransferFunctionElement.#SVGComponentTransferFunctionElement__SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGComponentTransferFunctionElement__SVG_FECOMPONENTTRANSFER_TYPE_GAMMA"> + <tbody id="sInterfaceSVGComponentTransferFunctionElement.#SVGComponentTransferFunctionElement__SVG_FECOMPONENTTRANSFER_TYPE_GAMMA"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGComponentTransferFunctionElement__SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY"> + <tbody id="sInterfaceSVGComponentTransferFunctionElement.#SVGComponentTransferFunctionElement__SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGComponentTransferFunctionElement__SVG_FECOMPONENTTRANSFER_TYPE_LINEAR"> + <tbody id="sInterfaceSVGComponentTransferFunctionElement.#SVGComponentTransferFunctionElement__SVG_FECOMPONENTTRANSFER_TYPE_LINEAR"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGComponentTransferFunctionElement__SVG_FECOMPONENTTRANSFER_TYPE_TABLE"> + <tbody id="sInterfaceSVGComponentTransferFunctionElement.#SVGComponentTransferFunctionElement__SVG_FECOMPONENTTRANSFER_TYPE_TABLE"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGComponentTransferFunctionElement__SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN"> + <tbody id="sInterfaceSVGComponentTransferFunctionElement.#SVGComponentTransferFunctionElement__SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGComponentTransferFunctionElement__amplitude"> + <tbody id="sInterfaceSVGComponentTransferFunctionElement.#SVGComponentTransferFunctionElement__amplitude"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGComponentTransferFunctionElement__exponent"> + <tbody id="sInterfaceSVGComponentTransferFunctionElement.#SVGComponentTransferFunctionElement__exponent"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGComponentTransferFunctionElement__intercept"> + <tbody id="sInterfaceSVGComponentTransferFunctionElement.#SVGComponentTransferFunctionElement__intercept"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGComponentTransferFunctionElement__offset"> + <tbody id="sInterfaceSVGComponentTransferFunctionElement.#SVGComponentTransferFunctionElement__offset"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGComponentTransferFunctionElement__slope"> + <tbody id="sInterfaceSVGComponentTransferFunctionElement.#SVGComponentTransferFunctionElement__slope"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGComponentTransferFunctionElement__tableValues"> + <tbody id="sInterfaceSVGComponentTransferFunctionElement.#SVGComponentTransferFunctionElement__tableValues"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGComponentTransferFunctionElement__type"> + <tbody id="sInterfaceSVGComponentTransferFunctionElement.#SVGComponentTransferFunctionElement__type"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEBlendElement__SVG_FEBLEND_MODE_DARKEN"> + <tbody id="sInterfaceSVGFEBlendElement.#SVGFEBlendElement__SVG_FEBLEND_MODE_DARKEN"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEBlendElement__SVG_FEBLEND_MODE_LIGHTEN"> + <tbody id="sInterfaceSVGFEBlendElement.#SVGFEBlendElement__SVG_FEBLEND_MODE_LIGHTEN"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEBlendElement__SVG_FEBLEND_MODE_MULTIPLY"> + <tbody id="sInterfaceSVGFEBlendElement.#SVGFEBlendElement__SVG_FEBLEND_MODE_MULTIPLY"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEBlendElement__SVG_FEBLEND_MODE_NORMAL"> + <tbody id="sInterfaceSVGFEBlendElement.#SVGFEBlendElement__SVG_FEBLEND_MODE_NORMAL"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEBlendElement__SVG_FEBLEND_MODE_SCREEN"> + <tbody id="sInterfaceSVGFEBlendElement.#SVGFEBlendElement__SVG_FEBLEND_MODE_SCREEN"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEBlendElement__SVG_FEBLEND_MODE_UNKNOWN"> + <tbody id="sInterfaceSVGFEBlendElement.#SVGFEBlendElement__SVG_FEBLEND_MODE_UNKNOWN"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEBlendElement__in1"> + <tbody id="sInterfaceSVGFEBlendElement.#SVGFEBlendElement__in1"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEBlendElement__in2"> + <tbody id="sInterfaceSVGFEBlendElement.#SVGFEBlendElement__in2"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEBlendElement__mode"> + <tbody id="sInterfaceSVGFEBlendElement.#SVGFEBlendElement__mode"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEColorMatrixElement__SVG_FECOLORMATRIX_TYPE_HUEROTATE"> + <tbody id="sInterfaceSVGFEColorMatrixElement.#SVGFEColorMatrixElement__SVG_FECOLORMATRIX_TYPE_HUEROTATE"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEColorMatrixElement__SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA"> + <tbody id="sInterfaceSVGFEColorMatrixElement.#SVGFEColorMatrixElement__SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEColorMatrixElement__SVG_FECOLORMATRIX_TYPE_MATRIX"> + <tbody id="sInterfaceSVGFEColorMatrixElement.#SVGFEColorMatrixElement__SVG_FECOLORMATRIX_TYPE_MATRIX"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEColorMatrixElement__SVG_FECOLORMATRIX_TYPE_SATURATE"> + <tbody id="sInterfaceSVGFEColorMatrixElement.#SVGFEColorMatrixElement__SVG_FECOLORMATRIX_TYPE_SATURATE"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEColorMatrixElement__SVG_FECOLORMATRIX_TYPE_UNKNOWN"> + <tbody id="sInterfaceSVGFEColorMatrixElement.#SVGFEColorMatrixElement__SVG_FECOLORMATRIX_TYPE_UNKNOWN"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEColorMatrixElement__in1"> + <tbody id="sInterfaceSVGFEColorMatrixElement.#SVGFEColorMatrixElement__in1"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEColorMatrixElement__type"> + <tbody id="sInterfaceSVGFEColorMatrixElement.#SVGFEColorMatrixElement__type"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEColorMatrixElement__values"> + <tbody id="sInterfaceSVGFEColorMatrixElement.#SVGFEColorMatrixElement__values"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEComponentTransferElement__in1"> + <tbody id="sInterfaceSVGFEComponentTransferElement.#SVGFEComponentTransferElement__in1"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFECompositeElement__SVG_FECOMPOSITE_OPERATOR_ARITHMETIC"> + <tbody id="sInterfaceSVGFECompositeElement.#SVGFECompositeElement__SVG_FECOMPOSITE_OPERATOR_ARITHMETIC"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFECompositeElement__SVG_FECOMPOSITE_OPERATOR_ATOP"> + <tbody id="sInterfaceSVGFECompositeElement.#SVGFECompositeElement__SVG_FECOMPOSITE_OPERATOR_ATOP"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFECompositeElement__SVG_FECOMPOSITE_OPERATOR_IN"> + <tbody id="sInterfaceSVGFECompositeElement.#SVGFECompositeElement__SVG_FECOMPOSITE_OPERATOR_IN"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFECompositeElement__SVG_FECOMPOSITE_OPERATOR_OUT"> + <tbody id="sInterfaceSVGFECompositeElement.#SVGFECompositeElement__SVG_FECOMPOSITE_OPERATOR_OUT"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFECompositeElement__SVG_FECOMPOSITE_OPERATOR_OVER"> + <tbody id="sInterfaceSVGFECompositeElement.#SVGFECompositeElement__SVG_FECOMPOSITE_OPERATOR_OVER"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFECompositeElement__SVG_FECOMPOSITE_OPERATOR_UNKNOWN"> + <tbody id="sInterfaceSVGFECompositeElement.#SVGFECompositeElement__SVG_FECOMPOSITE_OPERATOR_UNKNOWN"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFECompositeElement__SVG_FECOMPOSITE_OPERATOR_XOR"> + <tbody id="sInterfaceSVGFECompositeElement.#SVGFECompositeElement__SVG_FECOMPOSITE_OPERATOR_XOR"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFECompositeElement__in1"> + <tbody id="sInterfaceSVGFECompositeElement.#SVGFECompositeElement__in1"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFECompositeElement__in2"> + <tbody id="sInterfaceSVGFECompositeElement.#SVGFECompositeElement__in2"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFECompositeElement__k1"> + <tbody id="sInterfaceSVGFECompositeElement.#SVGFECompositeElement__k1"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFECompositeElement__k2"> + <tbody id="sInterfaceSVGFECompositeElement.#SVGFECompositeElement__k2"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFECompositeElement__k3"> + <tbody id="sInterfaceSVGFECompositeElement.#SVGFECompositeElement__k3"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFECompositeElement__k4"> + <tbody id="sInterfaceSVGFECompositeElement.#SVGFECompositeElement__k4"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFECompositeElement__operator"> + <tbody id="sInterfaceSVGFECompositeElement.#SVGFECompositeElement__operator"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEConvolveMatrixElement__SVG_EDGEMODE_DUPLICATE"> + <tbody id="sInterfaceSVGFEConvolveMatrixElement.#SVGFEConvolveMatrixElement__SVG_EDGEMODE_DUPLICATE"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEConvolveMatrixElement__SVG_EDGEMODE_NONE"> + <tbody id="sInterfaceSVGFEConvolveMatrixElement.#SVGFEConvolveMatrixElement__SVG_EDGEMODE_NONE"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEConvolveMatrixElement__SVG_EDGEMODE_UNKNOWN"> + <tbody id="sInterfaceSVGFEConvolveMatrixElement.#SVGFEConvolveMatrixElement__SVG_EDGEMODE_UNKNOWN"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEConvolveMatrixElement__SVG_EDGEMODE_WRAP"> + <tbody id="sInterfaceSVGFEConvolveMatrixElement.#SVGFEConvolveMatrixElement__SVG_EDGEMODE_WRAP"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEConvolveMatrixElement__bias"> + <tbody id="sInterfaceSVGFEConvolveMatrixElement.#SVGFEConvolveMatrixElement__bias"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEConvolveMatrixElement__divisor"> + <tbody id="sInterfaceSVGFEConvolveMatrixElement.#SVGFEConvolveMatrixElement__divisor"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEConvolveMatrixElement__edgeMode"> + <tbody id="sInterfaceSVGFEConvolveMatrixElement.#SVGFEConvolveMatrixElement__edgeMode"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEConvolveMatrixElement__in1"> + <tbody id="sInterfaceSVGFEConvolveMatrixElement.#SVGFEConvolveMatrixElement__in1"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEConvolveMatrixElement__kernelMatrix"> + <tbody id="sInterfaceSVGFEConvolveMatrixElement.#SVGFEConvolveMatrixElement__kernelMatrix"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEConvolveMatrixElement__kernelUnitLengthX"> + <tbody id="sInterfaceSVGFEConvolveMatrixElement.#SVGFEConvolveMatrixElement__kernelUnitLengthX"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEConvolveMatrixElement__kernelUnitLengthY"> + <tbody id="sInterfaceSVGFEConvolveMatrixElement.#SVGFEConvolveMatrixElement__kernelUnitLengthY"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEConvolveMatrixElement__orderX"> + <tbody id="sInterfaceSVGFEConvolveMatrixElement.#SVGFEConvolveMatrixElement__orderX"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEConvolveMatrixElement__orderY"> + <tbody id="sInterfaceSVGFEConvolveMatrixElement.#SVGFEConvolveMatrixElement__orderY"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEConvolveMatrixElement__targetX"> + <tbody id="sInterfaceSVGFEConvolveMatrixElement.#SVGFEConvolveMatrixElement__targetX"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEConvolveMatrixElement__targetY"> + <tbody id="sInterfaceSVGFEConvolveMatrixElement.#SVGFEConvolveMatrixElement__targetY"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDiffuseLightingElement__diffuseConstant"> + <tbody id="sInterfaceSVGFEDiffuseLightingElement.#SVGFEDiffuseLightingElement__diffuseConstant"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDiffuseLightingElement__in1"> + <tbody id="sInterfaceSVGFEDiffuseLightingElement.#SVGFEDiffuseLightingElement__in1"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDiffuseLightingElement__kernelUnitLengthX"> + <tbody id="sInterfaceSVGFEDiffuseLightingElement.#SVGFEDiffuseLightingElement__kernelUnitLengthX"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDiffuseLightingElement__kernelUnitLengthY"> + <tbody id="sInterfaceSVGFEDiffuseLightingElement.#SVGFEDiffuseLightingElement__kernelUnitLengthY"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDiffuseLightingElement__surfaceScale"> + <tbody id="sInterfaceSVGFEDiffuseLightingElement.#SVGFEDiffuseLightingElement__surfaceScale"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDisplacementMapElement__SVG_CHANNEL_A"> + <tbody id="sInterfaceSVGFEDisplacementMapElement.#SVGFEDisplacementMapElement__SVG_CHANNEL_A"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDisplacementMapElement__SVG_CHANNEL_B"> + <tbody id="sInterfaceSVGFEDisplacementMapElement.#SVGFEDisplacementMapElement__SVG_CHANNEL_B"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDisplacementMapElement__SVG_CHANNEL_G"> + <tbody id="sInterfaceSVGFEDisplacementMapElement.#SVGFEDisplacementMapElement__SVG_CHANNEL_G"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDisplacementMapElement__SVG_CHANNEL_R"> + <tbody id="sInterfaceSVGFEDisplacementMapElement.#SVGFEDisplacementMapElement__SVG_CHANNEL_R"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDisplacementMapElement__SVG_CHANNEL_UNKNOWN"> + <tbody id="sInterfaceSVGFEDisplacementMapElement.#SVGFEDisplacementMapElement__SVG_CHANNEL_UNKNOWN"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDisplacementMapElement__in1"> + <tbody id="sInterfaceSVGFEDisplacementMapElement.#SVGFEDisplacementMapElement__in1"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDisplacementMapElement__in2"> + <tbody id="sInterfaceSVGFEDisplacementMapElement.#SVGFEDisplacementMapElement__in2"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDisplacementMapElement__scale"> + <tbody id="sInterfaceSVGFEDisplacementMapElement.#SVGFEDisplacementMapElement__scale"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDisplacementMapElement__xChannelSelector"> + <tbody id="sInterfaceSVGFEDisplacementMapElement.#SVGFEDisplacementMapElement__xChannelSelector"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDisplacementMapElement__yChannelSelector"> + <tbody id="sInterfaceSVGFEDisplacementMapElement.#SVGFEDisplacementMapElement__yChannelSelector"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDistantLightElement__azimuth"> + <tbody id="sInterfaceSVGFEDistantLightElement.#SVGFEDistantLightElement__azimuth"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDistantLightElement__elevation"> + <tbody id="sInterfaceSVGFEDistantLightElement.#SVGFEDistantLightElement__elevation"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDropShadowElement__dx"> + <tbody id="sInterfaceSVGFEDropShadowElement.#SVGFEDropShadowElement__dx"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDropShadowElement__dy"> + <tbody id="sInterfaceSVGFEDropShadowElement.#SVGFEDropShadowElement__dy"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDropShadowElement__in1"> + <tbody id="sInterfaceSVGFEDropShadowElement.#SVGFEDropShadowElement__in1"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDropShadowElement__setStdDeviation"> + <tbody id="sInterfaceSVGFEDropShadowElement.#SVGFEDropShadowElement__setStdDeviation"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDropShadowElement__stdDeviationX"> + <tbody id="sInterfaceSVGFEDropShadowElement.#SVGFEDropShadowElement__stdDeviationX"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDropShadowElement__stdDeviationY"> + <tbody id="sInterfaceSVGFEDropShadowElement.#SVGFEDropShadowElement__stdDeviationY"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEGaussianBlurElement__SVG_EDGEMODE_DUPLICATE"> + <tbody id="sInterfaceSVGFEGaussianBlurElement.#SVGFEGaussianBlurElement__SVG_EDGEMODE_DUPLICATE"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEGaussianBlurElement__SVG_EDGEMODE_NONE"> + <tbody id="sInterfaceSVGFEGaussianBlurElement.#SVGFEGaussianBlurElement__SVG_EDGEMODE_NONE"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEGaussianBlurElement__SVG_EDGEMODE_UNKNOWN"> + <tbody id="sInterfaceSVGFEGaussianBlurElement.#SVGFEGaussianBlurElement__SVG_EDGEMODE_UNKNOWN"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEGaussianBlurElement__SVG_EDGEMODE_WRAP"> + <tbody id="sInterfaceSVGFEGaussianBlurElement.#SVGFEGaussianBlurElement__SVG_EDGEMODE_WRAP"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEGaussianBlurElement__edgeMode"> + <tbody id="sInterfaceSVGFEGaussianBlurElement.#SVGFEGaussianBlurElement__edgeMode"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEGaussianBlurElement__in1"> + <tbody id="sInterfaceSVGFEGaussianBlurElement.#SVGFEGaussianBlurElement__in1"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEGaussianBlurElement__setStdDeviation"> + <tbody id="sInterfaceSVGFEGaussianBlurElement.#SVGFEGaussianBlurElement__setStdDeviation"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEGaussianBlurElement__stdDeviationX"> + <tbody id="sInterfaceSVGFEGaussianBlurElement.#SVGFEGaussianBlurElement__stdDeviationX"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEGaussianBlurElement__stdDeviationY"> + <tbody id="sInterfaceSVGFEGaussianBlurElement.#SVGFEGaussianBlurElement__stdDeviationY"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEImageElement__crossOrigin"> + <tbody id="sInterfaceSVGFEImageElement.#SVGFEImageElement__crossOrigin"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEImageElement__preserveAspectRatio"> + <tbody id="sInterfaceSVGFEImageElement.#SVGFEImageElement__preserveAspectRatio"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEMergeNodeElement__in1"> + <tbody id="sInterfaceSVGFEMergeNodeElement.#SVGFEMergeNodeElement__in1"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEMorphologyElement__SVG_MORPHOLOGY_OPERATOR_DILATE"> + <tbody id="sInterfaceSVGFEMorphologyElement.#SVGFEMorphologyElement__SVG_MORPHOLOGY_OPERATOR_DILATE"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEMorphologyElement__SVG_MORPHOLOGY_OPERATOR_ERODE"> + <tbody id="sInterfaceSVGFEMorphologyElement.#SVGFEMorphologyElement__SVG_MORPHOLOGY_OPERATOR_ERODE"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEMorphologyElement__SVG_MORPHOLOGY_OPERATOR_UNKNOWN"> + <tbody id="sInterfaceSVGFEMorphologyElement.#SVGFEMorphologyElement__SVG_MORPHOLOGY_OPERATOR_UNKNOWN"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEMorphologyElement__in1"> + <tbody id="sInterfaceSVGFEMorphologyElement.#SVGFEMorphologyElement__in1"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEMorphologyElement__operator"> + <tbody id="sInterfaceSVGFEMorphologyElement.#SVGFEMorphologyElement__operator"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEMorphologyElement__radiusX"> + <tbody id="sInterfaceSVGFEMorphologyElement.#SVGFEMorphologyElement__radiusX"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEMorphologyElement__radiusY"> + <tbody id="sInterfaceSVGFEMorphologyElement.#SVGFEMorphologyElement__radiusY"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEOffsetElement__dx"> + <tbody id="sInterfaceSVGFEOffsetElement.#SVGFEOffsetElement__dx"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEOffsetElement__dy"> + <tbody id="sInterfaceSVGFEOffsetElement.#SVGFEOffsetElement__dy"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEOffsetElement__in1"> + <tbody id="sInterfaceSVGFEOffsetElement.#SVGFEOffsetElement__in1"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEPointLightElement__x"> + <tbody id="sInterfaceSVGFEPointLightElement.#SVGFEPointLightElement__x"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEPointLightElement__y"> + <tbody id="sInterfaceSVGFEPointLightElement.#SVGFEPointLightElement__y"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEPointLightElement__z"> + <tbody id="sInterfaceSVGFEPointLightElement.#SVGFEPointLightElement__z"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFESpecularLightingElement__in1"> + <tbody id="sInterfaceSVGFESpecularLightingElement.#SVGFESpecularLightingElement__in1"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFESpecularLightingElement__kernelUnitLengthX"> + <tbody id="sInterfaceSVGFESpecularLightingElement.#SVGFESpecularLightingElement__kernelUnitLengthX"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFESpecularLightingElement__kernelUnitLengthY"> + <tbody id="sInterfaceSVGFESpecularLightingElement.#SVGFESpecularLightingElement__kernelUnitLengthY"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFESpecularLightingElement__specularConstant"> + <tbody id="sInterfaceSVGFESpecularLightingElement.#SVGFESpecularLightingElement__specularConstant"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFESpecularLightingElement__specularExponent"> + <tbody id="sInterfaceSVGFESpecularLightingElement.#SVGFESpecularLightingElement__specularExponent"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFESpecularLightingElement__surfaceScale"> + <tbody id="sInterfaceSVGFESpecularLightingElement.#SVGFESpecularLightingElement__surfaceScale"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFESpotLightElement__limitingConeAngle"> + <tbody id="sInterfaceSVGFESpotLightElement.#SVGFESpotLightElement__limitingConeAngle"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFESpotLightElement__pointsAtX"> + <tbody id="sInterfaceSVGFESpotLightElement.#SVGFESpotLightElement__pointsAtX"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFESpotLightElement__pointsAtY"> + <tbody id="sInterfaceSVGFESpotLightElement.#SVGFESpotLightElement__pointsAtY"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFESpotLightElement__pointsAtZ"> + <tbody id="sInterfaceSVGFESpotLightElement.#SVGFESpotLightElement__pointsAtZ"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFESpotLightElement__specularExponent"> + <tbody id="sInterfaceSVGFESpotLightElement.#SVGFESpotLightElement__specularExponent"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFESpotLightElement__x"> + <tbody id="sInterfaceSVGFESpotLightElement.#SVGFESpotLightElement__x"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFESpotLightElement__y"> + <tbody id="sInterfaceSVGFESpotLightElement.#SVGFESpotLightElement__y"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFESpotLightElement__z"> + <tbody id="sInterfaceSVGFESpotLightElement.#SVGFESpotLightElement__z"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFETileElement__in1"> + <tbody id="sInterfaceSVGFETileElement.#SVGFETileElement__in1"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFETurbulenceElement__SVG_STITCHTYPE_NOSTITCH"> + <tbody id="sInterfaceSVGFETurbulenceElement.#SVGFETurbulenceElement__SVG_STITCHTYPE_NOSTITCH"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFETurbulenceElement__SVG_STITCHTYPE_STITCH"> + <tbody id="sInterfaceSVGFETurbulenceElement.#SVGFETurbulenceElement__SVG_STITCHTYPE_STITCH"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFETurbulenceElement__SVG_STITCHTYPE_UNKNOWN"> + <tbody id="sInterfaceSVGFETurbulenceElement.#SVGFETurbulenceElement__SVG_STITCHTYPE_UNKNOWN"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFETurbulenceElement__SVG_TURBULENCE_TYPE_FRACTALNOISE"> + <tbody id="sInterfaceSVGFETurbulenceElement.#SVGFETurbulenceElement__SVG_TURBULENCE_TYPE_FRACTALNOISE"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFETurbulenceElement__SVG_TURBULENCE_TYPE_TURBULENCE"> + <tbody id="sInterfaceSVGFETurbulenceElement.#SVGFETurbulenceElement__SVG_TURBULENCE_TYPE_TURBULENCE"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFETurbulenceElement__SVG_TURBULENCE_TYPE_UNKNOWN"> + <tbody id="sInterfaceSVGFETurbulenceElement.#SVGFETurbulenceElement__SVG_TURBULENCE_TYPE_UNKNOWN"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFETurbulenceElement__baseFrequencyX"> + <tbody id="sInterfaceSVGFETurbulenceElement.#SVGFETurbulenceElement__baseFrequencyX"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFETurbulenceElement__baseFrequencyY"> + <tbody id="sInterfaceSVGFETurbulenceElement.#SVGFETurbulenceElement__baseFrequencyY"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFETurbulenceElement__numOctaves"> + <tbody id="sInterfaceSVGFETurbulenceElement.#SVGFETurbulenceElement__numOctaves"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFETurbulenceElement__seed"> + <tbody id="sInterfaceSVGFETurbulenceElement.#SVGFETurbulenceElement__seed"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFETurbulenceElement__stitchTiles"> + <tbody id="sInterfaceSVGFETurbulenceElement.#SVGFETurbulenceElement__stitchTiles"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFETurbulenceElement__type"> + <tbody id="sInterfaceSVGFETurbulenceElement.#SVGFETurbulenceElement__type"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFilterElement__filterUnits"> + <tbody id="sInterfaceSVGFilterElement.#SVGFilterElement__filterUnits"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFilterElement__height"> + <tbody id="sInterfaceSVGFilterElement.#SVGFilterElement__height"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFilterElement__primitiveUnits"> + <tbody id="sInterfaceSVGFilterElement.#SVGFilterElement__primitiveUnits"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFilterElement__width"> + <tbody id="sInterfaceSVGFilterElement.#SVGFilterElement__width"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFilterElement__x"> + <tbody id="sInterfaceSVGFilterElement.#SVGFilterElement__x"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFilterElement__y"> + <tbody id="sInterfaceSVGFilterElement.#SVGFilterElement__y"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFilterPrimitiveStandardAttributes__height"> + <tbody id="sInterfaceSVGFilterPrimitiveStandardAttributes.#SVGFilterPrimitiveStandardAttributes__height"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFilterPrimitiveStandardAttributes__result"> + <tbody id="sInterfaceSVGFilterPrimitiveStandardAttributes.#SVGFilterPrimitiveStandardAttributes__result"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFilterPrimitiveStandardAttributes__width"> + <tbody id="sInterfaceSVGFilterPrimitiveStandardAttributes.#SVGFilterPrimitiveStandardAttributes__width"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFilterPrimitiveStandardAttributes__x"> + <tbody id="sInterfaceSVGFilterPrimitiveStandardAttributes.#SVGFilterPrimitiveStandardAttributes__x"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFilterPrimitiveStandardAttributes__y"> + <tbody id="sInterfaceSVGFilterPrimitiveStandardAttributes.#SVGFilterPrimitiveStandardAttributes__y"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conformance-classes"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conventions"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#experimental"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#partial"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#testing"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-artd"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css3-animations"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css3color"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-porterduff"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-compositing"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-compositing-1"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css21"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3bg"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3val"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-html5"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-rfc2119"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-svg11"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#informative"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#normative"> + <!-- 0 tests --> + </tbody> + <tbody id="sstatus.#w3c_process_revision"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/filters-1_dev/xhtml1/chapter-14.xht b/tests/wpt/css-tests/filters-1_dev/xhtml1/chapter-14.xht index fc1feb13549..10a585b2781 100644 --- a/tests/wpt/css-tests/filters-1_dev/xhtml1/chapter-14.xht +++ b/tests/wpt/css-tests/filters-1_dev/xhtml1/chapter-14.xht @@ -63,75 +63,21 @@ <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-artd"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-compositing"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-compositing-1"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css21"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3-animations"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3bg"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3color"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-css3val"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-html5"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-porterduff"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-rfc2119"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#biblio-svg11"> - <!-- 0 tests --> - </tbody> <tbody id="s.#changes"> <!-- 0 tests --> </tbody> <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> - <!-- 0 tests --> - </tbody> <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#experimental"> - <!-- 0 tests --> - </tbody> <tbody id="s.#idl-index"> <!-- 0 tests --> </tbody> <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#normative"> - <!-- 0 tests --> - </tbody> - <tbody id="s.#partial"> - <!-- 0 tests --> - </tbody> <tbody id="s.#property-index"> <!-- 0 tests --> </tbody> @@ -144,15 +90,9 @@ <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> - <!-- 0 tests --> - </tbody> <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> - <!-- 0 tests --> - </tbody> </table> </body> diff --git a/tests/wpt/css-tests/filters-1_dev/xhtml1/chapter-B.xht b/tests/wpt/css-tests/filters-1_dev/xhtml1/chapter-B.xht index 4e6fc83d21c..bee5c6d746d 100644 --- a/tests/wpt/css-tests/filters-1_dev/xhtml1/chapter-B.xht +++ b/tests/wpt/css-tests/filters-1_dev/xhtml1/chapter-B.xht @@ -117,442 +117,502 @@ <tbody id="sB.#InterfaceSVGFilterPrimitiveStandardAttributes"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGComponentTransferFunctionElement__SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE"> + <tbody id="sInterfaceSVGComponentTransferFunctionElement.#SVGComponentTransferFunctionElement__SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGComponentTransferFunctionElement__SVG_FECOMPONENTTRANSFER_TYPE_GAMMA"> + <tbody id="sInterfaceSVGComponentTransferFunctionElement.#SVGComponentTransferFunctionElement__SVG_FECOMPONENTTRANSFER_TYPE_GAMMA"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGComponentTransferFunctionElement__SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY"> + <tbody id="sInterfaceSVGComponentTransferFunctionElement.#SVGComponentTransferFunctionElement__SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGComponentTransferFunctionElement__SVG_FECOMPONENTTRANSFER_TYPE_LINEAR"> + <tbody id="sInterfaceSVGComponentTransferFunctionElement.#SVGComponentTransferFunctionElement__SVG_FECOMPONENTTRANSFER_TYPE_LINEAR"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGComponentTransferFunctionElement__SVG_FECOMPONENTTRANSFER_TYPE_TABLE"> + <tbody id="sInterfaceSVGComponentTransferFunctionElement.#SVGComponentTransferFunctionElement__SVG_FECOMPONENTTRANSFER_TYPE_TABLE"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGComponentTransferFunctionElement__SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN"> + <tbody id="sInterfaceSVGComponentTransferFunctionElement.#SVGComponentTransferFunctionElement__SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGComponentTransferFunctionElement__amplitude"> + <tbody id="sInterfaceSVGComponentTransferFunctionElement.#SVGComponentTransferFunctionElement__amplitude"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGComponentTransferFunctionElement__exponent"> + <tbody id="sInterfaceSVGComponentTransferFunctionElement.#SVGComponentTransferFunctionElement__exponent"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGComponentTransferFunctionElement__intercept"> + <tbody id="sInterfaceSVGComponentTransferFunctionElement.#SVGComponentTransferFunctionElement__intercept"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGComponentTransferFunctionElement__offset"> + <tbody id="sInterfaceSVGComponentTransferFunctionElement.#SVGComponentTransferFunctionElement__offset"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGComponentTransferFunctionElement__slope"> + <tbody id="sInterfaceSVGComponentTransferFunctionElement.#SVGComponentTransferFunctionElement__slope"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGComponentTransferFunctionElement__tableValues"> + <tbody id="sInterfaceSVGComponentTransferFunctionElement.#SVGComponentTransferFunctionElement__tableValues"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGComponentTransferFunctionElement__type"> + <tbody id="sInterfaceSVGComponentTransferFunctionElement.#SVGComponentTransferFunctionElement__type"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEBlendElement__SVG_FEBLEND_MODE_DARKEN"> + <tbody id="sInterfaceSVGFEBlendElement.#SVGFEBlendElement__SVG_FEBLEND_MODE_DARKEN"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEBlendElement__SVG_FEBLEND_MODE_LIGHTEN"> + <tbody id="sInterfaceSVGFEBlendElement.#SVGFEBlendElement__SVG_FEBLEND_MODE_LIGHTEN"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEBlendElement__SVG_FEBLEND_MODE_MULTIPLY"> + <tbody id="sInterfaceSVGFEBlendElement.#SVGFEBlendElement__SVG_FEBLEND_MODE_MULTIPLY"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEBlendElement__SVG_FEBLEND_MODE_NORMAL"> + <tbody id="sInterfaceSVGFEBlendElement.#SVGFEBlendElement__SVG_FEBLEND_MODE_NORMAL"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEBlendElement__SVG_FEBLEND_MODE_SCREEN"> + <tbody id="sInterfaceSVGFEBlendElement.#SVGFEBlendElement__SVG_FEBLEND_MODE_SCREEN"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEBlendElement__SVG_FEBLEND_MODE_UNKNOWN"> + <tbody id="sInterfaceSVGFEBlendElement.#SVGFEBlendElement__SVG_FEBLEND_MODE_UNKNOWN"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEBlendElement__in1"> + <tbody id="sInterfaceSVGFEBlendElement.#SVGFEBlendElement__in1"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEBlendElement__in2"> + <tbody id="sInterfaceSVGFEBlendElement.#SVGFEBlendElement__in2"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEBlendElement__mode"> + <tbody id="sInterfaceSVGFEBlendElement.#SVGFEBlendElement__mode"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEColorMatrixElement__SVG_FECOLORMATRIX_TYPE_HUEROTATE"> + <tbody id="sInterfaceSVGFEColorMatrixElement.#SVGFEColorMatrixElement__SVG_FECOLORMATRIX_TYPE_HUEROTATE"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEColorMatrixElement__SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA"> + <tbody id="sInterfaceSVGFEColorMatrixElement.#SVGFEColorMatrixElement__SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEColorMatrixElement__SVG_FECOLORMATRIX_TYPE_MATRIX"> + <tbody id="sInterfaceSVGFEColorMatrixElement.#SVGFEColorMatrixElement__SVG_FECOLORMATRIX_TYPE_MATRIX"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEColorMatrixElement__SVG_FECOLORMATRIX_TYPE_SATURATE"> + <tbody id="sInterfaceSVGFEColorMatrixElement.#SVGFEColorMatrixElement__SVG_FECOLORMATRIX_TYPE_SATURATE"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEColorMatrixElement__SVG_FECOLORMATRIX_TYPE_UNKNOWN"> + <tbody id="sInterfaceSVGFEColorMatrixElement.#SVGFEColorMatrixElement__SVG_FECOLORMATRIX_TYPE_UNKNOWN"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEColorMatrixElement__in1"> + <tbody id="sInterfaceSVGFEColorMatrixElement.#SVGFEColorMatrixElement__in1"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEColorMatrixElement__type"> + <tbody id="sInterfaceSVGFEColorMatrixElement.#SVGFEColorMatrixElement__type"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEColorMatrixElement__values"> + <tbody id="sInterfaceSVGFEColorMatrixElement.#SVGFEColorMatrixElement__values"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEComponentTransferElement__in1"> + <tbody id="sInterfaceSVGFEComponentTransferElement.#SVGFEComponentTransferElement__in1"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFECompositeElement__SVG_FECOMPOSITE_OPERATOR_ARITHMETIC"> + <tbody id="sInterfaceSVGFECompositeElement.#SVGFECompositeElement__SVG_FECOMPOSITE_OPERATOR_ARITHMETIC"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFECompositeElement__SVG_FECOMPOSITE_OPERATOR_ATOP"> + <tbody id="sInterfaceSVGFECompositeElement.#SVGFECompositeElement__SVG_FECOMPOSITE_OPERATOR_ATOP"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFECompositeElement__SVG_FECOMPOSITE_OPERATOR_IN"> + <tbody id="sInterfaceSVGFECompositeElement.#SVGFECompositeElement__SVG_FECOMPOSITE_OPERATOR_IN"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFECompositeElement__SVG_FECOMPOSITE_OPERATOR_OUT"> + <tbody id="sInterfaceSVGFECompositeElement.#SVGFECompositeElement__SVG_FECOMPOSITE_OPERATOR_OUT"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFECompositeElement__SVG_FECOMPOSITE_OPERATOR_OVER"> + <tbody id="sInterfaceSVGFECompositeElement.#SVGFECompositeElement__SVG_FECOMPOSITE_OPERATOR_OVER"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFECompositeElement__SVG_FECOMPOSITE_OPERATOR_UNKNOWN"> + <tbody id="sInterfaceSVGFECompositeElement.#SVGFECompositeElement__SVG_FECOMPOSITE_OPERATOR_UNKNOWN"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFECompositeElement__SVG_FECOMPOSITE_OPERATOR_XOR"> + <tbody id="sInterfaceSVGFECompositeElement.#SVGFECompositeElement__SVG_FECOMPOSITE_OPERATOR_XOR"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFECompositeElement__in1"> + <tbody id="sInterfaceSVGFECompositeElement.#SVGFECompositeElement__in1"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFECompositeElement__in2"> + <tbody id="sInterfaceSVGFECompositeElement.#SVGFECompositeElement__in2"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFECompositeElement__k1"> + <tbody id="sInterfaceSVGFECompositeElement.#SVGFECompositeElement__k1"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFECompositeElement__k2"> + <tbody id="sInterfaceSVGFECompositeElement.#SVGFECompositeElement__k2"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFECompositeElement__k3"> + <tbody id="sInterfaceSVGFECompositeElement.#SVGFECompositeElement__k3"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFECompositeElement__k4"> + <tbody id="sInterfaceSVGFECompositeElement.#SVGFECompositeElement__k4"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFECompositeElement__operator"> + <tbody id="sInterfaceSVGFECompositeElement.#SVGFECompositeElement__operator"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEConvolveMatrixElement__SVG_EDGEMODE_DUPLICATE"> + <tbody id="sInterfaceSVGFEConvolveMatrixElement.#SVGFEConvolveMatrixElement__SVG_EDGEMODE_DUPLICATE"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEConvolveMatrixElement__SVG_EDGEMODE_NONE"> + <tbody id="sInterfaceSVGFEConvolveMatrixElement.#SVGFEConvolveMatrixElement__SVG_EDGEMODE_NONE"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEConvolveMatrixElement__SVG_EDGEMODE_UNKNOWN"> + <tbody id="sInterfaceSVGFEConvolveMatrixElement.#SVGFEConvolveMatrixElement__SVG_EDGEMODE_UNKNOWN"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEConvolveMatrixElement__SVG_EDGEMODE_WRAP"> + <tbody id="sInterfaceSVGFEConvolveMatrixElement.#SVGFEConvolveMatrixElement__SVG_EDGEMODE_WRAP"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEConvolveMatrixElement__bias"> + <tbody id="sInterfaceSVGFEConvolveMatrixElement.#SVGFEConvolveMatrixElement__bias"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEConvolveMatrixElement__divisor"> + <tbody id="sInterfaceSVGFEConvolveMatrixElement.#SVGFEConvolveMatrixElement__divisor"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEConvolveMatrixElement__edgeMode"> + <tbody id="sInterfaceSVGFEConvolveMatrixElement.#SVGFEConvolveMatrixElement__edgeMode"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEConvolveMatrixElement__in1"> + <tbody id="sInterfaceSVGFEConvolveMatrixElement.#SVGFEConvolveMatrixElement__in1"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEConvolveMatrixElement__kernelMatrix"> + <tbody id="sInterfaceSVGFEConvolveMatrixElement.#SVGFEConvolveMatrixElement__kernelMatrix"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEConvolveMatrixElement__kernelUnitLengthX"> + <tbody id="sInterfaceSVGFEConvolveMatrixElement.#SVGFEConvolveMatrixElement__kernelUnitLengthX"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEConvolveMatrixElement__kernelUnitLengthY"> + <tbody id="sInterfaceSVGFEConvolveMatrixElement.#SVGFEConvolveMatrixElement__kernelUnitLengthY"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEConvolveMatrixElement__orderX"> + <tbody id="sInterfaceSVGFEConvolveMatrixElement.#SVGFEConvolveMatrixElement__orderX"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEConvolveMatrixElement__orderY"> + <tbody id="sInterfaceSVGFEConvolveMatrixElement.#SVGFEConvolveMatrixElement__orderY"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEConvolveMatrixElement__targetX"> + <tbody id="sInterfaceSVGFEConvolveMatrixElement.#SVGFEConvolveMatrixElement__targetX"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEConvolveMatrixElement__targetY"> + <tbody id="sInterfaceSVGFEConvolveMatrixElement.#SVGFEConvolveMatrixElement__targetY"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDiffuseLightingElement__diffuseConstant"> + <tbody id="sInterfaceSVGFEDiffuseLightingElement.#SVGFEDiffuseLightingElement__diffuseConstant"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDiffuseLightingElement__in1"> + <tbody id="sInterfaceSVGFEDiffuseLightingElement.#SVGFEDiffuseLightingElement__in1"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDiffuseLightingElement__kernelUnitLengthX"> + <tbody id="sInterfaceSVGFEDiffuseLightingElement.#SVGFEDiffuseLightingElement__kernelUnitLengthX"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDiffuseLightingElement__kernelUnitLengthY"> + <tbody id="sInterfaceSVGFEDiffuseLightingElement.#SVGFEDiffuseLightingElement__kernelUnitLengthY"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDiffuseLightingElement__surfaceScale"> + <tbody id="sInterfaceSVGFEDiffuseLightingElement.#SVGFEDiffuseLightingElement__surfaceScale"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDisplacementMapElement__SVG_CHANNEL_A"> + <tbody id="sInterfaceSVGFEDisplacementMapElement.#SVGFEDisplacementMapElement__SVG_CHANNEL_A"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDisplacementMapElement__SVG_CHANNEL_B"> + <tbody id="sInterfaceSVGFEDisplacementMapElement.#SVGFEDisplacementMapElement__SVG_CHANNEL_B"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDisplacementMapElement__SVG_CHANNEL_G"> + <tbody id="sInterfaceSVGFEDisplacementMapElement.#SVGFEDisplacementMapElement__SVG_CHANNEL_G"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDisplacementMapElement__SVG_CHANNEL_R"> + <tbody id="sInterfaceSVGFEDisplacementMapElement.#SVGFEDisplacementMapElement__SVG_CHANNEL_R"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDisplacementMapElement__SVG_CHANNEL_UNKNOWN"> + <tbody id="sInterfaceSVGFEDisplacementMapElement.#SVGFEDisplacementMapElement__SVG_CHANNEL_UNKNOWN"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDisplacementMapElement__in1"> + <tbody id="sInterfaceSVGFEDisplacementMapElement.#SVGFEDisplacementMapElement__in1"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDisplacementMapElement__in2"> + <tbody id="sInterfaceSVGFEDisplacementMapElement.#SVGFEDisplacementMapElement__in2"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDisplacementMapElement__scale"> + <tbody id="sInterfaceSVGFEDisplacementMapElement.#SVGFEDisplacementMapElement__scale"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDisplacementMapElement__xChannelSelector"> + <tbody id="sInterfaceSVGFEDisplacementMapElement.#SVGFEDisplacementMapElement__xChannelSelector"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDisplacementMapElement__yChannelSelector"> + <tbody id="sInterfaceSVGFEDisplacementMapElement.#SVGFEDisplacementMapElement__yChannelSelector"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDistantLightElement__azimuth"> + <tbody id="sInterfaceSVGFEDistantLightElement.#SVGFEDistantLightElement__azimuth"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDistantLightElement__elevation"> + <tbody id="sInterfaceSVGFEDistantLightElement.#SVGFEDistantLightElement__elevation"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDropShadowElement__dx"> + <tbody id="sInterfaceSVGFEDropShadowElement.#SVGFEDropShadowElement__dx"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDropShadowElement__dy"> + <tbody id="sInterfaceSVGFEDropShadowElement.#SVGFEDropShadowElement__dy"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDropShadowElement__in1"> + <tbody id="sInterfaceSVGFEDropShadowElement.#SVGFEDropShadowElement__in1"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDropShadowElement__setStdDeviation"> + <tbody id="sInterfaceSVGFEDropShadowElement.#SVGFEDropShadowElement__setStdDeviation"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDropShadowElement__stdDeviationX"> + <tbody id="sInterfaceSVGFEDropShadowElement.#SVGFEDropShadowElement__stdDeviationX"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEDropShadowElement__stdDeviationY"> + <tbody id="sInterfaceSVGFEDropShadowElement.#SVGFEDropShadowElement__stdDeviationY"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEGaussianBlurElement__SVG_EDGEMODE_DUPLICATE"> + <tbody id="sInterfaceSVGFEGaussianBlurElement.#SVGFEGaussianBlurElement__SVG_EDGEMODE_DUPLICATE"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEGaussianBlurElement__SVG_EDGEMODE_NONE"> + <tbody id="sInterfaceSVGFEGaussianBlurElement.#SVGFEGaussianBlurElement__SVG_EDGEMODE_NONE"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEGaussianBlurElement__SVG_EDGEMODE_UNKNOWN"> + <tbody id="sInterfaceSVGFEGaussianBlurElement.#SVGFEGaussianBlurElement__SVG_EDGEMODE_UNKNOWN"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEGaussianBlurElement__SVG_EDGEMODE_WRAP"> + <tbody id="sInterfaceSVGFEGaussianBlurElement.#SVGFEGaussianBlurElement__SVG_EDGEMODE_WRAP"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEGaussianBlurElement__edgeMode"> + <tbody id="sInterfaceSVGFEGaussianBlurElement.#SVGFEGaussianBlurElement__edgeMode"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEGaussianBlurElement__in1"> + <tbody id="sInterfaceSVGFEGaussianBlurElement.#SVGFEGaussianBlurElement__in1"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEGaussianBlurElement__setStdDeviation"> + <tbody id="sInterfaceSVGFEGaussianBlurElement.#SVGFEGaussianBlurElement__setStdDeviation"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEGaussianBlurElement__stdDeviationX"> + <tbody id="sInterfaceSVGFEGaussianBlurElement.#SVGFEGaussianBlurElement__stdDeviationX"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEGaussianBlurElement__stdDeviationY"> + <tbody id="sInterfaceSVGFEGaussianBlurElement.#SVGFEGaussianBlurElement__stdDeviationY"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEImageElement__crossOrigin"> + <tbody id="sInterfaceSVGFEImageElement.#SVGFEImageElement__crossOrigin"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEImageElement__preserveAspectRatio"> + <tbody id="sInterfaceSVGFEImageElement.#SVGFEImageElement__preserveAspectRatio"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEMergeNodeElement__in1"> + <tbody id="sInterfaceSVGFEMergeNodeElement.#SVGFEMergeNodeElement__in1"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEMorphologyElement__SVG_MORPHOLOGY_OPERATOR_DILATE"> + <tbody id="sInterfaceSVGFEMorphologyElement.#SVGFEMorphologyElement__SVG_MORPHOLOGY_OPERATOR_DILATE"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEMorphologyElement__SVG_MORPHOLOGY_OPERATOR_ERODE"> + <tbody id="sInterfaceSVGFEMorphologyElement.#SVGFEMorphologyElement__SVG_MORPHOLOGY_OPERATOR_ERODE"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEMorphologyElement__SVG_MORPHOLOGY_OPERATOR_UNKNOWN"> + <tbody id="sInterfaceSVGFEMorphologyElement.#SVGFEMorphologyElement__SVG_MORPHOLOGY_OPERATOR_UNKNOWN"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEMorphologyElement__in1"> + <tbody id="sInterfaceSVGFEMorphologyElement.#SVGFEMorphologyElement__in1"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEMorphologyElement__operator"> + <tbody id="sInterfaceSVGFEMorphologyElement.#SVGFEMorphologyElement__operator"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEMorphologyElement__radiusX"> + <tbody id="sInterfaceSVGFEMorphologyElement.#SVGFEMorphologyElement__radiusX"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEMorphologyElement__radiusY"> + <tbody id="sInterfaceSVGFEMorphologyElement.#SVGFEMorphologyElement__radiusY"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEOffsetElement__dx"> + <tbody id="sInterfaceSVGFEOffsetElement.#SVGFEOffsetElement__dx"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEOffsetElement__dy"> + <tbody id="sInterfaceSVGFEOffsetElement.#SVGFEOffsetElement__dy"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEOffsetElement__in1"> + <tbody id="sInterfaceSVGFEOffsetElement.#SVGFEOffsetElement__in1"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEPointLightElement__x"> + <tbody id="sInterfaceSVGFEPointLightElement.#SVGFEPointLightElement__x"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEPointLightElement__y"> + <tbody id="sInterfaceSVGFEPointLightElement.#SVGFEPointLightElement__y"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFEPointLightElement__z"> + <tbody id="sInterfaceSVGFEPointLightElement.#SVGFEPointLightElement__z"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFESpecularLightingElement__in1"> + <tbody id="sInterfaceSVGFESpecularLightingElement.#SVGFESpecularLightingElement__in1"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFESpecularLightingElement__kernelUnitLengthX"> + <tbody id="sInterfaceSVGFESpecularLightingElement.#SVGFESpecularLightingElement__kernelUnitLengthX"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFESpecularLightingElement__kernelUnitLengthY"> + <tbody id="sInterfaceSVGFESpecularLightingElement.#SVGFESpecularLightingElement__kernelUnitLengthY"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFESpecularLightingElement__specularConstant"> + <tbody id="sInterfaceSVGFESpecularLightingElement.#SVGFESpecularLightingElement__specularConstant"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFESpecularLightingElement__specularExponent"> + <tbody id="sInterfaceSVGFESpecularLightingElement.#SVGFESpecularLightingElement__specularExponent"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFESpecularLightingElement__surfaceScale"> + <tbody id="sInterfaceSVGFESpecularLightingElement.#SVGFESpecularLightingElement__surfaceScale"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFESpotLightElement__limitingConeAngle"> + <tbody id="sInterfaceSVGFESpotLightElement.#SVGFESpotLightElement__limitingConeAngle"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFESpotLightElement__pointsAtX"> + <tbody id="sInterfaceSVGFESpotLightElement.#SVGFESpotLightElement__pointsAtX"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFESpotLightElement__pointsAtY"> + <tbody id="sInterfaceSVGFESpotLightElement.#SVGFESpotLightElement__pointsAtY"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFESpotLightElement__pointsAtZ"> + <tbody id="sInterfaceSVGFESpotLightElement.#SVGFESpotLightElement__pointsAtZ"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFESpotLightElement__specularExponent"> + <tbody id="sInterfaceSVGFESpotLightElement.#SVGFESpotLightElement__specularExponent"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFESpotLightElement__x"> + <tbody id="sInterfaceSVGFESpotLightElement.#SVGFESpotLightElement__x"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFESpotLightElement__y"> + <tbody id="sInterfaceSVGFESpotLightElement.#SVGFESpotLightElement__y"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFESpotLightElement__z"> + <tbody id="sInterfaceSVGFESpotLightElement.#SVGFESpotLightElement__z"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFETileElement__in1"> + <tbody id="sInterfaceSVGFETileElement.#SVGFETileElement__in1"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFETurbulenceElement__SVG_STITCHTYPE_NOSTITCH"> + <tbody id="sInterfaceSVGFETurbulenceElement.#SVGFETurbulenceElement__SVG_STITCHTYPE_NOSTITCH"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFETurbulenceElement__SVG_STITCHTYPE_STITCH"> + <tbody id="sInterfaceSVGFETurbulenceElement.#SVGFETurbulenceElement__SVG_STITCHTYPE_STITCH"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFETurbulenceElement__SVG_STITCHTYPE_UNKNOWN"> + <tbody id="sInterfaceSVGFETurbulenceElement.#SVGFETurbulenceElement__SVG_STITCHTYPE_UNKNOWN"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFETurbulenceElement__SVG_TURBULENCE_TYPE_FRACTALNOISE"> + <tbody id="sInterfaceSVGFETurbulenceElement.#SVGFETurbulenceElement__SVG_TURBULENCE_TYPE_FRACTALNOISE"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFETurbulenceElement__SVG_TURBULENCE_TYPE_TURBULENCE"> + <tbody id="sInterfaceSVGFETurbulenceElement.#SVGFETurbulenceElement__SVG_TURBULENCE_TYPE_TURBULENCE"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFETurbulenceElement__SVG_TURBULENCE_TYPE_UNKNOWN"> + <tbody id="sInterfaceSVGFETurbulenceElement.#SVGFETurbulenceElement__SVG_TURBULENCE_TYPE_UNKNOWN"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFETurbulenceElement__baseFrequencyX"> + <tbody id="sInterfaceSVGFETurbulenceElement.#SVGFETurbulenceElement__baseFrequencyX"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFETurbulenceElement__baseFrequencyY"> + <tbody id="sInterfaceSVGFETurbulenceElement.#SVGFETurbulenceElement__baseFrequencyY"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFETurbulenceElement__numOctaves"> + <tbody id="sInterfaceSVGFETurbulenceElement.#SVGFETurbulenceElement__numOctaves"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFETurbulenceElement__seed"> + <tbody id="sInterfaceSVGFETurbulenceElement.#SVGFETurbulenceElement__seed"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFETurbulenceElement__stitchTiles"> + <tbody id="sInterfaceSVGFETurbulenceElement.#SVGFETurbulenceElement__stitchTiles"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFETurbulenceElement__type"> + <tbody id="sInterfaceSVGFETurbulenceElement.#SVGFETurbulenceElement__type"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFilterElement__filterUnits"> + <tbody id="sInterfaceSVGFilterElement.#SVGFilterElement__filterUnits"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFilterElement__height"> + <tbody id="sInterfaceSVGFilterElement.#SVGFilterElement__height"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFilterElement__primitiveUnits"> + <tbody id="sInterfaceSVGFilterElement.#SVGFilterElement__primitiveUnits"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFilterElement__width"> + <tbody id="sInterfaceSVGFilterElement.#SVGFilterElement__width"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFilterElement__x"> + <tbody id="sInterfaceSVGFilterElement.#SVGFilterElement__x"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFilterElement__y"> + <tbody id="sInterfaceSVGFilterElement.#SVGFilterElement__y"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFilterPrimitiveStandardAttributes__height"> + <tbody id="sInterfaceSVGFilterPrimitiveStandardAttributes.#SVGFilterPrimitiveStandardAttributes__height"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFilterPrimitiveStandardAttributes__result"> + <tbody id="sInterfaceSVGFilterPrimitiveStandardAttributes.#SVGFilterPrimitiveStandardAttributes__result"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFilterPrimitiveStandardAttributes__width"> + <tbody id="sInterfaceSVGFilterPrimitiveStandardAttributes.#SVGFilterPrimitiveStandardAttributes__width"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFilterPrimitiveStandardAttributes__x"> + <tbody id="sInterfaceSVGFilterPrimitiveStandardAttributes.#SVGFilterPrimitiveStandardAttributes__x"> <!-- 0 tests --> </tbody> - <tbody id="sB.#SVGFilterPrimitiveStandardAttributes__y"> + <tbody id="sInterfaceSVGFilterPrimitiveStandardAttributes.#SVGFilterPrimitiveStandardAttributes__y"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conformance-classes"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#conventions"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#experimental"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#partial"> + <!-- 0 tests --> + </tbody> + <tbody id="sconformance.#testing"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-artd"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css3-animations"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-css3color"> + <!-- 0 tests --> + </tbody> + <tbody id="sinformative.#biblio-porterduff"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-compositing"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-compositing-1"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css21"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3bg"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-css3val"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-html5"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-rfc2119"> + <!-- 0 tests --> + </tbody> + <tbody id="snormative.#biblio-svg11"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#informative"> + <!-- 0 tests --> + </tbody> + <tbody id="sreferences.#normative"> + <!-- 0 tests --> + </tbody> + <tbody id="sstatus.#w3c_process_revision"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/geometry-1_dev/html/chapter-7.htm b/tests/wpt/css-tests/geometry-1_dev/html/chapter-7.htm index 9793130012e..5606de65b61 100644 --- a/tests/wpt/css-tests/geometry-1_dev/html/chapter-7.htm +++ b/tests/wpt/css-tests/geometry-1_dev/html/chapter-7.htm @@ -39,82 +39,82 @@ <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-2dcontext"> + <tbody id="s.#changes"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-transforms"> + <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-html5"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-rfc2119"> + <tbody id="s.#idl-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-svg11"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-typedarray"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-webidl"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#changes"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> + <tbody id="sconformance.#conformance-classes"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="sconformance.#conventions"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> + <tbody id="sconformance.#cr-exit-criteria"> <!-- 0 tests --> </tbody> - <tbody id="s.#cr-exit-criteria"> + <tbody id="sconformance.#experimental"> <!-- 0 tests --> </tbody> - <tbody id="s.#experimental"> + <tbody id="sconformance.#partial"> <!-- 0 tests --> </tbody> - <tbody id="s.#idl-index"> + <tbody id="sconformance.#testing"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="sinformative.#biblio-2dcontext"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="sinformative.#biblio-svg11"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="sinformative.#biblio-typedarray"> <!-- 0 tests --> </tbody> - <tbody id="s.#partial"> + <tbody id="snormative.#biblio-css3-transforms"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="snormative.#biblio-html5"> <!-- 0 tests --> </tbody> - <tbody id="s.#risk"> + <tbody id="snormative.#biblio-rfc2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#biblio-webidl"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="sreferences.#informative"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="sstatus.#risk"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> + <tbody id="sstatus.#w3c_process_revision"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/geometry-1_dev/xhtml1/chapter-7.xht b/tests/wpt/css-tests/geometry-1_dev/xhtml1/chapter-7.xht index 8f698beda3f..65d3843ec10 100644 --- a/tests/wpt/css-tests/geometry-1_dev/xhtml1/chapter-7.xht +++ b/tests/wpt/css-tests/geometry-1_dev/xhtml1/chapter-7.xht @@ -39,82 +39,82 @@ <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-2dcontext"> + <tbody id="s.#changes"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-transforms"> + <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-html5"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-rfc2119"> + <tbody id="s.#idl-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-svg11"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-typedarray"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-webidl"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#changes"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> + <tbody id="sconformance.#conformance-classes"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="sconformance.#conventions"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> + <tbody id="sconformance.#cr-exit-criteria"> <!-- 0 tests --> </tbody> - <tbody id="s.#cr-exit-criteria"> + <tbody id="sconformance.#experimental"> <!-- 0 tests --> </tbody> - <tbody id="s.#experimental"> + <tbody id="sconformance.#partial"> <!-- 0 tests --> </tbody> - <tbody id="s.#idl-index"> + <tbody id="sconformance.#testing"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="sinformative.#biblio-2dcontext"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="sinformative.#biblio-svg11"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="sinformative.#biblio-typedarray"> <!-- 0 tests --> </tbody> - <tbody id="s.#partial"> + <tbody id="snormative.#biblio-css3-transforms"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="snormative.#biblio-html5"> <!-- 0 tests --> </tbody> - <tbody id="s.#risk"> + <tbody id="snormative.#biblio-rfc2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#biblio-webidl"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="sreferences.#informative"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="sstatus.#risk"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> + <tbody id="sstatus.#w3c_process_revision"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/geometry-1_dev/xhtml1print/chapter-7.xht b/tests/wpt/css-tests/geometry-1_dev/xhtml1print/chapter-7.xht index 8f698beda3f..65d3843ec10 100644 --- a/tests/wpt/css-tests/geometry-1_dev/xhtml1print/chapter-7.xht +++ b/tests/wpt/css-tests/geometry-1_dev/xhtml1print/chapter-7.xht @@ -39,82 +39,82 @@ <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-2dcontext"> + <tbody id="s.#changes"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-css3-transforms"> + <tbody id="s.#conformance"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-html5"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-rfc2119"> + <tbody id="s.#idl-index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-svg11"> + <tbody id="s.#index"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-typedarray"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#biblio-webidl"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#changes"> + <tbody id="s.#subtitle"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance"> + <tbody id="s.#title"> <!-- 0 tests --> </tbody> - <tbody id="s.#conformance-classes"> + <tbody id="sconformance.#conformance-classes"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="sconformance.#conventions"> <!-- 0 tests --> </tbody> - <tbody id="s.#conventions"> + <tbody id="sconformance.#cr-exit-criteria"> <!-- 0 tests --> </tbody> - <tbody id="s.#cr-exit-criteria"> + <tbody id="sconformance.#experimental"> <!-- 0 tests --> </tbody> - <tbody id="s.#experimental"> + <tbody id="sconformance.#partial"> <!-- 0 tests --> </tbody> - <tbody id="s.#idl-index"> + <tbody id="sconformance.#testing"> <!-- 0 tests --> </tbody> - <tbody id="s.#index"> + <tbody id="sinformative.#biblio-2dcontext"> <!-- 0 tests --> </tbody> - <tbody id="s.#informative"> + <tbody id="sinformative.#biblio-svg11"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative"> + <tbody id="sinformative.#biblio-typedarray"> <!-- 0 tests --> </tbody> - <tbody id="s.#partial"> + <tbody id="snormative.#biblio-css3-transforms"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="snormative.#biblio-html5"> <!-- 0 tests --> </tbody> - <tbody id="s.#risk"> + <tbody id="snormative.#biblio-rfc2119"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="snormative.#biblio-webidl"> <!-- 0 tests --> </tbody> - <tbody id="s.#subtitle"> + <tbody id="sreferences.#informative"> <!-- 0 tests --> </tbody> - <tbody id="s.#testing"> + <tbody id="sreferences.#normative"> <!-- 0 tests --> </tbody> - <tbody id="s.#title"> + <tbody id="sstatus.#risk"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c_process_revision"> + <tbody id="sstatus.#w3c_process_revision"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/mediaqueries-3_dev/html/chapter-6.htm b/tests/wpt/css-tests/mediaqueries-3_dev/html/chapter-6.htm index 5197a8b41a6..20c0d6807f9 100644 --- a/tests/wpt/css-tests/mediaqueries-3_dev/html/chapter-6.htm +++ b/tests/wpt/css-tests/mediaqueries-3_dev/html/chapter-6.htm @@ -83,49 +83,49 @@ <a href="https://www.w3.org/TR/css3-mediaqueries/#resolution0">6.1 Resolution</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS21"> + <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s.#HTML401"> + <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#HTML5"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#RFC2531"> + <tbody id="s.#media-queries"> <!-- 0 tests --> </tbody> - <tbody id="s.#XMLSTYLE"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#abstract"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#acknowledgments"> + <tbody id="s.#w3c-working"> <!-- 0 tests --> </tbody> - <tbody id="s.#changes"> + <tbody id="snormative-references.#CSS21"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="sother-references.#HTML401"> <!-- 0 tests --> </tbody> - <tbody id="s.#media-queries"> + <tbody id="sother-references.#HTML5"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative-references"> + <tbody id="sother-references.#RFC2531"> <!-- 0 tests --> </tbody> - <tbody id="s.#other-references"> + <tbody id="sother-references.#XMLSTYLE"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="sreferences.#normative-references"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="sreferences.#other-references"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c-working"> + <tbody id="sstatus.#changes"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/mediaqueries-3_dev/xhtml1/chapter-6.xht b/tests/wpt/css-tests/mediaqueries-3_dev/xhtml1/chapter-6.xht index 8a1fc0301da..92d309fe343 100644 --- a/tests/wpt/css-tests/mediaqueries-3_dev/xhtml1/chapter-6.xht +++ b/tests/wpt/css-tests/mediaqueries-3_dev/xhtml1/chapter-6.xht @@ -83,49 +83,49 @@ <a href="https://www.w3.org/TR/css3-mediaqueries/#resolution0">6.1 Resolution</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS21"> + <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s.#HTML401"> + <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#HTML5"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#RFC2531"> + <tbody id="s.#media-queries"> <!-- 0 tests --> </tbody> - <tbody id="s.#XMLSTYLE"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#abstract"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#acknowledgments"> + <tbody id="s.#w3c-working"> <!-- 0 tests --> </tbody> - <tbody id="s.#changes"> + <tbody id="snormative-references.#CSS21"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="sother-references.#HTML401"> <!-- 0 tests --> </tbody> - <tbody id="s.#media-queries"> + <tbody id="sother-references.#HTML5"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative-references"> + <tbody id="sother-references.#RFC2531"> <!-- 0 tests --> </tbody> - <tbody id="s.#other-references"> + <tbody id="sother-references.#XMLSTYLE"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="sreferences.#normative-references"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="sreferences.#other-references"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c-working"> + <tbody id="sstatus.#changes"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/mediaqueries-3_dev/xhtml1print/chapter-6.xht b/tests/wpt/css-tests/mediaqueries-3_dev/xhtml1print/chapter-6.xht index 8a1fc0301da..92d309fe343 100644 --- a/tests/wpt/css-tests/mediaqueries-3_dev/xhtml1print/chapter-6.xht +++ b/tests/wpt/css-tests/mediaqueries-3_dev/xhtml1print/chapter-6.xht @@ -83,49 +83,49 @@ <a href="https://www.w3.org/TR/css3-mediaqueries/#resolution0">6.1 Resolution</a></th></tr> <!-- 0 tests --> </tbody> - <tbody id="s.#CSS21"> + <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s.#HTML401"> + <tbody id="s.#acknowledgments"> <!-- 0 tests --> </tbody> - <tbody id="s.#HTML5"> + <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#RFC2531"> + <tbody id="s.#media-queries"> <!-- 0 tests --> </tbody> - <tbody id="s.#XMLSTYLE"> + <tbody id="s.#references"> <!-- 0 tests --> </tbody> - <tbody id="s.#abstract"> + <tbody id="s.#status"> <!-- 0 tests --> </tbody> - <tbody id="s.#acknowledgments"> + <tbody id="s.#w3c-working"> <!-- 0 tests --> </tbody> - <tbody id="s.#changes"> + <tbody id="snormative-references.#CSS21"> <!-- 0 tests --> </tbody> - <tbody id="s.#contents"> + <tbody id="sother-references.#HTML401"> <!-- 0 tests --> </tbody> - <tbody id="s.#media-queries"> + <tbody id="sother-references.#HTML5"> <!-- 0 tests --> </tbody> - <tbody id="s.#normative-references"> + <tbody id="sother-references.#RFC2531"> <!-- 0 tests --> </tbody> - <tbody id="s.#other-references"> + <tbody id="sother-references.#XMLSTYLE"> <!-- 0 tests --> </tbody> - <tbody id="s.#references"> + <tbody id="sreferences.#normative-references"> <!-- 0 tests --> </tbody> - <tbody id="s.#status"> + <tbody id="sreferences.#other-references"> <!-- 0 tests --> </tbody> - <tbody id="s.#w3c-working"> + <tbody id="sstatus.#changes"> <!-- 0 tests --> </tbody> </table> diff --git a/tests/wpt/css-tests/selectors-3_dev/html/chapter-15.htm b/tests/wpt/css-tests/selectors-3_dev/html/chapter-15.htm index a020c6c1564..d6fd1f5ac05 100644 --- a/tests/wpt/css-tests/selectors-3_dev/html/chapter-15.htm +++ b/tests/wpt/css-tests/selectors-3_dev/html/chapter-15.htm @@ -93,15 +93,9 @@ <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s.#changes"> - <!-- 0 tests --> - </tbody> <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#editors-list"> - <!-- 0 tests --> - </tbody> <tbody id="s.#longstatus-date"> <!-- 0 tests --> </tbody> @@ -111,6 +105,12 @@ <tbody id="s.#title"> <!-- 0 tests --> </tbody> + <tbody id="slongstatus-date.#editors-list"> + <!-- 0 tests --> + </tbody> + <tbody id="sstatus.#changes"> + <!-- 0 tests --> + </tbody> </table> </body> diff --git a/tests/wpt/css-tests/selectors-3_dev/xhtml1/chapter-15.xht b/tests/wpt/css-tests/selectors-3_dev/xhtml1/chapter-15.xht index 19ba430efc9..5aec2ebc6af 100644 --- a/tests/wpt/css-tests/selectors-3_dev/xhtml1/chapter-15.xht +++ b/tests/wpt/css-tests/selectors-3_dev/xhtml1/chapter-15.xht @@ -93,15 +93,9 @@ <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s.#changes"> - <!-- 0 tests --> - </tbody> <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#editors-list"> - <!-- 0 tests --> - </tbody> <tbody id="s.#longstatus-date"> <!-- 0 tests --> </tbody> @@ -111,6 +105,12 @@ <tbody id="s.#title"> <!-- 0 tests --> </tbody> + <tbody id="slongstatus-date.#editors-list"> + <!-- 0 tests --> + </tbody> + <tbody id="sstatus.#changes"> + <!-- 0 tests --> + </tbody> </table> </body> diff --git a/tests/wpt/css-tests/selectors-3_dev/xhtml1print/chapter-15.xht b/tests/wpt/css-tests/selectors-3_dev/xhtml1print/chapter-15.xht index 19ba430efc9..5aec2ebc6af 100644 --- a/tests/wpt/css-tests/selectors-3_dev/xhtml1print/chapter-15.xht +++ b/tests/wpt/css-tests/selectors-3_dev/xhtml1print/chapter-15.xht @@ -93,15 +93,9 @@ <tbody id="s.#abstract"> <!-- 0 tests --> </tbody> - <tbody id="s.#changes"> - <!-- 0 tests --> - </tbody> <tbody id="s.#contents"> <!-- 0 tests --> </tbody> - <tbody id="s.#editors-list"> - <!-- 0 tests --> - </tbody> <tbody id="s.#longstatus-date"> <!-- 0 tests --> </tbody> @@ -111,6 +105,12 @@ <tbody id="s.#title"> <!-- 0 tests --> </tbody> + <tbody id="slongstatus-date.#editors-list"> + <!-- 0 tests --> + </tbody> + <tbody id="sstatus.#changes"> + <!-- 0 tests --> + </tbody> </table> </body> diff --git a/tests/wpt/css-tests/selectors-4_dev/html/chapter-12.htm b/tests/wpt/css-tests/selectors-4_dev/html/chapter-12.htm index 5d03b23fbb5..287b8e030ab 100644 --- a/tests/wpt/css-tests/selectors-4_dev/html/chapter-12.htm +++ b/tests/wpt/css-tests/selectors-4_dev/html/chapter-12.htm @@ -13,7 +13,7 @@ <body> <h1>Selectors Level 4 CR Test Suite</h1> - <h2>Tree-Structural pseudo-classes (0 tests)</h2> + <h2>Tree-Structural pseudo-classes (1 tests)</h2> <table width="100%"> <col id="test-column"> <col id="refs-column"> @@ -175,7 +175,7 @@ <tr><th colspan="4" scope="rowgroup"> <a href="#s12.6.3">+</a> <a href="https://www.w3.org/TR/selectors4/#the-first-of-type-pseudo">12.6.3 :first-of-type pseudo-class</a></th></tr> - <!-- 0 tests --> + <!-- 1 tests --> </tbody> <tbody id="s12.6.3.#first-of-type-pseudo"> <!-- 0 tests --> diff --git a/tests/wpt/css-tests/selectors-4_dev/html/reference/of-type-selectors-ref.htm b/tests/wpt/css-tests/selectors-4_dev/html/reference/of-type-selectors-ref.htm new file mode 100644 index 00000000000..d813f339a95 --- /dev/null +++ b/tests/wpt/css-tests/selectors-4_dev/html/reference/of-type-selectors-ref.htm @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html lang="en" lang="en"> +<head> +<title>Selectors Level 4: :first-of-type</title> +<link rel="author" title="Ms2ger" href="mailto:Ms2ger@gmail.com"> +<style type="text/css"> +div > *|* { + display: block; + color: black; + border: thin solid; + margin: 1em; +} +.yellow { + background: yellow; +} +.green { + background: lime; +} +</style> +</head> +<body> +<div> +<p class="green">This line should have a green background.</p> +<p class="yellow">This line should have a yellow background.</p> +<p class="yellow">This line should have a yellow background.</p> +<p class="green">This line should have a green background.</p> +<p class="green">This line should have a green background.</p> +</div> +</body> +</html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/selectors-4_dev/html/reftest.list b/tests/wpt/css-tests/selectors-4_dev/html/reftest.list index 5d4092a9308..e3694cae921 100644 --- a/tests/wpt/css-tests/selectors-4_dev/html/reftest.list +++ b/tests/wpt/css-tests/selectors-4_dev/html/reftest.list @@ -10,6 +10,7 @@ focus-within-shadow-002.htm == reference/focus-within-shadow-001-ref.htm focus-within-shadow-003.htm == reference/focus-within-shadow-001-ref.htm focus-within-shadow-004.htm == reference/focus-within-shadow-001-ref.htm focus-within-shadow-005.htm == reference/focus-within-shadow-001-ref.htm +of-type-selectors.htm == reference/of-type-selectors-ref.htm selector-required.htm == reference/selector-required-ref.htm selectors-dir-selector-ltr-001.htm == reference/selectors-dir-selector-ref.htm selectors-dir-selector-rtl-001.htm == reference/selectors-dir-selector-ref.htm diff --git a/tests/wpt/css-tests/selectors-4_dev/html/selector-required.htm b/tests/wpt/css-tests/selectors-4_dev/html/selector-required.htm index bd208dfdd5d..d1de638ceaf 100644 --- a/tests/wpt/css-tests/selectors-4_dev/html/selector-required.htm +++ b/tests/wpt/css-tests/selectors-4_dev/html/selector-required.htm @@ -19,7 +19,7 @@ <input required=""> </p> <p> - <input optinal=""> + <input optional=""> </p> diff --git a/tests/wpt/css-tests/selectors-4_dev/html/toc.htm b/tests/wpt/css-tests/selectors-4_dev/html/toc.htm index 5d293d60a3b..32260f1f4d0 100644 --- a/tests/wpt/css-tests/selectors-4_dev/html/toc.htm +++ b/tests/wpt/css-tests/selectors-4_dev/html/toc.htm @@ -77,7 +77,7 @@ <tbody id="s12"> <tr><th><a href="chapter-12.htm">Chapter 12 - Tree-Structural pseudo-classes</a></th> - <td>(0 Tests)</td></tr> + <td>(1 Tests)</td></tr> </tbody> <tbody id="s13"> <tr><th><a href="chapter-13.htm">Chapter 13 - diff --git a/tests/wpt/css-tests/selectors-4_dev/implementation-report-TEMPLATE.data b/tests/wpt/css-tests/selectors-4_dev/implementation-report-TEMPLATE.data index 20d8c201004..c081f5f3f1e 100644 --- a/tests/wpt/css-tests/selectors-4_dev/implementation-report-TEMPLATE.data +++ b/tests/wpt/css-tests/selectors-4_dev/implementation-report-TEMPLATE.data @@ -27,8 +27,9 @@ html/focus-within-shadow-005.htm c0c29807bd784660af015799ccdebc636f7b89cb ? xhtml1/focus-within-shadow-005.xht c0c29807bd784660af015799ccdebc636f7b89cb ? html/hover-001-manual.htm d73c0f7a47e543b8bf3511a219bf1527269aecbd ? xhtml1/hover-001-manual.xht d73c0f7a47e543b8bf3511a219bf1527269aecbd ? -html/selector-required.htm 135d36f01146ee9052d8fcf5df452469c2b79188 ? -xhtml1/selector-required.xht 135d36f01146ee9052d8fcf5df452469c2b79188 ? +xhtml1/of-type-selectors.xht 770860f67b199221ed9b56b28a27b76df12c5c6b ? +html/selector-required.htm f1f48bea692b0fde0151317283ad843511e7cadb ? +xhtml1/selector-required.xht f1f48bea692b0fde0151317283ad843511e7cadb ? html/selectors-dir-selector-ltr-001.htm f5433783e1fb48d683f4b248c235e9d86ae3394e ? xhtml1/selectors-dir-selector-ltr-001.xht f5433783e1fb48d683f4b248c235e9d86ae3394e ? html/selectors-dir-selector-rtl-001.htm 513d1a59ceb7f22b96ac3f6dbee55234610211eb ? diff --git a/tests/wpt/css-tests/selectors-4_dev/index.htm b/tests/wpt/css-tests/selectors-4_dev/index.htm index 4e0bf3c087a..6edff670043 100644 --- a/tests/wpt/css-tests/selectors-4_dev/index.htm +++ b/tests/wpt/css-tests/selectors-4_dev/index.htm @@ -132,9 +132,11 @@ <p>Many thanks to the following for their contributions:</p> <ul> <li>Chris Rebert</li> + <li>Elika J. Etemad</li> <li>Florian Rivoal</li> <li>Keyong Li</li> <li>LEE YUN HEE</li> + <li>Ms2ger</li> <li>Takeshi Kurosawa</li> </ul> diff --git a/tests/wpt/css-tests/selectors-4_dev/index.xht b/tests/wpt/css-tests/selectors-4_dev/index.xht index 30dac3afd6f..37a9b258d52 100644 --- a/tests/wpt/css-tests/selectors-4_dev/index.xht +++ b/tests/wpt/css-tests/selectors-4_dev/index.xht @@ -132,9 +132,11 @@ <p>Many thanks to the following for their contributions:</p> <ul> <li>Chris Rebert</li> + <li>Elika J. Etemad</li> <li>Florian Rivoal</li> <li>Keyong Li</li> <li>LEE YUN HEE</li> + <li>Ms2ger</li> <li>Takeshi Kurosawa</li> </ul> diff --git a/tests/wpt/css-tests/selectors-4_dev/testinfo.data b/tests/wpt/css-tests/selectors-4_dev/testinfo.data index 44d28791d0a..5d9700fec40 100644 --- a/tests/wpt/css-tests/selectors-4_dev/testinfo.data +++ b/tests/wpt/css-tests/selectors-4_dev/testinfo.data @@ -11,6 +11,7 @@ focus-within-shadow-003 reference/focus-within-shadow-001-ref Selectors Level 4: focus-within-shadow-004 reference/focus-within-shadow-001-ref Selectors Level 4: focus-within with shadow DOM dom,interact https://drafts.csswg.org/selectors-4/#focus-within-pseudo fca125db2ba27f73d1a94b246a8cbeceebaac768 `Keyong Li`<mailto:kli79@bloomberg.net>,`Florian Rivoal`<mailto:florian@rivoal.net> Test that :focus-within applies to an ancestor of a shadow host containing a focused element. focus-within-shadow-005 reference/focus-within-shadow-001-ref Selectors Level 4: focus-within with shadow DOM dom,interact https://drafts.csswg.org/selectors-4/#focus-within-pseudo c0c29807bd784660af015799ccdebc636f7b89cb `Keyong Li`<mailto:kli79@bloomberg.net> Test that :focus-within propagates through nested shadow DOMs containing a focused element. hover-001-manual hover pseudo-class when scrolling interact,scroll https://drafts.csswg.org/selectors-4/#the-hover-pseudo,http://www.w3.org/TR/selectors/#the-user-action-pseudo-classes-hover-act d73c0f7a47e543b8bf3511a219bf1527269aecbd `Chris Rebert`<http://chrisrebert.com> Scrolling away from an element that was hovered over should cause the :hover pseudo-class to no longer match said element. -selector-required reference/selector-required-ref CSS level4 Selector :required and :optional http://www.w3.org/TR/selectors4/#opt-pseudos 135d36f01146ee9052d8fcf5df452469c2b79188 `LEE YUN HEE`<mailto:zzirasi@gmail.com> You should see a green input box. +of-type-selectors reference/of-type-selectors-ref Selectors Level 4: :first-of-type namespace,nonHTML https://drafts.csswg.org/selectors-4/#the-first-of-type-pseudo 770860f67b199221ed9b56b28a27b76df12c5c6b `Elika J. Etemad`<http://fantasai.inkedblade.net/contact>,`Ms2ger`<mailto:Ms2ger@gmail.com> +selector-required reference/selector-required-ref CSS level4 Selector :required and :optional http://www.w3.org/TR/selectors4/#opt-pseudos f1f48bea692b0fde0151317283ad843511e7cadb `LEE YUN HEE`<mailto:zzirasi@gmail.com> You should see a green input box. selectors-dir-selector-ltr-001 reference/selectors-dir-selector-ref basic support for dir(ltr) http://www.w3.org/TR/selectors4/#dir-pseudo f5433783e1fb48d683f4b248c235e9d86ae3394e `Takeshi Kurosawa`<mailto:taken.spc@gmail.com> The :dir(ltr) pseudo-class matches an element that has a directionality of (ltr). Since the div element has dir=ltr, the selector matches. selectors-dir-selector-rtl-001 reference/selectors-dir-selector-ref basic support for dir(rtl) http://www.w3.org/TR/selectors4/#dir-pseudo 513d1a59ceb7f22b96ac3f6dbee55234610211eb `Takeshi Kurosawa`<mailto:taken.spc@gmail.com> The :dir(rtl) pseudo-class matches an elment that has a directionality of right-to-left (rtl). Since the div element has dir=rtl, the selector matches. diff --git a/tests/wpt/css-tests/selectors-4_dev/xhtml1/chapter-12.xht b/tests/wpt/css-tests/selectors-4_dev/xhtml1/chapter-12.xht index 9ff7efeadfb..505177e87b9 100644 --- a/tests/wpt/css-tests/selectors-4_dev/xhtml1/chapter-12.xht +++ b/tests/wpt/css-tests/selectors-4_dev/xhtml1/chapter-12.xht @@ -13,7 +13,7 @@ <body> <h1>Selectors Level 4 CR Test Suite</h1> - <h2>Tree-Structural pseudo-classes (0 tests)</h2> + <h2>Tree-Structural pseudo-classes (1 tests)</h2> <table width="100%"> <col id="test-column"></col> <col id="refs-column"></col> @@ -175,7 +175,15 @@ <tr><th colspan="4" scope="rowgroup"> <a href="#s12.6.3">+</a> <a href="https://www.w3.org/TR/selectors4/#the-first-of-type-pseudo">12.6.3 :first-of-type pseudo-class</a></th></tr> - <!-- 0 tests --> + <!-- 1 tests --> + <tr id="of-type-selectors-12.6.3" class="primary namespace nonHTML"> + <td><strong> + <a href="of-type-selectors.xht">of-type-selectors</a></strong></td> + <td><a href="reference/of-type-selectors-ref.xht">=</a> </td> + <td><abbr class="namespace" title="Requires XML Namespaces support">Namespaces</abbr></td> + <td>Selectors Level 4: :first-of-type + </td> + </tr> </tbody> <tbody id="s12.6.3.#first-of-type-pseudo"> <!-- 0 tests --> diff --git a/tests/wpt/css-tests/selectors-4_dev/xhtml1/of-type-selectors.xht b/tests/wpt/css-tests/selectors-4_dev/xhtml1/of-type-selectors.xht new file mode 100644 index 00000000000..d783eca1325 --- /dev/null +++ b/tests/wpt/css-tests/selectors-4_dev/xhtml1/of-type-selectors.xht @@ -0,0 +1,31 @@ +<html xmlns="http://www.w3.org/1999/xhtml" xmlns:html="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> +<head> +<title>Selectors Level 4: :first-of-type</title> +<meta name="flags" content="namespace nonHTML"/> +<link rel="author" title="Elika J. Etemad" href="http://fantasai.inkedblade.net/contact"/> +<link rel="author" title="Ms2ger" href="mailto:Ms2ger@gmail.com"/> +<link rel="help" href="https://drafts.csswg.org/selectors-4/#the-first-of-type-pseudo"/> +<link rel="match" href="reference/of-type-selectors-ref.xht"/> +<style type="text/css"> +div > *|* { + display: block; + color: black; + background: yellow; + border: thin solid; + margin: 1em; +} +div > *|*:first-of-type { + background: lime; +} +</style> +</head> +<body> +<div> +<p>This line should have a green background.</p> +<p>This line should have a yellow background.</p> +<html:p>This line should have a yellow background.</html:p> +<p xmlns="http://www.example.com/ns">This line should have a green background.</p> +<p xmlns="">This line should have a green background.</p> +</div> +</body> +</html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/selectors-4_dev/xhtml1/reference/of-type-selectors-ref.xht b/tests/wpt/css-tests/selectors-4_dev/xhtml1/reference/of-type-selectors-ref.xht new file mode 100644 index 00000000000..8d56b03be7c --- /dev/null +++ b/tests/wpt/css-tests/selectors-4_dev/xhtml1/reference/of-type-selectors-ref.xht @@ -0,0 +1,29 @@ +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> +<head> +<title>Selectors Level 4: :first-of-type</title> +<link rel="author" title="Ms2ger" href="mailto:Ms2ger@gmail.com"/> +<style type="text/css"> +div > *|* { + display: block; + color: black; + border: thin solid; + margin: 1em; +} +.yellow { + background: yellow; +} +.green { + background: lime; +} +</style> +</head> +<body> +<div> +<p class="green">This line should have a green background.</p> +<p class="yellow">This line should have a yellow background.</p> +<p class="yellow">This line should have a yellow background.</p> +<p class="green">This line should have a green background.</p> +<p class="green">This line should have a green background.</p> +</div> +</body> +</html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/selectors-4_dev/xhtml1/reftest-toc.xht b/tests/wpt/css-tests/selectors-4_dev/xhtml1/reftest-toc.xht index 1b1721a40ff..cc69ccc31cc 100644 --- a/tests/wpt/css-tests/selectors-4_dev/xhtml1/reftest-toc.xht +++ b/tests/wpt/css-tests/selectors-4_dev/xhtml1/reftest-toc.xht @@ -112,6 +112,14 @@ <td rowspan="1"><abbr class="dom" title="Requires Document Object Model support">DOM/JS</abbr><abbr class="interact" title="Requires user interaction">Interact</abbr></td> </tr> </tbody> + <tbody id="of-type-selectors" class="namespace nonHTML"> + <tr> + <td rowspan="1" title="Selectors Level 4: :first-of-type"> + <a href="of-type-selectors.xht">of-type-selectors</a></td> + <td><a href="reference/of-type-selectors-ref.xht">=</a> </td> + <td rowspan="1"><abbr class="namespace" title="Requires XML Namespaces support">Namespaces</abbr></td> + </tr> + </tbody> <tbody id="selector-required" class=""> <tr> <td rowspan="1" title="CSS level4 Selector :required and :optional"> diff --git a/tests/wpt/css-tests/selectors-4_dev/xhtml1/reftest.list b/tests/wpt/css-tests/selectors-4_dev/xhtml1/reftest.list index 827b25c66ed..c3c83b7f9e7 100644 --- a/tests/wpt/css-tests/selectors-4_dev/xhtml1/reftest.list +++ b/tests/wpt/css-tests/selectors-4_dev/xhtml1/reftest.list @@ -10,6 +10,7 @@ focus-within-shadow-002.xht == reference/focus-within-shadow-001-ref.xht focus-within-shadow-003.xht == reference/focus-within-shadow-001-ref.xht focus-within-shadow-004.xht == reference/focus-within-shadow-001-ref.xht focus-within-shadow-005.xht == reference/focus-within-shadow-001-ref.xht +of-type-selectors.xht == reference/of-type-selectors-ref.xht selector-required.xht == reference/selector-required-ref.xht selectors-dir-selector-ltr-001.xht == reference/selectors-dir-selector-ref.xht selectors-dir-selector-rtl-001.xht == reference/selectors-dir-selector-ref.xht diff --git a/tests/wpt/css-tests/selectors-4_dev/xhtml1/selector-required.xht b/tests/wpt/css-tests/selectors-4_dev/xhtml1/selector-required.xht index bfe528d5351..bad02dba82e 100644 --- a/tests/wpt/css-tests/selectors-4_dev/xhtml1/selector-required.xht +++ b/tests/wpt/css-tests/selectors-4_dev/xhtml1/selector-required.xht @@ -19,7 +19,7 @@ <input required="" /> </p> <p> - <input optinal="" /> + <input optional="" /> </p> diff --git a/tests/wpt/css-tests/selectors-4_dev/xhtml1/toc.xht b/tests/wpt/css-tests/selectors-4_dev/xhtml1/toc.xht index b2c7ea6788e..94f15960eea 100644 --- a/tests/wpt/css-tests/selectors-4_dev/xhtml1/toc.xht +++ b/tests/wpt/css-tests/selectors-4_dev/xhtml1/toc.xht @@ -77,7 +77,7 @@ <tbody id="s12"> <tr><th><a href="chapter-12.xht">Chapter 12 - Tree-Structural pseudo-classes</a></th> - <td>(0 Tests)</td></tr> + <td>(1 Tests)</td></tr> </tbody> <tbody id="s13"> <tr><th><a href="chapter-13.xht">Chapter 13 - diff --git a/tests/wpt/css-tests/selectors-4_dev/xhtml1print/chapter-12.xht b/tests/wpt/css-tests/selectors-4_dev/xhtml1print/chapter-12.xht index 9ff7efeadfb..505177e87b9 100644 --- a/tests/wpt/css-tests/selectors-4_dev/xhtml1print/chapter-12.xht +++ b/tests/wpt/css-tests/selectors-4_dev/xhtml1print/chapter-12.xht @@ -13,7 +13,7 @@ <body> <h1>Selectors Level 4 CR Test Suite</h1> - <h2>Tree-Structural pseudo-classes (0 tests)</h2> + <h2>Tree-Structural pseudo-classes (1 tests)</h2> <table width="100%"> <col id="test-column"></col> <col id="refs-column"></col> @@ -175,7 +175,15 @@ <tr><th colspan="4" scope="rowgroup"> <a href="#s12.6.3">+</a> <a href="https://www.w3.org/TR/selectors4/#the-first-of-type-pseudo">12.6.3 :first-of-type pseudo-class</a></th></tr> - <!-- 0 tests --> + <!-- 1 tests --> + <tr id="of-type-selectors-12.6.3" class="primary namespace nonHTML"> + <td><strong> + <a href="of-type-selectors.xht">of-type-selectors</a></strong></td> + <td><a href="reference/of-type-selectors-ref.xht">=</a> </td> + <td><abbr class="namespace" title="Requires XML Namespaces support">Namespaces</abbr></td> + <td>Selectors Level 4: :first-of-type + </td> + </tr> </tbody> <tbody id="s12.6.3.#first-of-type-pseudo"> <!-- 0 tests --> diff --git a/tests/wpt/css-tests/selectors-4_dev/xhtml1print/of-type-selectors.xht b/tests/wpt/css-tests/selectors-4_dev/xhtml1print/of-type-selectors.xht new file mode 100644 index 00000000000..903844dea1e --- /dev/null +++ b/tests/wpt/css-tests/selectors-4_dev/xhtml1print/of-type-selectors.xht @@ -0,0 +1,40 @@ +<html xmlns="http://www.w3.org/1999/xhtml" xmlns:html="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> +<head> +<title>Selectors Level 4: :first-of-type</title> + <style type="text/css"> + @page { font: italic 8pt sans-serif; color: gray; + margin: 7%; + counter-increment: page; + @top-left { content: "Selectors Level 4 CR Test Suite"; } + @top-right { content: "Test of-type-selectors"; } + @bottom-right { content: counter(page); } + } +</style> +<meta name="flags" content="namespace nonHTML"/> +<link rel="author" title="Elika J. Etemad" href="http://fantasai.inkedblade.net/contact"/> +<link rel="author" title="Ms2ger" href="mailto:Ms2ger@gmail.com"/> +<link rel="help" href="https://drafts.csswg.org/selectors-4/#the-first-of-type-pseudo"/> +<link rel="match" href="reference/of-type-selectors-ref.xht"/> +<style type="text/css"> +div > *|* { + display: block; + color: black; + background: yellow; + border: thin solid; + margin: 1em; +} +div > *|*:first-of-type { + background: lime; +} +</style> +</head> +<body> +<div> +<p>This line should have a green background.</p> +<p>This line should have a yellow background.</p> +<html:p>This line should have a yellow background.</html:p> +<p xmlns="http://www.example.com/ns">This line should have a green background.</p> +<p xmlns="">This line should have a green background.</p> +</div> +</body> +</html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/selectors-4_dev/xhtml1print/reference/of-type-selectors-ref.xht b/tests/wpt/css-tests/selectors-4_dev/xhtml1print/reference/of-type-selectors-ref.xht new file mode 100644 index 00000000000..9958dc5942f --- /dev/null +++ b/tests/wpt/css-tests/selectors-4_dev/xhtml1print/reference/of-type-selectors-ref.xht @@ -0,0 +1,38 @@ +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> +<head> +<title>Selectors Level 4: :first-of-type</title> + <style type="text/css"> + @page { font: italic 8pt sans-serif; color: gray; + margin: 7%; + counter-increment: page; + @top-left { content: "Selectors Level 4 CR Test Suite"; } + @top-right { content: "Test of-type-selectors-ref"; } + @bottom-right { content: counter(page); } + } +</style> +<link rel="author" title="Ms2ger" href="mailto:Ms2ger@gmail.com"/> +<style type="text/css"> +div > *|* { + display: block; + color: black; + border: thin solid; + margin: 1em; +} +.yellow { + background: yellow; +} +.green { + background: lime; +} +</style> +</head> +<body> +<div> +<p class="green">This line should have a green background.</p> +<p class="yellow">This line should have a yellow background.</p> +<p class="yellow">This line should have a yellow background.</p> +<p class="green">This line should have a green background.</p> +<p class="green">This line should have a green background.</p> +</div> +</body> +</html>
\ No newline at end of file diff --git a/tests/wpt/css-tests/selectors-4_dev/xhtml1print/reftest-toc.xht b/tests/wpt/css-tests/selectors-4_dev/xhtml1print/reftest-toc.xht index 1b1721a40ff..cc69ccc31cc 100644 --- a/tests/wpt/css-tests/selectors-4_dev/xhtml1print/reftest-toc.xht +++ b/tests/wpt/css-tests/selectors-4_dev/xhtml1print/reftest-toc.xht @@ -112,6 +112,14 @@ <td rowspan="1"><abbr class="dom" title="Requires Document Object Model support">DOM/JS</abbr><abbr class="interact" title="Requires user interaction">Interact</abbr></td> </tr> </tbody> + <tbody id="of-type-selectors" class="namespace nonHTML"> + <tr> + <td rowspan="1" title="Selectors Level 4: :first-of-type"> + <a href="of-type-selectors.xht">of-type-selectors</a></td> + <td><a href="reference/of-type-selectors-ref.xht">=</a> </td> + <td rowspan="1"><abbr class="namespace" title="Requires XML Namespaces support">Namespaces</abbr></td> + </tr> + </tbody> <tbody id="selector-required" class=""> <tr> <td rowspan="1" title="CSS level4 Selector :required and :optional"> diff --git a/tests/wpt/css-tests/selectors-4_dev/xhtml1print/reftest.list b/tests/wpt/css-tests/selectors-4_dev/xhtml1print/reftest.list index 827b25c66ed..c3c83b7f9e7 100644 --- a/tests/wpt/css-tests/selectors-4_dev/xhtml1print/reftest.list +++ b/tests/wpt/css-tests/selectors-4_dev/xhtml1print/reftest.list @@ -10,6 +10,7 @@ focus-within-shadow-002.xht == reference/focus-within-shadow-001-ref.xht focus-within-shadow-003.xht == reference/focus-within-shadow-001-ref.xht focus-within-shadow-004.xht == reference/focus-within-shadow-001-ref.xht focus-within-shadow-005.xht == reference/focus-within-shadow-001-ref.xht +of-type-selectors.xht == reference/of-type-selectors-ref.xht selector-required.xht == reference/selector-required-ref.xht selectors-dir-selector-ltr-001.xht == reference/selectors-dir-selector-ref.xht selectors-dir-selector-rtl-001.xht == reference/selectors-dir-selector-ref.xht diff --git a/tests/wpt/css-tests/selectors-4_dev/xhtml1print/selector-required.xht b/tests/wpt/css-tests/selectors-4_dev/xhtml1print/selector-required.xht index bfe528d5351..bad02dba82e 100644 --- a/tests/wpt/css-tests/selectors-4_dev/xhtml1print/selector-required.xht +++ b/tests/wpt/css-tests/selectors-4_dev/xhtml1print/selector-required.xht @@ -19,7 +19,7 @@ <input required="" /> </p> <p> - <input optinal="" /> + <input optional="" /> </p> diff --git a/tests/wpt/css-tests/selectors-4_dev/xhtml1print/toc.xht b/tests/wpt/css-tests/selectors-4_dev/xhtml1print/toc.xht index b2c7ea6788e..94f15960eea 100644 --- a/tests/wpt/css-tests/selectors-4_dev/xhtml1print/toc.xht +++ b/tests/wpt/css-tests/selectors-4_dev/xhtml1print/toc.xht @@ -77,7 +77,7 @@ <tbody id="s12"> <tr><th><a href="chapter-12.xht">Chapter 12 - Tree-Structural pseudo-classes</a></th> - <td>(0 Tests)</td></tr> + <td>(1 Tests)</td></tr> </tbody> <tbody id="s13"> <tr><th><a href="chapter-13.xht">Chapter 13 - diff --git a/tests/wpt/css-tests/source_rev b/tests/wpt/css-tests/source_rev index 3c0689de7ee..77e2f837740 100644 --- a/tests/wpt/css-tests/source_rev +++ b/tests/wpt/css-tests/source_rev @@ -1 +1 @@ -e37d37aae207869203a486476c63e9823a45ff4a
\ No newline at end of file +7ba683c30e965752bd8044803f6dd3969c2c8daa
\ No newline at end of file diff --git a/tests/wpt/harness/README.rst b/tests/wpt/harness/README.rst index 63f18aca613..fc650eec45a 100644 --- a/tests/wpt/harness/README.rst +++ b/tests/wpt/harness/README.rst @@ -231,7 +231,7 @@ The web-platform-test harness knows about several keys: Any value indicates that the test is disabled. `type` - The test type e.g. `testharness` or `reftest`. + The test type e.g. `testharness`, `reftest`, or `wdspec`. `reftype` The type of comparison for reftests; either `==` or `!=`. diff --git a/tests/wpt/harness/docs/expectation.rst b/tests/wpt/harness/docs/expectation.rst index 76aeb49c0dc..6a0c77684a3 100644 --- a/tests/wpt/harness/docs/expectation.rst +++ b/tests/wpt/harness/docs/expectation.rst @@ -203,6 +203,10 @@ When used for expectation data, manifests have the following format: the (sub)test is disabled and should either not be run (for tests) or that its results should be ignored (subtests). + * A key ``restart-after`` which can be set to any value to indicate that + the runner should restart the browser after running this test (e.g. to + clear out unwanted state). + * Variables ``debug``, ``os``, ``version``, ``processor`` and ``bits`` that describe the configuration of the browser under test. ``debug`` is a boolean indicating whether a build is a debug diff --git a/tests/wpt/harness/wptrunner/browsers/chrome.py b/tests/wpt/harness/wptrunner/browsers/chrome.py index a711fddd0b4..18491359456 100644 --- a/tests/wpt/harness/wptrunner/browsers/chrome.py +++ b/tests/wpt/harness/wptrunner/browsers/chrome.py @@ -3,7 +3,7 @@ # You can obtain one at http://mozilla.org/MPL/2.0/. from .base import Browser, ExecutorBrowser, require_arg -from .webdriver import ChromedriverLocalServer +from ..webdriver_server import ChromeDriverServer from ..executors import executor_kwargs as base_executor_kwargs from ..executors.executorselenium import (SeleniumTestharnessExecutor, SeleniumRefTestExecutor) @@ -49,32 +49,33 @@ def env_options(): class ChromeBrowser(Browser): """Chrome is backed by chromedriver, which is supplied through - ``browsers.webdriver.ChromedriverLocalServer``.""" + ``wptrunner.webdriver.ChromeDriverServer``. + """ def __init__(self, logger, binary, webdriver_binary="chromedriver"): """Creates a new representation of Chrome. The `binary` argument gives the browser binary to use for testing.""" Browser.__init__(self, logger) self.binary = binary - self.driver = ChromedriverLocalServer(self.logger, binary=webdriver_binary) + self.server = ChromeDriverServer(self.logger, binary=webdriver_binary) def start(self): - self.driver.start() + self.server.start(block=False) def stop(self): - self.driver.stop() + self.server.stop() def pid(self): - return self.driver.pid + return self.server.pid def is_alive(self): # TODO(ato): This only indicates the driver is alive, # and doesn't say anything about whether a browser session # is active. - return self.driver.is_alive() + return self.server.is_alive() def cleanup(self): self.stop() def executor_browser(self): - return ExecutorBrowser, {"webdriver_url": self.driver.url} + return ExecutorBrowser, {"webdriver_url": self.server.url} diff --git a/tests/wpt/harness/wptrunner/browsers/firefox.py b/tests/wpt/harness/wptrunner/browsers/firefox.py index 92d70764903..dcd7a4f1d17 100644 --- a/tests/wpt/harness/wptrunner/browsers/firefox.py +++ b/tests/wpt/harness/wptrunner/browsers/firefox.py @@ -13,18 +13,27 @@ from mozprofile.permissions import ServerLocations from mozrunner import FirefoxRunner from mozcrash import mozcrash -from .base import get_free_port, Browser, ExecutorBrowser, require_arg, cmd_arg, browser_command +from .base import (get_free_port, + Browser, + ExecutorBrowser, + require_arg, + cmd_arg, + browser_command) from ..executors import executor_kwargs as base_executor_kwargs -from ..executors.executormarionette import MarionetteTestharnessExecutor, MarionetteRefTestExecutor +from ..executors.executormarionette import (MarionetteTestharnessExecutor, + MarionetteRefTestExecutor, + MarionetteWdspecExecutor) from ..environment import hostnames + here = os.path.join(os.path.split(__file__)[0]) __wptrunner__ = {"product": "firefox", "check_args": "check_args", "browser": "FirefoxBrowser", "executor": {"testharness": "MarionetteTestharnessExecutor", - "reftest": "MarionetteRefTestExecutor"}, + "reftest": "MarionetteRefTestExecutor", + "wdspec": "MarionetteWdspecExecutor"}, "browser_kwargs": "browser_kwargs", "executor_kwargs": "executor_kwargs", "env_options": "env_options", @@ -62,6 +71,8 @@ def executor_kwargs(test_type, server_config, cache_manager, run_info_data, executor_kwargs["timeout_multiplier"] = 2 elif run_info_data["debug"] or run_info_data.get("asan"): executor_kwargs["timeout_multiplier"] = 3 + if test_type == "wdspec": + executor_kwargs["webdriver_binary"] = kwargs.get("webdriver_binary") return executor_kwargs @@ -80,6 +91,7 @@ def run_info_extras(**kwargs): def update_properties(): return ["debug", "e10s", "os", "version", "processor", "bits"], {"debug", "e10s"} + class FirefoxBrowser(Browser): used_ports = set() init_timeout = 60 diff --git a/tests/wpt/harness/wptrunner/environment.py b/tests/wpt/harness/wptrunner/environment.py index b3d0e301fd3..732b785589b 100644 --- a/tests/wpt/harness/wptrunner/environment.py +++ b/tests/wpt/harness/wptrunner/environment.py @@ -32,7 +32,6 @@ def do_delayed_imports(logger, test_paths): global serve, sslutils serve_root = serve_path(test_paths) - sys.path.insert(0, serve_root) failed = [] @@ -45,7 +44,6 @@ def do_delayed_imports(logger, test_paths): try: import sslutils except ImportError: - raise failed.append("sslutils") if failed: diff --git a/tests/wpt/harness/wptrunner/executors/base.py b/tests/wpt/harness/wptrunner/executors/base.py index 0c8c2a1bc50..f0ce1665888 100644 --- a/tests/wpt/harness/wptrunner/executors/base.py +++ b/tests/wpt/harness/wptrunner/executors/base.py @@ -63,6 +63,7 @@ class TestharnessResultConverter(object): [test.subtest_result_cls(name, self.test_codes[status], message, stack) for name, status, message, stack in subtest_results]) + testharness_result_converter = TestharnessResultConverter() @@ -71,11 +72,24 @@ def reftest_result_converter(self, test, result): extra=result.get("extra")), []) +def pytest_result_converter(self, test, data): + harness_data, subtest_data = data + + if subtest_data is None: + subtest_data = [] + + harness_result = test.result_cls(*harness_data) + subtest_results = [test.subtest_result_cls(*item) for item in subtest_data] + + return (harness_result, subtest_results) + + class ExecutorException(Exception): def __init__(self, status, message): self.status = status self.message = message + class TestExecutor(object): __metaclass__ = ABCMeta @@ -116,11 +130,13 @@ class TestExecutor(object): :param runner: TestRunner instance that is going to run the tests""" self.runner = runner - self.protocol.setup(runner) + if self.protocol is not None: + self.protocol.setup(runner) def teardown(self): """Run cleanup steps after tests have finished""" - self.protocol.teardown() + if self.protocol is not None: + self.protocol.teardown() def run_test(self, test): """Run a particular test. @@ -137,6 +153,7 @@ class TestExecutor(object): if result is Stop: return result + # log result of parent test if result[0].status == "ERROR": self.logger.debug(result[0].message) @@ -144,7 +161,6 @@ class TestExecutor(object): self.runner.send_message("test_ended", test, result) - def server_url(self, protocol): return "%s://%s:%s" % (protocol, self.server_config["host"], @@ -191,6 +207,7 @@ class RefTestExecutor(TestExecutor): self.screenshot_cache = screenshot_cache + class RefTestImplementation(object): def __init__(self, executor): self.timeout_multiplier = executor.timeout_multiplier @@ -288,6 +305,11 @@ class RefTestImplementation(object): self.screenshot_cache[key] = hash_val, data return True, data + +class WdspecExecutor(TestExecutor): + convert_result = pytest_result_converter + + class Protocol(object): def __init__(self, executor, browser): self.executor = executor diff --git a/tests/wpt/harness/wptrunner/executors/executormarionette.py b/tests/wpt/harness/wptrunner/executors/executormarionette.py index c50bcf87f87..c4b1cba689a 100644 --- a/tests/wpt/harness/wptrunner/executors/executormarionette.py +++ b/tests/wpt/harness/wptrunner/executors/executormarionette.py @@ -3,9 +3,9 @@ # You can obtain one at http://mozilla.org/MPL/2.0/. import hashlib +import httplib import os import socket -import sys import threading import time import traceback @@ -13,10 +13,15 @@ import urlparse import uuid from collections import defaultdict +from ..wpttest import WdspecResult, WdspecSubtestResult + +errors = None marionette = None +webdriver = None here = os.path.join(os.path.split(__file__)[0]) +from . import pytestrunner from .base import (ExecutorException, Protocol, RefTestExecutor, @@ -25,22 +30,29 @@ from .base import (ExecutorException, TestharnessExecutor, testharness_result_converter, reftest_result_converter, - strip_server) + strip_server, + WdspecExecutor) from ..testrunner import Stop +from ..webdriver_server import GeckoDriverServer # Extra timeout to use after internal test timeout at which the harness # should force a timeout extra_timeout = 5 # seconds + def do_delayed_imports(): - global marionette - global errors + global errors, marionette, webdriver + + # Marionette client used to be called marionette, recently it changed + # to marionette_driver for unfathomable reasons try: import marionette from marionette import errors except ImportError: from marionette_driver import marionette, errors + import webdriver + class MarionetteProtocol(Protocol): def __init__(self, executor, browser): @@ -54,8 +66,10 @@ class MarionetteProtocol(Protocol): """Connect to browser via Marionette.""" Protocol.setup(self, runner) - self.logger.debug("Connecting to marionette on port %i" % self.marionette_port) - self.marionette = marionette.Marionette(host='localhost', port=self.marionette_port) + self.logger.debug("Connecting to Marionette on port %i" % self.marionette_port) + self.marionette = marionette.Marionette(host='localhost', + port=self.marionette_port, + socket_timeout=None) # XXX Move this timeout somewhere self.logger.debug("Waiting for Marionette connection") @@ -97,10 +111,10 @@ class MarionetteProtocol(Protocol): pass del self.marionette + @property def is_alive(self): - """Check if the marionette connection is still active""" + """Check if the Marionette connection is still active.""" try: - # Get a simple property over the connection self.marionette.current_window_handle except Exception: return False @@ -126,12 +140,18 @@ class MarionetteProtocol(Protocol): "document.title = '%s'" % threading.current_thread().name.replace("'", '"')) def wait(self): + socket_timeout = self.marionette.client.sock.gettimeout() + if socket_timeout: + self.marionette.set_script_timeout((socket_timeout / 2) * 1000) + while True: try: - self.marionette.execute_async_script(""); + self.marionette.execute_async_script("") except errors.ScriptTimeoutException: + self.logger.debug("Script timed out") pass except (socket.timeout, IOError): + self.logger.debug("Socket closed") break except Exception as e: self.logger.error(traceback.format_exc(e)) @@ -213,7 +233,63 @@ class MarionetteProtocol(Protocol): with self.marionette.using_context(self.marionette.CONTEXT_CHROME): self.marionette.execute_script(script) -class MarionetteRun(object): + +class RemoteMarionetteProtocol(Protocol): + def __init__(self, executor, browser): + do_delayed_imports() + Protocol.__init__(self, executor, browser) + self.session = None + self.webdriver_binary = executor.webdriver_binary + self.marionette_port = browser.marionette_port + self.server = None + + def setup(self, runner): + """Connect to browser via the Marionette HTTP server.""" + try: + self.server = GeckoDriverServer( + self.logger, self.marionette_port, binary=self.webdriver_binary) + self.server.start(block=False) + self.logger.info( + "WebDriver HTTP server listening at %s" % self.server.url) + + self.logger.info( + "Establishing new WebDriver session with %s" % self.server.url) + self.session = webdriver.Session( + self.server.host, self.server.port, self.server.base_path) + except Exception: + self.logger.error(traceback.format_exc()) + self.executor.runner.send_message("init_failed") + else: + self.executor.runner.send_message("init_succeeded") + + def teardown(self): + try: + if self.session.session_id is not None: + self.session.end() + except Exception: + pass + if self.server is not None and self.server.is_alive: + self.server.stop() + + @property + def is_alive(self): + """Test that the Marionette connection is still alive. + + Because the remote communication happens over HTTP we need to + make an explicit request to the remote. It is allowed for + WebDriver spec tests to not have a WebDriver session, since this + may be what is tested. + + An HTTP request to an invalid path that results in a 404 is + proof enough to us that the server is alive and kicking. + """ + conn = httplib.HTTPConnection(self.server.host, self.server.port) + conn.request("HEAD", self.server.base_path + "invalid") + res = conn.getresponse() + return res.status == 404 + + +class ExecuteAsyncScriptRun(object): def __init__(self, logger, func, marionette, url, timeout): self.logger = logger self.result = None @@ -277,8 +353,8 @@ class MarionetteRun(object): class MarionetteTestharnessExecutor(TestharnessExecutor): - def __init__(self, browser, server_config, timeout_multiplier=1, close_after_done=True, - debug_info=None): + def __init__(self, browser, server_config, timeout_multiplier=1, + close_after_done=True, debug_info=None, **kwargs): """Marionette-based executor for testharness.js tests""" TestharnessExecutor.__init__(self, browser, server_config, timeout_multiplier=timeout_multiplier, @@ -295,7 +371,7 @@ class MarionetteTestharnessExecutor(TestharnessExecutor): do_delayed_imports() def is_alive(self): - return self.protocol.is_alive() + return self.protocol.is_alive def on_environment_change(self, new_environment): self.protocol.on_environment_change(self.last_environment, new_environment) @@ -307,11 +383,11 @@ class MarionetteTestharnessExecutor(TestharnessExecutor): timeout = (test.timeout * self.timeout_multiplier if self.debug_info is None else None) - success, data = MarionetteRun(self.logger, - self.do_testharness, - self.protocol.marionette, - self.test_url(test), - timeout).run() + success, data = ExecuteAsyncScriptRun(self.logger, + self.do_testharness, + self.protocol.marionette, + self.test_url(test), + timeout).run() if success: return self.convert_result(test, data) @@ -338,7 +414,9 @@ class MarionetteTestharnessExecutor(TestharnessExecutor): class MarionetteRefTestExecutor(RefTestExecutor): def __init__(self, browser, server_config, timeout_multiplier=1, - screenshot_cache=None, close_after_done=True, debug_info=None): + screenshot_cache=None, close_after_done=True, + debug_info=None, **kwargs): + """Marionette-based executor for reftests""" RefTestExecutor.__init__(self, browser, @@ -358,7 +436,7 @@ class MarionetteRefTestExecutor(RefTestExecutor): self.wait_script = f.read() def is_alive(self): - return self.protocol.is_alive() + return self.protocol.is_alive def on_environment_change(self, new_environment): self.protocol.on_environment_change(self.last_environment, new_environment) @@ -376,7 +454,6 @@ class MarionetteRefTestExecutor(RefTestExecutor): self.has_window = True result = self.implementation.run_test(test) - return self.convert_result(test, result) def screenshot(self, test, viewport_size, dpi): @@ -388,7 +465,7 @@ class MarionetteRefTestExecutor(RefTestExecutor): test_url = self.test_url(test) - return MarionetteRun(self.logger, + return ExecuteAsyncScriptRun(self.logger, self._screenshot, self.protocol.marionette, test_url, @@ -405,3 +482,78 @@ class MarionetteRefTestExecutor(RefTestExecutor): screenshot = screenshot.split(",", 1)[1] return screenshot + + +class WdspecRun(object): + def __init__(self, func, session, path, timeout): + self.func = func + self.result = None + self.session = session + self.path = path + self.timeout = timeout + self.result_flag = threading.Event() + + def run(self): + """Runs function in a thread and interrupts it if it exceeds the + given timeout. Returns (True, (Result, [SubtestResult ...])) in + case of success, or (False, (status, extra information)) in the + event of failure. + """ + + executor = threading.Thread(target=self._run) + executor.start() + + flag = self.result_flag.wait(self.timeout) + if self.result is None: + assert not flag + self.result = False, ("EXTERNAL-TIMEOUT", None) + + return self.result + + def _run(self): + try: + self.result = True, self.func(self.session, self.path, self.timeout) + except (socket.timeout, IOError): + self.result = False, ("CRASH", None) + except Exception as e: + message = getattr(e, "message") + if message: + message += "\n" + message += traceback.format_exc(e) + self.result = False, ("ERROR", message) + finally: + self.result_flag.set() + + +class MarionetteWdspecExecutor(WdspecExecutor): + def __init__(self, browser, server_config, webdriver_binary, + timeout_multiplier=1, close_after_done=True, debug_info=None): + WdspecExecutor.__init__(self, browser, server_config, + timeout_multiplier=timeout_multiplier, + debug_info=debug_info) + self.webdriver_binary = webdriver_binary + self.protocol = RemoteMarionetteProtocol(self, browser) + + def is_alive(self): + return self.protocol.is_alive + + def on_environment_change(self, new_environment): + pass + + def do_test(self, test): + timeout = test.timeout * self.timeout_multiplier + extra_timeout + + success, data = WdspecRun(self.do_wdspec, + self.protocol.session, + test.path, + timeout).run() + + if success: + return self.convert_result(test, data) + + return (test.result_cls(*data), []) + + def do_wdspec(self, session, path, timeout): + harness_result = ("OK", None) + subtest_results = pytestrunner.run(path, session, timeout=timeout) + return (harness_result, subtest_results) diff --git a/tests/wpt/harness/wptrunner/executors/executorservo.py b/tests/wpt/harness/wptrunner/executors/executorservo.py index b3421ffe625..068061b958d 100644 --- a/tests/wpt/harness/wptrunner/executors/executorservo.py +++ b/tests/wpt/harness/wptrunner/executors/executorservo.py @@ -71,7 +71,7 @@ class ServoTestharnessExecutor(ProcessTestExecutor): self.result_flag = threading.Event() args = [render_arg(self.browser.render_backend), "--hard-fail", "-u", "Servo/wptrunner", - "-z", self.test_url(test)] + "-Z", "replace-surrogates", "-z", self.test_url(test)] for stylesheet in self.browser.user_stylesheets: args += ["--user-stylesheet", stylesheet] for pref, value in test.environment.get('prefs', {}).iteritems(): @@ -204,7 +204,7 @@ class ServoRefTestExecutor(ProcessTestExecutor): debug_args, command = browser_command( self.binary, [render_arg(self.browser.render_backend), "--hard-fail", "--exit", - "-u", "Servo/wptrunner", "-Z", "disable-text-aa,load-webfonts-synchronously", + "-u", "Servo/wptrunner", "-Z", "disable-text-aa,load-webfonts-synchronously,replace-surrogates", "--output=%s" % output_path, full_url], self.debug_info) diff --git a/tests/wpt/harness/wptrunner/executors/executorservodriver.py b/tests/wpt/harness/wptrunner/executors/executorservodriver.py index 52154d09ba0..fceeb58fad2 100644 --- a/tests/wpt/harness/wptrunner/executors/executorservodriver.py +++ b/tests/wpt/harness/wptrunner/executors/executorservodriver.py @@ -14,16 +14,24 @@ from .base import (Protocol, RefTestImplementation, TestharnessExecutor, strip_server) -import webdriver +from .. import webdriver from ..testrunner import Stop +webdriver = None + here = os.path.join(os.path.split(__file__)[0]) extra_timeout = 5 +def do_delayed_imports(): + global webdriver + import webdriver + + class ServoWebDriverProtocol(Protocol): def __init__(self, executor, browser, capabilities, **kwargs): + do_delayed_imports() Protocol.__init__(self, executor, browser) self.capabilities = capabilities self.host = browser.webdriver_host @@ -34,10 +42,11 @@ class ServoWebDriverProtocol(Protocol): """Connect to browser via WebDriver.""" self.runner = runner + url = "http://%s:%d" % (self.host, self.port) session_started = False try: self.session = webdriver.Session(self.host, self.port, - extension=webdriver.ServoExtensions) + extension=webdriver.servo.ServoCommandExtensions) self.session.start() except: self.logger.warning( @@ -62,7 +71,7 @@ class ServoWebDriverProtocol(Protocol): def is_alive(self): try: # Get a simple property over the connection - self.session.handle + self.session.window_handle # TODO what exception? except Exception: return False diff --git a/tests/wpt/harness/wptrunner/executors/pytestrunner/__init__.py b/tests/wpt/harness/wptrunner/executors/pytestrunner/__init__.py new file mode 100644 index 00000000000..de3a34a794b --- /dev/null +++ b/tests/wpt/harness/wptrunner/executors/pytestrunner/__init__.py @@ -0,0 +1,6 @@ +# 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/. + +from . import fixtures +from .runner import run diff --git a/tests/wpt/harness/wptrunner/executors/pytestrunner/fixtures.py b/tests/wpt/harness/wptrunner/executors/pytestrunner/fixtures.py new file mode 100644 index 00000000000..77afb4a3684 --- /dev/null +++ b/tests/wpt/harness/wptrunner/executors/pytestrunner/fixtures.py @@ -0,0 +1,58 @@ +# 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/. + +import pytest + + +"""pytest fixtures for use in Python-based WPT tests. + +The purpose of test fixtures is to provide a fixed baseline upon which +tests can reliably and repeatedly execute. +""" + + +class Session(object): + """Fixture to allow access to wptrunner's existing WebDriver session + in tests. + + The session is not created by default to enable testing of session + creation. However, a module-scoped session will be implicitly created + at the first call to a WebDriver command. This means methods such as + `session.send_command` and `session.session_id` are possible to use + without having a session. + + To illustrate implicit session creation:: + + def test_session_scope(session): + # at this point there is no session + assert session.session_id is None + + # window_id is a WebDriver command, + # and implicitly creates the session for us + assert session.window_id is not None + + # we now have a session + assert session.session_id is not None + + You can also access the session in custom fixtures defined in the + tests, such as a setup function:: + + @pytest.fixture(scope="function") + def setup(request, session): + session.url = "https://example.org" + + def test_something(setup, session): + assert session.url == "https://example.org" + + The session is closed when the test module goes out of scope by an + implicit call to `session.end`. + """ + + def __init__(self, client): + self.client = client + + @pytest.fixture(scope="module") + def session(self, request): + request.addfinalizer(self.client.end) + return self.client diff --git a/tests/wpt/harness/wptrunner/executors/pytestrunner/runner.py b/tests/wpt/harness/wptrunner/executors/pytestrunner/runner.py new file mode 100644 index 00000000000..8aa575ff8b7 --- /dev/null +++ b/tests/wpt/harness/wptrunner/executors/pytestrunner/runner.py @@ -0,0 +1,113 @@ +# 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/. + +"""Provides interface to deal with pytest. + +Usage:: + + session = webdriver.client.Session("127.0.0.1", "4444", "/") + harness_result = ("OK", None) + subtest_results = pytestrunner.run("/path/to/test", session.url) + return (harness_result, subtest_results) +""" + +import errno +import shutil +import tempfile + +from . import fixtures + + +pytest = None + + +def do_delayed_imports(): + global pytest + import pytest + + +def run(path, session, timeout=0): + """Run Python test at ``path`` in pytest. The provided ``session`` + is exposed as a fixture available in the scope of the test functions. + + :param path: Path to the test file. + :param session: WebDriver session to expose. + :param timeout: Duration before interrupting potentially hanging + tests. If 0, there is no timeout. + + :returns: List of subtest results, which are tuples of (test id, + status, message, stacktrace). + """ + + if pytest is None: + do_delayed_imports() + + recorder = SubtestResultRecorder() + plugins = [recorder, + fixtures.Session(session)] + + # TODO(ato): Deal with timeouts + + with TemporaryDirectory() as cache: + pytest.main(["--strict", # turn warnings into errors + "--verbose", # show each individual subtest + "--capture", "no", # enable stdout/stderr from tests + "--basetemp", cache, # temporary directory + path], + plugins=plugins) + + return recorder.results + + +class SubtestResultRecorder(object): + def __init__(self): + self.results = [] + + def pytest_runtest_logreport(self, report): + if report.passed and report.when == "call": + self.record_pass(report) + elif report.failed: + if report.when != "call": + self.record_error(report) + else: + self.record_fail(report) + elif report.skipped: + self.record_skip(report) + + def record_pass(self, report): + self.record(report.nodeid, "PASS") + + def record_fail(self, report): + self.record(report.nodeid, "FAIL", stack=report.longrepr) + + def record_error(self, report): + # error in setup/teardown + if report.when != "call": + message = "%s error" % report.when + self.record(report.nodeid, "ERROR", message, report.longrepr) + + def record_skip(self, report): + self.record(report.nodeid, "ERROR", + "In-test skip decorators are disallowed, " + "please use WPT metadata to ignore tests.") + + def record(self, test, status, message=None, stack=None): + if stack is not None: + stack = str(stack) + new_result = (test, status, message, stack) + self.results.append(new_result) + + +class TemporaryDirectory(object): + def __enter__(self): + self.path = tempfile.mkdtemp(prefix="pytest-") + return self.path + + def __exit__(self, *args): + try: + shutil.rmtree(self.path) + except OSError as e: + # no such file or directory + if e.errno != errno.ENOENT: + raise diff --git a/tests/wpt/harness/wptrunner/manifestexpected.py b/tests/wpt/harness/wptrunner/manifestexpected.py index b46a1ef9597..c0e22a843fd 100644 --- a/tests/wpt/harness/wptrunner/manifestexpected.py +++ b/tests/wpt/harness/wptrunner/manifestexpected.py @@ -29,10 +29,10 @@ def data_cls_getter(output_node, visited_node): raise ValueError -def disabled(node): - """Boolean indicating whether the test is disabled""" +def bool_prop(name, node): + """Boolean property""" try: - return node.get("disabled") + return node.get(name) except KeyError: return None @@ -109,7 +109,11 @@ class ExpectedManifest(ManifestItem): @property def disabled(self): - return disabled(self) + return bool_prop("disabled", self) + + @property + def restart_after(self): + return bool_prop("restart-after", self) @property def tags(self): @@ -123,7 +127,11 @@ class ExpectedManifest(ManifestItem): class DirectoryManifest(ManifestItem): @property def disabled(self): - return disabled(self) + return bool_prop("disabled", self) + + @property + def restart_after(self): + return bool_prop("restart-after", self) @property def tags(self): @@ -164,7 +172,11 @@ class TestNode(ManifestItem): @property def disabled(self): - return disabled(self) + return bool_prop("disabled", self) + + @property + def restart_after(self): + return bool_prop("restart-after", self) @property def tags(self): diff --git a/tests/wpt/harness/wptrunner/testrunner.py b/tests/wpt/harness/wptrunner/testrunner.py index b5617827a40..77d2a885083 100644 --- a/tests/wpt/harness/wptrunner/testrunner.py +++ b/tests/wpt/harness/wptrunner/testrunner.py @@ -524,7 +524,8 @@ class TestRunnerManager(threading.Thread): self.test = None - restart_before_next = (file_result.status in ("CRASH", "EXTERNAL-TIMEOUT") or + restart_before_next = (test.restart_after or + file_result.status in ("CRASH", "EXTERNAL-TIMEOUT") or subtest_unexpected or is_unexpected) if (self.pause_after_test or diff --git a/tests/wpt/harness/wptrunner/webdriver_server.py b/tests/wpt/harness/wptrunner/webdriver_server.py new file mode 100644 index 00000000000..68d3fb7a3bf --- /dev/null +++ b/tests/wpt/harness/wptrunner/webdriver_server.py @@ -0,0 +1,206 @@ +# 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/. + +import abc +import errno +import os +import platform +import socket +import threading +import time +import traceback +import urlparse + +import mozprocess + + +__all__ = ["SeleniumServer", "ChromeDriverServer", + "GeckoDriverServer", "WebDriverServer"] + + +class WebDriverServer(object): + __metaclass__ = abc.ABCMeta + + default_base_path = "/" + _used_ports = set() + + def __init__(self, logger, binary, host="127.0.0.1", port=None, + base_path="", env=None): + self.logger = logger + self.binary = binary + self.host = host + if base_path == "": + self.base_path = self.default_base_path + else: + self.base_path = base_path + self.env = os.environ.copy() if env is None else env + + self._port = port + self._cmd = None + self._proc = None + + @abc.abstractmethod + def make_command(self): + """Returns the full command for starting the server process as a list.""" + + def start(self, block=True): + try: + self._run(block) + except KeyboardInterrupt: + self.stop() + + def _run(self, block): + self._cmd = self.make_command() + self._proc = mozprocess.ProcessHandler( + self._cmd, + processOutputLine=self.on_output, + env=self.env, + storeOutput=False) + + try: + self._proc.run() + except OSError as e: + if e.errno == errno.ENOENT: + raise IOError( + "WebDriver HTTP server executable not found: %s" % self.binary) + raise + + self.logger.debug( + "Waiting for server to become accessible: %s" % self.url) + try: + wait_for_service((self.host, self.port)) + except: + self.logger.error( + "WebDriver HTTP server was not accessible " + "within the timeout:\n%s" % traceback.format_exc()) + raise + + if block: + self._proc.wait() + + def stop(self): + if self.is_alive: + return self._proc.kill() + return not self.is_alive + + @property + def is_alive(self): + return (self._proc is not None and + self._proc.proc is not None and + self._proc.poll() is None) + + def on_output(self, line): + self.logger.process_output(self.pid, + line.decode("utf8", "replace"), + command=" ".join(self._cmd)) + + @property + def pid(self): + if self._proc is not None: + return self._proc.pid + + @property + def url(self): + return "http://%s:%i%s" % (self.host, self.port, self.base_path) + + @property + def port(self): + if self._port is None: + self._port = self._find_next_free_port() + return self._port + + @staticmethod + def _find_next_free_port(): + port = get_free_port(4444, exclude=WebDriverServer._used_ports) + WebDriverServer._used_ports.add(port) + return port + + +class SeleniumServer(WebDriverServer): + default_base_path = "/wd/hub" + + def make_command(self): + return ["java", "-jar", self.binary, "-port", str(self.port)] + + +class ChromeDriverServer(WebDriverServer): + default_base_path = "/wd/hub" + + def __init__(self, logger, binary="chromedriver", port=None, + base_path=""): + WebDriverServer.__init__( + self, logger, binary, port=port, base_path=base_path) + + def make_command(self): + return [self.binary, + cmd_arg("port", str(self.port)), + cmd_arg("url-base", self.base_path) if self.base_path else ""] + + +class GeckoDriverServer(WebDriverServer): + def __init__(self, logger, marionette_port=2828, binary="wires", + host="127.0.0.1", port=None): + env = os.environ.copy() + env["RUST_BACKTRACE"] = "1" + WebDriverServer.__init__(self, logger, binary, host=host, port=port, env=env) + self.marionette_port = marionette_port + + def make_command(self): + return [self.binary, + "--connect-existing", + "--marionette-port", str(self.marionette_port), + "--webdriver-host", self.host, + "--webdriver-port", str(self.port)] + + +def cmd_arg(name, value=None): + prefix = "-" if platform.system() == "Windows" else "--" + rv = prefix + name + if value is not None: + rv += "=" + value + return rv + + +def get_free_port(start_port, exclude=None): + """Get the first port number after start_port (inclusive) that is + not currently bound. + + :param start_port: Integer port number at which to start testing. + :param exclude: Set of port numbers to skip""" + port = start_port + while True: + if exclude and port in exclude: + port += 1 + continue + s = socket.socket() + try: + s.bind(("127.0.0.1", port)) + except socket.error: + port += 1 + else: + return port + finally: + s.close() + + +def wait_for_service(addr, timeout=15): + """Waits until network service given as a tuple of (host, port) becomes + available or the `timeout` duration is reached, at which point + ``socket.error`` is raised.""" + end = time.time() + timeout + while end > time.time(): + so = socket.socket() + try: + so.connect(addr) + except socket.timeout: + pass + except socket.error as e: + if e[0] != errno.ECONNREFUSED: + raise + else: + return True + finally: + so.close() + time.sleep(0.5) + raise socket.error("Service is unavailable: %s:%i" % addr) diff --git a/tests/wpt/harness/wptrunner/wptcommandline.py b/tests/wpt/harness/wptrunner/wptcommandline.py index 9979d69fd38..3b059378e09 100644 --- a/tests/wpt/harness/wptrunner/wptcommandline.py +++ b/tests/wpt/harness/wptrunner/wptcommandline.py @@ -10,6 +10,7 @@ from collections import OrderedDict from distutils.spawn import find_executable import config +import wpttest def abs_path(path): @@ -25,6 +26,7 @@ def url_or_path(path): else: return abs_path(path) + def require_arg(kwargs, name, value_func=None): if value_func is None: value_func = lambda x: x is not None @@ -101,8 +103,8 @@ def create_parser(product_choices=None): test_selection_group = parser.add_argument_group("Test Selection") test_selection_group.add_argument("--test-types", action="store", - nargs="*", default=["testharness", "reftest"], - choices=["testharness", "reftest"], + nargs="*", default=wpttest.enabled_tests, + choices=wpttest.enabled_tests, help="Test types to run") test_selection_group.add_argument("--include", action="append", help="URL prefix to include") @@ -159,8 +161,8 @@ def create_parser(product_choices=None): gecko_group = parser.add_argument_group("Gecko-specific") gecko_group.add_argument("--prefs-root", dest="prefs_root", action="store", type=abs_path, help="Path to the folder containing browser prefs") - gecko_group.add_argument("--e10s", dest="gecko_e10s", action="store_true", - help="Run tests with electrolysis preferences") + gecko_group.add_argument("--disable-e10s", dest="gecko_e10s", action="store_false", default=True, + help="Run tests without electrolysis preferences") b2g_group = parser.add_argument_group("B2G-specific") b2g_group.add_argument("--b2g-no-backup", action="store_true", default=False, @@ -343,12 +345,14 @@ def check_args(kwargs): return kwargs + def check_args_update(kwargs): set_from_config(kwargs) if kwargs["product"] is None: kwargs["product"] = "firefox" + def create_parser_update(product_choices=None): from mozlog.structured import commandline diff --git a/tests/wpt/harness/wptrunner/wptlogging.py b/tests/wpt/harness/wptrunner/wptlogging.py index 9e6e737d3e9..047e025fad1 100644 --- a/tests/wpt/harness/wptrunner/wptlogging.py +++ b/tests/wpt/harness/wptrunner/wptlogging.py @@ -74,6 +74,7 @@ class LoggingWrapper(StringIO): instead""" def __init__(self, queue, prefix=None): + StringIO.__init__(self) self.queue = queue self.prefix = prefix @@ -94,6 +95,7 @@ class LoggingWrapper(StringIO): def flush(self): pass + class CaptureIO(object): def __init__(self, logger, do_capture): self.logger = logger diff --git a/tests/wpt/harness/wptrunner/wpttest.py b/tests/wpt/harness/wptrunner/wpttest.py index 73a50bb129e..9832f72654e 100644 --- a/tests/wpt/harness/wptrunner/wpttest.py +++ b/tests/wpt/harness/wptrunner/wpttest.py @@ -12,6 +12,8 @@ import mozinfo from wptmanifest.parser import atoms atom_reset = atoms["Reset"] +enabled_tests = set(["testharness", "reftest", "wdspec"]) + class Result(object): def __init__(self, status, message, expected=None, extra=None): @@ -22,6 +24,9 @@ class Result(object): self.expected = expected self.extra = extra + def __repr__(self): + return "<%s.%s %s>" % (self.__module__, self.__class__.__name__, self.status) + class SubtestResult(object): def __init__(self, name, status, message, stack=None, expected=None): @@ -33,20 +38,33 @@ class SubtestResult(object): self.stack = stack self.expected = expected + def __repr__(self): + return "<%s.%s %s %s>" % (self.__module__, self.__class__.__name__, self.name, self.status) + class TestharnessResult(Result): default_expected = "OK" statuses = set(["OK", "ERROR", "TIMEOUT", "EXTERNAL-TIMEOUT", "CRASH"]) +class TestharnessSubtestResult(SubtestResult): + default_expected = "PASS" + statuses = set(["PASS", "FAIL", "TIMEOUT", "NOTRUN"]) + + class ReftestResult(Result): default_expected = "PASS" statuses = set(["PASS", "FAIL", "ERROR", "TIMEOUT", "EXTERNAL-TIMEOUT", "CRASH"]) -class TestharnessSubtestResult(SubtestResult): +class WdspecResult(Result): + default_expected = "OK" + statuses = set(["OK", "ERROR", "TIMEOUT", "EXTERNAL-TIMEOUT", "CRASH"]) + + +class WdspecSubtestResult(SubtestResult): default_expected = "PASS" - statuses = set(["PASS", "FAIL", "TIMEOUT", "NOTRUN"]) + statuses = set(["PASS", "FAIL", "ERROR"]) def get_run_info(metadata_root, product, **kwargs): @@ -82,6 +100,7 @@ class RunInfo(dict): mozinfo.find_and_update_from_json(*dirs) + class B2GRunInfo(RunInfo): def __init__(self, *args, **kwargs): RunInfo.__init__(self, *args, **kwargs) @@ -115,7 +134,6 @@ class Test(object): path=manifest_item.path, protocol="https" if hasattr(manifest_item, "https") and manifest_item.https else "http") - @property def id(self): return self.url @@ -141,7 +159,6 @@ class Test(object): if subtest_meta is not None: yield subtest_meta - def disabled(self, subtest=None): for meta in self.itermeta(subtest): disabled = meta.disabled @@ -150,6 +167,14 @@ class Test(object): return None @property + def restart_after(self): + for meta in self.itermeta(None): + restart_after = meta.restart_after + if restart_after is not None: + return True + return False + + @property def tags(self): tags = set() for meta in self.itermeta(): @@ -191,6 +216,9 @@ class Test(object): except KeyError: return default + def __repr__(self): + return "<%s.%s %s>" % (self.__module__, self.__class__.__name__, self.id) + class TestharnessTest(Test): result_cls = TestharnessResult @@ -293,12 +321,18 @@ class ReftestTest(Test): return ("reftype", "refurl") +class WdspecTest(Test): + result_cls = WdspecResult + subtest_result_cls = WdspecSubtestResult + test_type = "wdspec" + + manifest_test_cls = {"reftest": ReftestTest, "testharness": TestharnessTest, - "manual": ManualTest} + "manual": ManualTest, + "wdspec": WdspecTest} def from_manifest(manifest_test, inherit_metadata, test_metadata): test_cls = manifest_test_cls[manifest_test.item_type] - return test_cls.from_manifest(manifest_test, inherit_metadata, test_metadata) diff --git a/tests/wpt/metadata-css/MANIFEST.json b/tests/wpt/metadata-css/MANIFEST.json index c875d9162f6..fe5feb0551e 100644 --- a/tests/wpt/metadata-css/MANIFEST.json +++ b/tests/wpt/metadata-css/MANIFEST.json @@ -46436,6 +46436,16 @@ "url": "/css-masking-1_dev/html/clip-rule-002.htm" }, { + "path": "css-masking-1_dev/html/mask-clip-1.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-clip-1-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-clip-1.htm" + }, + { "path": "css-masking-1_dev/html/mask-composite-1a.htm", "references": [ [ @@ -46476,6 +46486,436 @@ "url": "/css-masking-1_dev/html/mask-composite-2b.htm" }, { + "path": "css-masking-1_dev/html/mask-image-1a.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-image-1-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-image-1a.htm" + }, + { + "path": "css-masking-1_dev/html/mask-image-1b.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-image-1-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-image-1b.htm" + }, + { + "path": "css-masking-1_dev/html/mask-image-1c.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-image-1-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-image-1c.htm" + }, + { + "path": "css-masking-1_dev/html/mask-image-2.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-image-2-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-image-2.htm" + }, + { + "path": "css-masking-1_dev/html/mask-mode-a.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-mode-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-mode-a.htm" + }, + { + "path": "css-masking-1_dev/html/mask-mode-b.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-mode-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-mode-b.htm" + }, + { + "path": "css-masking-1_dev/html/mask-origin-1.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-origin-1-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-origin-1.htm" + }, + { + "path": "css-masking-1_dev/html/mask-origin-2.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-origin-2-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-origin-2.htm" + }, + { + "path": "css-masking-1_dev/html/mask-position-1a.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-position-1-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-position-1a.htm" + }, + { + "path": "css-masking-1_dev/html/mask-position-1b.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-position-1-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-position-1b.htm" + }, + { + "path": "css-masking-1_dev/html/mask-position-1c.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-position-1-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-position-1c.htm" + }, + { + "path": "css-masking-1_dev/html/mask-position-2a.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-position-2-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-position-2a.htm" + }, + { + "path": "css-masking-1_dev/html/mask-position-2b.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-position-2-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-position-2b.htm" + }, + { + "path": "css-masking-1_dev/html/mask-position-3a.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-position-3-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-position-3a.htm" + }, + { + "path": "css-masking-1_dev/html/mask-position-3b.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-position-3-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-position-3b.htm" + }, + { + "path": "css-masking-1_dev/html/mask-position-4a.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-position-4-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-position-4a.htm" + }, + { + "path": "css-masking-1_dev/html/mask-position-4b.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-position-4-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-position-4b.htm" + }, + { + "path": "css-masking-1_dev/html/mask-position-4c.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-position-4-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-position-4c.htm" + }, + { + "path": "css-masking-1_dev/html/mask-position-4d.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-position-4-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-position-4d.htm" + }, + { + "path": "css-masking-1_dev/html/mask-position-5.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-position-5-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-position-5.htm" + }, + { + "path": "css-masking-1_dev/html/mask-position-6.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-position-6-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-position-6.htm" + }, + { + "path": "css-masking-1_dev/html/mask-position-7.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-position-7-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-position-7.htm" + }, + { + "path": "css-masking-1_dev/html/mask-repeat-1.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-repeat-1-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-repeat-1.htm" + }, + { + "path": "css-masking-1_dev/html/mask-repeat-2.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-repeat-2-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-repeat-2.htm" + }, + { + "path": "css-masking-1_dev/html/mask-repeat-3.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-repeat-3-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-repeat-3.htm" + }, + { + "path": "css-masking-1_dev/html/mask-size-auto-auto.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-auto-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-auto-auto.htm" + }, + { + "path": "css-masking-1_dev/html/mask-size-auto-length.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-auto-length-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-auto-length.htm" + }, + { + "path": "css-masking-1_dev/html/mask-size-auto-percent.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-auto-length-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-auto-percent.htm" + }, + { + "path": "css-masking-1_dev/html/mask-size-auto.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-auto-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-auto.htm" + }, + { + "path": "css-masking-1_dev/html/mask-size-contain-clip-border.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-contain-clip-border-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-contain-clip-border.htm" + }, + { + "path": "css-masking-1_dev/html/mask-size-contain-clip-padding.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-contain-clip-padding-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-contain-clip-padding.htm" + }, + { + "path": "css-masking-1_dev/html/mask-size-contain-position-fifty-fifty.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-contain-position-fifty-fifty-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-contain-position-fifty-fifty.htm" + }, + { + "path": "css-masking-1_dev/html/mask-size-contain.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-contain-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-contain.htm" + }, + { + "path": "css-masking-1_dev/html/mask-size-cover.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-cover-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-cover.htm" + }, + { + "path": "css-masking-1_dev/html/mask-size-length-auto.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-length-length-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-length-auto.htm" + }, + { + "path": "css-masking-1_dev/html/mask-size-length-length.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-length-length-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-length-length.htm" + }, + { + "path": "css-masking-1_dev/html/mask-size-length-percent.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-length-percent-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-length-percent.htm" + }, + { + "path": "css-masking-1_dev/html/mask-size-length.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-length-length-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-length.htm" + }, + { + "path": "css-masking-1_dev/html/mask-size-percent-auto.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-percent-percent-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-percent-auto.htm" + }, + { + "path": "css-masking-1_dev/html/mask-size-percent-length.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-percent-percent-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-percent-length.htm" + }, + { + "path": "css-masking-1_dev/html/mask-size-percent-percent-stretch.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-percent-percent-stretch-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-percent-percent-stretch.htm" + }, + { + "path": "css-masking-1_dev/html/mask-size-percent-percent.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-percent-percent-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-percent-percent.htm" + }, + { + "path": "css-masking-1_dev/html/mask-size-percent.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-percent-percent-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-percent.htm" + }, + { "path": "css-masking-1_dev/html/test-mask.htm", "references": [ [ @@ -47056,6 +47496,16 @@ "url": "/css-masking-1_dev/xhtml1/clip-rule-002.xht" }, { + "path": "css-masking-1_dev/xhtml1/mask-clip-1.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-clip-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-clip-1.xht" + }, + { "path": "css-masking-1_dev/xhtml1/mask-composite-1a.xht", "references": [ [ @@ -47096,6 +47546,436 @@ "url": "/css-masking-1_dev/xhtml1/mask-composite-2b.xht" }, { + "path": "css-masking-1_dev/xhtml1/mask-image-1a.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-image-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-image-1a.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-image-1b.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-image-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-image-1b.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-image-1c.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-image-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-image-1c.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-image-2.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-image-2-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-image-2.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-mode-a.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-mode-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-mode-a.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-mode-b.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-mode-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-mode-b.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-origin-1.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-origin-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-origin-1.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-origin-2.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-origin-2-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-origin-2.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-position-1a.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-position-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-position-1a.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-position-1b.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-position-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-position-1b.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-position-1c.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-position-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-position-1c.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-position-2a.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-position-2-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-position-2a.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-position-2b.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-position-2-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-position-2b.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-position-3a.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-position-3-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-position-3a.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-position-3b.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-position-3-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-position-3b.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-position-4a.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-position-4-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-position-4a.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-position-4b.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-position-4-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-position-4b.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-position-4c.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-position-4-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-position-4c.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-position-4d.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-position-4-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-position-4d.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-position-5.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-position-5-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-position-5.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-position-6.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-position-6-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-position-6.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-position-7.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-position-7-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-position-7.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-repeat-1.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-repeat-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-repeat-1.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-repeat-2.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-repeat-2-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-repeat-2.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-repeat-3.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-repeat-3-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-repeat-3.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-size-auto-auto.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-auto-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-auto-auto.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-size-auto-length.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-auto-length-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-auto-length.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-size-auto-percent.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-auto-length-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-auto-percent.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-size-auto.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-auto-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-auto.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-size-contain-clip-border.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-contain-clip-border-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-contain-clip-border.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-size-contain-clip-padding.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-contain-clip-padding-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-contain-clip-padding.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-size-contain-position-fifty-fifty.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-contain-position-fifty-fifty-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-contain-position-fifty-fifty.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-size-contain.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-contain-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-contain.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-size-cover.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-cover-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-cover.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-size-length-auto.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-length-length-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-length-auto.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-size-length-length.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-length-length-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-length-length.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-size-length-percent.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-length-percent-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-length-percent.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-size-length.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-length-length-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-length.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-size-percent-auto.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-percent-percent-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-percent-auto.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-size-percent-length.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-percent-percent-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-percent-length.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-size-percent-percent-stretch.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-percent-percent-stretch-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-percent-percent-stretch.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-size-percent-percent.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-percent-percent-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-percent-percent.xht" + }, + { + "path": "css-masking-1_dev/xhtml1/mask-size-percent.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-percent-percent-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-percent.xht" + }, + { "path": "css-masking-1_dev/xhtml1/test-mask.xht", "references": [ [ @@ -47676,6 +48556,16 @@ "url": "/css-masking-1_dev/xhtml1print/clip-rule-002.xht" }, { + "path": "css-masking-1_dev/xhtml1print/mask-clip-1.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-clip-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-clip-1.xht" + }, + { "path": "css-masking-1_dev/xhtml1print/mask-composite-1a.xht", "references": [ [ @@ -47716,6 +48606,436 @@ "url": "/css-masking-1_dev/xhtml1print/mask-composite-2b.xht" }, { + "path": "css-masking-1_dev/xhtml1print/mask-image-1a.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-image-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-image-1a.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-image-1b.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-image-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-image-1b.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-image-1c.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-image-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-image-1c.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-image-2.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-image-2-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-image-2.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-mode-a.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-mode-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-mode-a.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-mode-b.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-mode-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-mode-b.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-origin-1.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-origin-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-origin-1.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-origin-2.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-origin-2-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-origin-2.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-position-1a.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-position-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-position-1a.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-position-1b.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-position-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-position-1b.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-position-1c.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-position-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-position-1c.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-position-2a.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-position-2-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-position-2a.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-position-2b.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-position-2-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-position-2b.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-position-3a.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-position-3-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-position-3a.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-position-3b.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-position-3-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-position-3b.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-position-4a.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-position-4-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-position-4a.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-position-4b.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-position-4-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-position-4b.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-position-4c.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-position-4-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-position-4c.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-position-4d.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-position-4-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-position-4d.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-position-5.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-position-5-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-position-5.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-position-6.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-position-6-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-position-6.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-position-7.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-position-7-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-position-7.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-repeat-1.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-repeat-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-repeat-1.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-repeat-2.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-repeat-2-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-repeat-2.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-repeat-3.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-repeat-3-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-repeat-3.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-size-auto-auto.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-auto-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-auto-auto.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-size-auto-length.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-auto-length-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-auto-length.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-size-auto-percent.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-auto-length-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-auto-percent.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-size-auto.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-auto-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-auto.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-size-contain-clip-border.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-contain-clip-border-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-contain-clip-border.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-size-contain-clip-padding.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-contain-clip-padding-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-contain-clip-padding.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-size-contain-position-fifty-fifty.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-contain-position-fifty-fifty-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-contain-position-fifty-fifty.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-size-contain.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-contain-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-contain.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-size-cover.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-cover-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-cover.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-size-length-auto.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-length-length-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-length-auto.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-size-length-length.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-length-length-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-length-length.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-size-length-percent.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-length-percent-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-length-percent.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-size-length.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-length-length-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-length.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-size-percent-auto.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-percent-percent-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-percent-auto.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-size-percent-length.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-percent-percent-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-percent-length.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-size-percent-percent-stretch.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-percent-percent-stretch-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-percent-percent-stretch.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-size-percent-percent.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-percent-percent-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-percent-percent.xht" + }, + { + "path": "css-masking-1_dev/xhtml1print/mask-size-percent.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-percent-percent-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-percent.xht" + }, + { "path": "css-masking-1_dev/xhtml1print/test-mask.xht", "references": [ [ @@ -352336,6 +353656,16 @@ "url": "/selectors-4_dev/xhtml1/focus-within-shadow-005.xht" }, { + "path": "selectors-4_dev/xhtml1/of-type-selectors.xht", + "references": [ + [ + "/selectors-4_dev/xhtml1/reference/of-type-selectors-ref.xht", + "==" + ] + ], + "url": "/selectors-4_dev/xhtml1/of-type-selectors.xht" + }, + { "path": "selectors-4_dev/xhtml1/selector-required.xht", "references": [ [ @@ -352476,6 +353806,16 @@ "url": "/selectors-4_dev/xhtml1print/focus-within-shadow-005.xht" }, { + "path": "selectors-4_dev/xhtml1print/of-type-selectors.xht", + "references": [ + [ + "/selectors-4_dev/xhtml1print/reference/of-type-selectors-ref.xht", + "==" + ] + ], + "url": "/selectors-4_dev/xhtml1print/of-type-selectors.xht" + }, + { "path": "selectors-4_dev/xhtml1print/selector-required.xht", "references": [ [ @@ -414275,6 +415615,18 @@ "url": "/css-masking-1_dev/html/clip-rule-002.htm" } ], + "css-masking-1_dev/html/mask-clip-1.htm": [ + { + "path": "css-masking-1_dev/html/mask-clip-1.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-clip-1-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-clip-1.htm" + } + ], "css-masking-1_dev/html/mask-composite-1a.htm": [ { "path": "css-masking-1_dev/html/mask-composite-1a.htm", @@ -414323,6 +415675,522 @@ "url": "/css-masking-1_dev/html/mask-composite-2b.htm" } ], + "css-masking-1_dev/html/mask-image-1a.htm": [ + { + "path": "css-masking-1_dev/html/mask-image-1a.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-image-1-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-image-1a.htm" + } + ], + "css-masking-1_dev/html/mask-image-1b.htm": [ + { + "path": "css-masking-1_dev/html/mask-image-1b.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-image-1-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-image-1b.htm" + } + ], + "css-masking-1_dev/html/mask-image-1c.htm": [ + { + "path": "css-masking-1_dev/html/mask-image-1c.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-image-1-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-image-1c.htm" + } + ], + "css-masking-1_dev/html/mask-image-2.htm": [ + { + "path": "css-masking-1_dev/html/mask-image-2.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-image-2-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-image-2.htm" + } + ], + "css-masking-1_dev/html/mask-mode-a.htm": [ + { + "path": "css-masking-1_dev/html/mask-mode-a.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-mode-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-mode-a.htm" + } + ], + "css-masking-1_dev/html/mask-mode-b.htm": [ + { + "path": "css-masking-1_dev/html/mask-mode-b.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-mode-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-mode-b.htm" + } + ], + "css-masking-1_dev/html/mask-origin-1.htm": [ + { + "path": "css-masking-1_dev/html/mask-origin-1.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-origin-1-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-origin-1.htm" + } + ], + "css-masking-1_dev/html/mask-origin-2.htm": [ + { + "path": "css-masking-1_dev/html/mask-origin-2.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-origin-2-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-origin-2.htm" + } + ], + "css-masking-1_dev/html/mask-position-1a.htm": [ + { + "path": "css-masking-1_dev/html/mask-position-1a.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-position-1-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-position-1a.htm" + } + ], + "css-masking-1_dev/html/mask-position-1b.htm": [ + { + "path": "css-masking-1_dev/html/mask-position-1b.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-position-1-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-position-1b.htm" + } + ], + "css-masking-1_dev/html/mask-position-1c.htm": [ + { + "path": "css-masking-1_dev/html/mask-position-1c.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-position-1-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-position-1c.htm" + } + ], + "css-masking-1_dev/html/mask-position-2a.htm": [ + { + "path": "css-masking-1_dev/html/mask-position-2a.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-position-2-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-position-2a.htm" + } + ], + "css-masking-1_dev/html/mask-position-2b.htm": [ + { + "path": "css-masking-1_dev/html/mask-position-2b.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-position-2-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-position-2b.htm" + } + ], + "css-masking-1_dev/html/mask-position-3a.htm": [ + { + "path": "css-masking-1_dev/html/mask-position-3a.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-position-3-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-position-3a.htm" + } + ], + "css-masking-1_dev/html/mask-position-3b.htm": [ + { + "path": "css-masking-1_dev/html/mask-position-3b.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-position-3-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-position-3b.htm" + } + ], + "css-masking-1_dev/html/mask-position-4a.htm": [ + { + "path": "css-masking-1_dev/html/mask-position-4a.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-position-4-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-position-4a.htm" + } + ], + "css-masking-1_dev/html/mask-position-4b.htm": [ + { + "path": "css-masking-1_dev/html/mask-position-4b.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-position-4-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-position-4b.htm" + } + ], + "css-masking-1_dev/html/mask-position-4c.htm": [ + { + "path": "css-masking-1_dev/html/mask-position-4c.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-position-4-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-position-4c.htm" + } + ], + "css-masking-1_dev/html/mask-position-4d.htm": [ + { + "path": "css-masking-1_dev/html/mask-position-4d.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-position-4-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-position-4d.htm" + } + ], + "css-masking-1_dev/html/mask-position-5.htm": [ + { + "path": "css-masking-1_dev/html/mask-position-5.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-position-5-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-position-5.htm" + } + ], + "css-masking-1_dev/html/mask-position-6.htm": [ + { + "path": "css-masking-1_dev/html/mask-position-6.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-position-6-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-position-6.htm" + } + ], + "css-masking-1_dev/html/mask-position-7.htm": [ + { + "path": "css-masking-1_dev/html/mask-position-7.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-position-7-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-position-7.htm" + } + ], + "css-masking-1_dev/html/mask-repeat-1.htm": [ + { + "path": "css-masking-1_dev/html/mask-repeat-1.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-repeat-1-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-repeat-1.htm" + } + ], + "css-masking-1_dev/html/mask-repeat-2.htm": [ + { + "path": "css-masking-1_dev/html/mask-repeat-2.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-repeat-2-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-repeat-2.htm" + } + ], + "css-masking-1_dev/html/mask-repeat-3.htm": [ + { + "path": "css-masking-1_dev/html/mask-repeat-3.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-repeat-3-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-repeat-3.htm" + } + ], + "css-masking-1_dev/html/mask-size-auto-auto.htm": [ + { + "path": "css-masking-1_dev/html/mask-size-auto-auto.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-auto-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-auto-auto.htm" + } + ], + "css-masking-1_dev/html/mask-size-auto-length.htm": [ + { + "path": "css-masking-1_dev/html/mask-size-auto-length.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-auto-length-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-auto-length.htm" + } + ], + "css-masking-1_dev/html/mask-size-auto-percent.htm": [ + { + "path": "css-masking-1_dev/html/mask-size-auto-percent.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-auto-length-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-auto-percent.htm" + } + ], + "css-masking-1_dev/html/mask-size-auto.htm": [ + { + "path": "css-masking-1_dev/html/mask-size-auto.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-auto-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-auto.htm" + } + ], + "css-masking-1_dev/html/mask-size-contain-clip-border.htm": [ + { + "path": "css-masking-1_dev/html/mask-size-contain-clip-border.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-contain-clip-border-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-contain-clip-border.htm" + } + ], + "css-masking-1_dev/html/mask-size-contain-clip-padding.htm": [ + { + "path": "css-masking-1_dev/html/mask-size-contain-clip-padding.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-contain-clip-padding-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-contain-clip-padding.htm" + } + ], + "css-masking-1_dev/html/mask-size-contain-position-fifty-fifty.htm": [ + { + "path": "css-masking-1_dev/html/mask-size-contain-position-fifty-fifty.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-contain-position-fifty-fifty-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-contain-position-fifty-fifty.htm" + } + ], + "css-masking-1_dev/html/mask-size-contain.htm": [ + { + "path": "css-masking-1_dev/html/mask-size-contain.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-contain-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-contain.htm" + } + ], + "css-masking-1_dev/html/mask-size-cover.htm": [ + { + "path": "css-masking-1_dev/html/mask-size-cover.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-cover-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-cover.htm" + } + ], + "css-masking-1_dev/html/mask-size-length-auto.htm": [ + { + "path": "css-masking-1_dev/html/mask-size-length-auto.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-length-length-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-length-auto.htm" + } + ], + "css-masking-1_dev/html/mask-size-length-length.htm": [ + { + "path": "css-masking-1_dev/html/mask-size-length-length.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-length-length-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-length-length.htm" + } + ], + "css-masking-1_dev/html/mask-size-length-percent.htm": [ + { + "path": "css-masking-1_dev/html/mask-size-length-percent.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-length-percent-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-length-percent.htm" + } + ], + "css-masking-1_dev/html/mask-size-length.htm": [ + { + "path": "css-masking-1_dev/html/mask-size-length.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-length-length-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-length.htm" + } + ], + "css-masking-1_dev/html/mask-size-percent-auto.htm": [ + { + "path": "css-masking-1_dev/html/mask-size-percent-auto.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-percent-percent-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-percent-auto.htm" + } + ], + "css-masking-1_dev/html/mask-size-percent-length.htm": [ + { + "path": "css-masking-1_dev/html/mask-size-percent-length.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-percent-percent-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-percent-length.htm" + } + ], + "css-masking-1_dev/html/mask-size-percent-percent-stretch.htm": [ + { + "path": "css-masking-1_dev/html/mask-size-percent-percent-stretch.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-percent-percent-stretch-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-percent-percent-stretch.htm" + } + ], + "css-masking-1_dev/html/mask-size-percent-percent.htm": [ + { + "path": "css-masking-1_dev/html/mask-size-percent-percent.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-percent-percent-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-percent-percent.htm" + } + ], + "css-masking-1_dev/html/mask-size-percent.htm": [ + { + "path": "css-masking-1_dev/html/mask-size-percent.htm", + "references": [ + [ + "/css-masking-1_dev/html/reference/mask-size-percent-percent-ref.htm", + "==" + ] + ], + "url": "/css-masking-1_dev/html/mask-size-percent.htm" + } + ], "css-masking-1_dev/html/test-mask.htm": [ { "path": "css-masking-1_dev/html/test-mask.htm", @@ -415019,6 +416887,18 @@ "url": "/css-masking-1_dev/xhtml1/clip-rule-002.xht" } ], + "css-masking-1_dev/xhtml1/mask-clip-1.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-clip-1.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-clip-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-clip-1.xht" + } + ], "css-masking-1_dev/xhtml1/mask-composite-1a.xht": [ { "path": "css-masking-1_dev/xhtml1/mask-composite-1a.xht", @@ -415067,6 +416947,522 @@ "url": "/css-masking-1_dev/xhtml1/mask-composite-2b.xht" } ], + "css-masking-1_dev/xhtml1/mask-image-1a.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-image-1a.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-image-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-image-1a.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-image-1b.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-image-1b.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-image-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-image-1b.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-image-1c.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-image-1c.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-image-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-image-1c.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-image-2.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-image-2.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-image-2-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-image-2.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-mode-a.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-mode-a.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-mode-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-mode-a.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-mode-b.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-mode-b.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-mode-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-mode-b.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-origin-1.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-origin-1.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-origin-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-origin-1.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-origin-2.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-origin-2.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-origin-2-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-origin-2.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-position-1a.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-position-1a.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-position-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-position-1a.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-position-1b.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-position-1b.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-position-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-position-1b.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-position-1c.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-position-1c.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-position-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-position-1c.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-position-2a.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-position-2a.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-position-2-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-position-2a.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-position-2b.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-position-2b.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-position-2-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-position-2b.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-position-3a.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-position-3a.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-position-3-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-position-3a.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-position-3b.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-position-3b.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-position-3-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-position-3b.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-position-4a.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-position-4a.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-position-4-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-position-4a.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-position-4b.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-position-4b.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-position-4-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-position-4b.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-position-4c.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-position-4c.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-position-4-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-position-4c.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-position-4d.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-position-4d.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-position-4-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-position-4d.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-position-5.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-position-5.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-position-5-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-position-5.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-position-6.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-position-6.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-position-6-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-position-6.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-position-7.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-position-7.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-position-7-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-position-7.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-repeat-1.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-repeat-1.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-repeat-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-repeat-1.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-repeat-2.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-repeat-2.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-repeat-2-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-repeat-2.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-repeat-3.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-repeat-3.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-repeat-3-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-repeat-3.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-size-auto-auto.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-size-auto-auto.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-auto-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-auto-auto.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-size-auto-length.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-size-auto-length.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-auto-length-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-auto-length.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-size-auto-percent.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-size-auto-percent.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-auto-length-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-auto-percent.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-size-auto.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-size-auto.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-auto-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-auto.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-size-contain-clip-border.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-size-contain-clip-border.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-contain-clip-border-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-contain-clip-border.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-size-contain-clip-padding.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-size-contain-clip-padding.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-contain-clip-padding-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-contain-clip-padding.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-size-contain-position-fifty-fifty.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-size-contain-position-fifty-fifty.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-contain-position-fifty-fifty-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-contain-position-fifty-fifty.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-size-contain.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-size-contain.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-contain-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-contain.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-size-cover.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-size-cover.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-cover-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-cover.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-size-length-auto.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-size-length-auto.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-length-length-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-length-auto.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-size-length-length.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-size-length-length.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-length-length-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-length-length.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-size-length-percent.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-size-length-percent.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-length-percent-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-length-percent.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-size-length.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-size-length.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-length-length-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-length.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-size-percent-auto.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-size-percent-auto.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-percent-percent-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-percent-auto.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-size-percent-length.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-size-percent-length.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-percent-percent-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-percent-length.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-size-percent-percent-stretch.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-size-percent-percent-stretch.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-percent-percent-stretch-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-percent-percent-stretch.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-size-percent-percent.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-size-percent-percent.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-percent-percent-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-percent-percent.xht" + } + ], + "css-masking-1_dev/xhtml1/mask-size-percent.xht": [ + { + "path": "css-masking-1_dev/xhtml1/mask-size-percent.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1/reference/mask-size-percent-percent-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1/mask-size-percent.xht" + } + ], "css-masking-1_dev/xhtml1/test-mask.xht": [ { "path": "css-masking-1_dev/xhtml1/test-mask.xht", @@ -415763,6 +418159,18 @@ "url": "/css-masking-1_dev/xhtml1print/clip-rule-002.xht" } ], + "css-masking-1_dev/xhtml1print/mask-clip-1.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-clip-1.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-clip-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-clip-1.xht" + } + ], "css-masking-1_dev/xhtml1print/mask-composite-1a.xht": [ { "path": "css-masking-1_dev/xhtml1print/mask-composite-1a.xht", @@ -415811,6 +418219,522 @@ "url": "/css-masking-1_dev/xhtml1print/mask-composite-2b.xht" } ], + "css-masking-1_dev/xhtml1print/mask-image-1a.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-image-1a.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-image-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-image-1a.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-image-1b.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-image-1b.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-image-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-image-1b.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-image-1c.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-image-1c.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-image-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-image-1c.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-image-2.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-image-2.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-image-2-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-image-2.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-mode-a.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-mode-a.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-mode-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-mode-a.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-mode-b.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-mode-b.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-mode-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-mode-b.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-origin-1.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-origin-1.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-origin-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-origin-1.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-origin-2.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-origin-2.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-origin-2-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-origin-2.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-position-1a.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-position-1a.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-position-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-position-1a.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-position-1b.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-position-1b.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-position-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-position-1b.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-position-1c.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-position-1c.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-position-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-position-1c.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-position-2a.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-position-2a.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-position-2-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-position-2a.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-position-2b.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-position-2b.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-position-2-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-position-2b.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-position-3a.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-position-3a.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-position-3-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-position-3a.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-position-3b.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-position-3b.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-position-3-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-position-3b.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-position-4a.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-position-4a.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-position-4-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-position-4a.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-position-4b.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-position-4b.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-position-4-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-position-4b.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-position-4c.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-position-4c.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-position-4-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-position-4c.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-position-4d.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-position-4d.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-position-4-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-position-4d.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-position-5.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-position-5.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-position-5-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-position-5.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-position-6.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-position-6.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-position-6-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-position-6.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-position-7.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-position-7.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-position-7-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-position-7.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-repeat-1.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-repeat-1.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-repeat-1-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-repeat-1.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-repeat-2.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-repeat-2.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-repeat-2-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-repeat-2.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-repeat-3.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-repeat-3.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-repeat-3-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-repeat-3.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-size-auto-auto.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-size-auto-auto.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-auto-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-auto-auto.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-size-auto-length.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-size-auto-length.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-auto-length-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-auto-length.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-size-auto-percent.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-size-auto-percent.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-auto-length-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-auto-percent.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-size-auto.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-size-auto.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-auto-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-auto.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-size-contain-clip-border.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-size-contain-clip-border.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-contain-clip-border-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-contain-clip-border.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-size-contain-clip-padding.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-size-contain-clip-padding.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-contain-clip-padding-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-contain-clip-padding.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-size-contain-position-fifty-fifty.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-size-contain-position-fifty-fifty.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-contain-position-fifty-fifty-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-contain-position-fifty-fifty.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-size-contain.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-size-contain.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-contain-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-contain.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-size-cover.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-size-cover.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-cover-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-cover.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-size-length-auto.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-size-length-auto.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-length-length-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-length-auto.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-size-length-length.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-size-length-length.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-length-length-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-length-length.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-size-length-percent.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-size-length-percent.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-length-percent-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-length-percent.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-size-length.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-size-length.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-length-length-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-length.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-size-percent-auto.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-size-percent-auto.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-percent-percent-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-percent-auto.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-size-percent-length.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-size-percent-length.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-percent-percent-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-percent-length.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-size-percent-percent-stretch.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-size-percent-percent-stretch.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-percent-percent-stretch-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-percent-percent-stretch.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-size-percent-percent.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-size-percent-percent.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-percent-percent-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-percent-percent.xht" + } + ], + "css-masking-1_dev/xhtml1print/mask-size-percent.xht": [ + { + "path": "css-masking-1_dev/xhtml1print/mask-size-percent.xht", + "references": [ + [ + "/css-masking-1_dev/xhtml1print/reference/mask-size-percent-percent-ref.xht", + "==" + ] + ], + "url": "/css-masking-1_dev/xhtml1print/mask-size-percent.xht" + } + ], "css-masking-1_dev/xhtml1print/test-mask.xht": [ { "path": "css-masking-1_dev/xhtml1print/test-mask.xht", @@ -782039,6 +784963,18 @@ "url": "/selectors-4_dev/xhtml1/focus-within-shadow-005.xht" } ], + "selectors-4_dev/xhtml1/of-type-selectors.xht": [ + { + "path": "selectors-4_dev/xhtml1/of-type-selectors.xht", + "references": [ + [ + "/selectors-4_dev/xhtml1/reference/of-type-selectors-ref.xht", + "==" + ] + ], + "url": "/selectors-4_dev/xhtml1/of-type-selectors.xht" + } + ], "selectors-4_dev/xhtml1/selector-required.xht": [ { "path": "selectors-4_dev/xhtml1/selector-required.xht", @@ -782207,6 +785143,18 @@ "url": "/selectors-4_dev/xhtml1print/focus-within-shadow-005.xht" } ], + "selectors-4_dev/xhtml1print/of-type-selectors.xht": [ + { + "path": "selectors-4_dev/xhtml1print/of-type-selectors.xht", + "references": [ + [ + "/selectors-4_dev/xhtml1print/reference/of-type-selectors-ref.xht", + "==" + ] + ], + "url": "/selectors-4_dev/xhtml1print/of-type-selectors.xht" + } + ], "selectors-4_dev/xhtml1print/selector-required.xht": [ { "path": "selectors-4_dev/xhtml1print/selector-required.xht", @@ -782244,7 +785192,7 @@ } ] }, - "rev": "aac1cd51245c0c469325988a0446985a2f1e476c", + "rev": "b9c63d615a65c4d96f26969bcd504d4e1c3cdab8", "url_base": "/", "version": 2 } diff --git a/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_computedstyle_flex-basis-0.htm.ini b/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_computedstyle_flex-basis-0.htm.ini deleted file mode 100644 index 5e4c10a6cf7..00000000000 --- a/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_computedstyle_flex-basis-0.htm.ini +++ /dev/null @@ -1,3 +0,0 @@ -[flexbox_computedstyle_flex-basis-0.htm] - type: reftest - expected: FAIL diff --git a/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_computedstyle_flex-basis-auto.htm.ini b/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_computedstyle_flex-basis-auto.htm.ini deleted file mode 100644 index 01333e3feae..00000000000 --- a/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_computedstyle_flex-basis-auto.htm.ini +++ /dev/null @@ -1,3 +0,0 @@ -[flexbox_computedstyle_flex-basis-auto.htm] - type: reftest - expected: FAIL diff --git a/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_computedstyle_flex-basis-percent.htm.ini b/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_computedstyle_flex-basis-percent.htm.ini deleted file mode 100644 index 6aa92c48f90..00000000000 --- a/tests/wpt/metadata-css/css-flexbox-1_dev/html/flexbox_computedstyle_flex-basis-percent.htm.ini +++ /dev/null @@ -1,3 +0,0 @@ -[flexbox_computedstyle_flex-basis-percent.htm] - type: reftest - expected: FAIL diff --git a/tests/wpt/metadata-css/css-text-decor-3_dev/html/text-decoration-propagation-01.htm.ini b/tests/wpt/metadata-css/css-text-decor-3_dev/html/text-decoration-propagation-01.htm.ini deleted file mode 100644 index 05a585d4c1c..00000000000 --- a/tests/wpt/metadata-css/css-text-decor-3_dev/html/text-decoration-propagation-01.htm.ini +++ /dev/null @@ -1,3 +0,0 @@ -[text-decoration-propagation-01.htm] - type: reftest - expected: FAIL diff --git a/tests/wpt/metadata-css/cssom-1_dev/html/escape.htm.ini b/tests/wpt/metadata-css/cssom-1_dev/html/escape.htm.ini index a46acb9468d..ca3b93d8303 100644 --- a/tests/wpt/metadata-css/cssom-1_dev/html/escape.htm.ini +++ b/tests/wpt/metadata-css/cssom-1_dev/html/escape.htm.ini @@ -1,3 +1,14 @@ [escape.htm] type: testharness - expected: CRASH + [Null bytes] + expected: FAIL + bug: https://github.com/servo/servo/issues/10685 + + [Various tests] + expected: FAIL + bug: https://github.com/servo/servo/issues/10685 + + [Surrogates] + expected: FAIL + bug: https://github.com/servo/servo/issues/6564 + diff --git a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.current.removed.html.ini b/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.current.removed.html.ini deleted file mode 100644 index f0b7aa4e440..00000000000 --- a/tests/wpt/metadata/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.current.removed.html.ini +++ /dev/null @@ -1,6 +0,0 @@ -[2d.fillStyle.parse.current.removed.html] - type: testharness - bug: https://github.com/servo/servo/issues/10601 - [currentColor is solid black when the canvas element is not in a document] - expected: FAIL - diff --git a/tests/wpt/metadata/DOMEvents/tests/approved/EventObject.after.dispatchEvent.html.ini b/tests/wpt/metadata/DOMEvents/tests/approved/EventObject.after.dispatchEvent.html.ini deleted file mode 100644 index 6f9a31a9658..00000000000 --- a/tests/wpt/metadata/DOMEvents/tests/approved/EventObject.after.dispatchEvent.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[EventObject.after.dispatchEvent.html] - type: testharness - [Test Description: As the final step of the event dispatch, the implementation must reset the event object's default-action-prevention state. ] - expected: FAIL - diff --git a/tests/wpt/metadata/DOMEvents/tests/approved/ProcessingInstruction.DOMCharacterDataModified.html.ini b/tests/wpt/metadata/DOMEvents/tests/approved/ProcessingInstruction.DOMCharacterDataModified.html.ini index efa15a1120c..fb1408fdb5a 100644 --- a/tests/wpt/metadata/DOMEvents/tests/approved/ProcessingInstruction.DOMCharacterDataModified.html.ini +++ b/tests/wpt/metadata/DOMEvents/tests/approved/ProcessingInstruction.DOMCharacterDataModified.html.ini @@ -1,5 +1,3 @@ [ProcessingInstruction.DOMCharacterDataModified.html] type: testharness - [Test Description: DOMCharacterDataModified event fires after ProcessingInstruction.data have been modified, but the node itself has not been inserted or deleted. The proximal event target of this event shall be the ProcessingInstruction node.] - expected: FAIL - + disabled: mutation events diff --git a/tests/wpt/metadata/DOMEvents/tests/approved/domnodeinserted.html.ini b/tests/wpt/metadata/DOMEvents/tests/approved/domnodeinserted.html.ini index d5be4bfbba4..df8a28ab6c5 100644 --- a/tests/wpt/metadata/DOMEvents/tests/approved/domnodeinserted.html.ini +++ b/tests/wpt/metadata/DOMEvents/tests/approved/domnodeinserted.html.ini @@ -1,6 +1,3 @@ [domnodeinserted.html] type: testharness - expected: TIMEOUT - [Test Description: DOMNodeInserted event fires when a node has been added as a child of another node.] - expected: NOTRUN - + disabled: mutation events diff --git a/tests/wpt/metadata/DOMEvents/tests/submissions/Microsoft/converted/EventObject.after.dispatchEvent.html.ini b/tests/wpt/metadata/DOMEvents/tests/submissions/Microsoft/converted/EventObject.after.dispatchEvent.html.ini deleted file mode 100644 index 6f9a31a9658..00000000000 --- a/tests/wpt/metadata/DOMEvents/tests/submissions/Microsoft/converted/EventObject.after.dispatchEvent.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[EventObject.after.dispatchEvent.html] - type: testharness - [Test Description: As the final step of the event dispatch, the implementation must reset the event object's default-action-prevention state. ] - expected: FAIL - diff --git a/tests/wpt/metadata/DOMEvents/tests/submissions/Microsoft/converted/ProcessingInstruction.DOMCharacterDataModified.html.ini b/tests/wpt/metadata/DOMEvents/tests/submissions/Microsoft/converted/ProcessingInstruction.DOMCharacterDataModified.html.ini index efa15a1120c..fb1408fdb5a 100644 --- a/tests/wpt/metadata/DOMEvents/tests/submissions/Microsoft/converted/ProcessingInstruction.DOMCharacterDataModified.html.ini +++ b/tests/wpt/metadata/DOMEvents/tests/submissions/Microsoft/converted/ProcessingInstruction.DOMCharacterDataModified.html.ini @@ -1,5 +1,3 @@ [ProcessingInstruction.DOMCharacterDataModified.html] type: testharness - [Test Description: DOMCharacterDataModified event fires after ProcessingInstruction.data have been modified, but the node itself has not been inserted or deleted. The proximal event target of this event shall be the ProcessingInstruction node.] - expected: FAIL - + disabled: mutation events diff --git a/tests/wpt/metadata/DOMEvents/tests/submissions/Microsoft/converted/domnodeinserted.html.ini b/tests/wpt/metadata/DOMEvents/tests/submissions/Microsoft/converted/domnodeinserted.html.ini index d5be4bfbba4..df8a28ab6c5 100644 --- a/tests/wpt/metadata/DOMEvents/tests/submissions/Microsoft/converted/domnodeinserted.html.ini +++ b/tests/wpt/metadata/DOMEvents/tests/submissions/Microsoft/converted/domnodeinserted.html.ini @@ -1,6 +1,3 @@ [domnodeinserted.html] type: testharness - expected: TIMEOUT - [Test Description: DOMNodeInserted event fires when a node has been added as a child of another node.] - expected: NOTRUN - + disabled: mutation events diff --git a/tests/wpt/metadata/FileAPI/blob/Blob-constructor.html.ini b/tests/wpt/metadata/FileAPI/blob/Blob-constructor.html.ini index 9d44c1daccf..d0887557728 100644 --- a/tests/wpt/metadata/FileAPI/blob/Blob-constructor.html.ini +++ b/tests/wpt/metadata/FileAPI/blob/Blob-constructor.html.ini @@ -42,6 +42,3 @@ [Array with mixed types] expected: FAIL - [no-argument Blob constructor without 'new'] - expected: FAIL - diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index 941af86cd95..7fc59bc1f1f 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -3226,6 +3226,14 @@ "url": "/touch-events/single-touch-manual.html" }, { + "path": "uievents/order-of-events/focus-events/focus-manual.html", + "url": "/uievents/order-of-events/focus-events/focus-manual.html" + }, + { + "path": "uievents/order-of-events/focus-events/legacy-manual.html", + "url": "/uievents/order-of-events/focus-events/legacy-manual.html" + }, + { "path": "uievents/order-of-events/mouse-events/click-on-body-manual.html", "url": "/uievents/order-of-events/mouse-events/click-on-body-manual.html" }, @@ -3696,6 +3704,56 @@ "url": "/compat/webkit-text-fill-color-property-001d.html" }, { + "path": "compat/webkit-text-fill-color-property-002.html", + "references": [ + [ + "/compat/webkit-text-fill-color-property-002-ref.html", + "==" + ] + ], + "url": "/compat/webkit-text-fill-color-property-002.html" + }, + { + "path": "compat/webkit-text-fill-color-property-003.html", + "references": [ + [ + "/compat/webkit-text-fill-color-property-003-ref.html", + "==" + ] + ], + "url": "/compat/webkit-text-fill-color-property-003.html" + }, + { + "path": "compat/webkit-text-fill-color-property-004.html", + "references": [ + [ + "/compat/webkit-text-fill-color-property-004-ref.html", + "==" + ] + ], + "url": "/compat/webkit-text-fill-color-property-004.html" + }, + { + "path": "compat/webkit-text-fill-color-property-005.html", + "references": [ + [ + "/compat/webkit-text-fill-color-property-005-ref.html", + "==" + ] + ], + "url": "/compat/webkit-text-fill-color-property-005.html" + }, + { + "path": "compat/webkit-text-fill-color-property-006.html", + "references": [ + [ + "/compat/webkit-text-fill-color-property-006-ref.html", + "==" + ] + ], + "url": "/compat/webkit-text-fill-color-property-006.html" + }, + { "path": "custom-elements/registering-custom-elements/unresolved-element-pseudoclass/unresolved-element-pseudoclass-css-test-custom-tag.html", "references": [ [ @@ -5096,6 +5154,26 @@ "url": "/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/object_border_pixel.xhtml" }, { + "path": "html/rendering/replaced-elements/embedded-content-rendering-rules/canvas-fallback.html", + "references": [ + [ + "/html/rendering/replaced-elements/embedded-content-rendering-rules/canvas-fallback-ref.html", + "==" + ] + ], + "url": "/html/rendering/replaced-elements/embedded-content-rendering-rules/canvas-fallback.html" + }, + { + "path": "html/rendering/replaced-elements/embedded-content-rendering-rules/canvas_scale.html", + "references": [ + [ + "/html/rendering/replaced-elements/embedded-content-rendering-rules/canvas_scale_ref.html", + "==" + ] + ], + "url": "/html/rendering/replaced-elements/embedded-content-rendering-rules/canvas_scale.html" + }, + { "path": "html/rendering/replaced-elements/images/space.html", "references": [ [ @@ -5106,6 +5184,16 @@ "url": "/html/rendering/replaced-elements/images/space.html" }, { + "path": "html/semantics/document-metadata/the-link-element/stylesheet-with-base.html", + "references": [ + [ + "/html/semantics/document-metadata/the-link-element/stylesheet-with-base-ref.html", + "==" + ] + ], + "url": "/html/semantics/document-metadata/the-link-element/stylesheet-with-base.html" + }, + { "path": "html/semantics/document-metadata/the-style-element/html_style_in_comment.xhtml", "references": [ [ @@ -5176,6 +5264,26 @@ "url": "/html/semantics/embedded-content/the-embed-element/embed-represent-nothing-04.html" }, { + "path": "html/semantics/embedded-content/the-iframe-element/iframe-with-base.html", + "references": [ + [ + "/html/semantics/embedded-content/the-iframe-element/iframe-with-base-ref.html", + "==" + ] + ], + "url": "/html/semantics/embedded-content/the-iframe-element/iframe-with-base.html" + }, + { + "path": "html/semantics/embedded-content/the-img-element/document-base-url.html", + "references": [ + [ + "/html/semantics/embedded-content/the-img-element/document-base-url-ref.html", + "==" + ] + ], + "url": "/html/semantics/embedded-content/the-img-element/document-base-url.html" + }, + { "path": "html/semantics/embedded-content/the-video-element/video_content_image.htm", "references": [ [ @@ -11028,10 +11136,6 @@ "url": "/DOMEvents/tests/approved/EventListener.eventHandler.html" }, { - "path": "DOMEvents/tests/approved/EventObject.after.dispatchEvent.html", - "url": "/DOMEvents/tests/approved/EventObject.after.dispatchEvent.html" - }, - { "path": "DOMEvents/tests/approved/EventObject.multiple.dispatchEvent.html", "url": "/DOMEvents/tests/approved/EventObject.multiple.dispatchEvent.html" }, @@ -11068,10 +11172,6 @@ "url": "/DOMEvents/tests/submissions/Microsoft/converted/EventListener.eventHandler.html" }, { - "path": "DOMEvents/tests/submissions/Microsoft/converted/EventObject.after.dispatchEvent.html", - "url": "/DOMEvents/tests/submissions/Microsoft/converted/EventObject.after.dispatchEvent.html" - }, - { "path": "DOMEvents/tests/submissions/Microsoft/converted/EventObject.multiple.dispatchEvent.html", "url": "/DOMEvents/tests/submissions/Microsoft/converted/EventObject.multiple.dispatchEvent.html" }, @@ -13740,6 +13840,10 @@ "url": "/cssom-view/elementFromPoint.html" }, { + "path": "cssom-view/elementScroll.html", + "url": "/cssom-view/elementScroll.html" + }, + { "path": "cssom-view/elementsFromPoint.html", "url": "/cssom-view/elementsFromPoint.html" }, @@ -14004,6 +14108,10 @@ "url": "/dom/events/Event-constructors.html" }, { + "path": "dom/events/Event-defaultPrevented-after-dispatch.html", + "url": "/dom/events/Event-defaultPrevented-after-dispatch.html" + }, + { "path": "dom/events/Event-defaultPrevented.html", "url": "/dom/events/Event-defaultPrevented.html" }, @@ -14440,6 +14548,10 @@ "url": "/dom/nodes/Element-getElementsByTagNameNS.html" }, { + "path": "dom/nodes/Element-hasAttributes.html", + "url": "/dom/nodes/Element-hasAttributes.html" + }, + { "path": "dom/nodes/Element-insertAdjacentElement.html", "url": "/dom/nodes/Element-insertAdjacentElement.html" }, @@ -14584,6 +14696,10 @@ "url": "/dom/nodes/Node-isEqualNode.html" }, { + "path": "dom/nodes/Node-isSameNode.html", + "url": "/dom/nodes/Node-isSameNode.html" + }, + { "path": "dom/nodes/Node-lookupNamespaceURI.html", "url": "/dom/nodes/Node-lookupNamespaceURI.html" }, @@ -15116,8 +15232,8 @@ "url": "/eventsource/dedicated-worker/eventsource-constructor-url-bogus.htm" }, { - "path": "eventsource/dedicated-worker/eventsource-eventtarget.htm", - "url": "/eventsource/dedicated-worker/eventsource-eventtarget.htm" + "path": "eventsource/dedicated-worker/eventsource-eventtarget.worker.js", + "url": "/eventsource/dedicated-worker/eventsource-eventtarget.worker" }, { "path": "eventsource/dedicated-worker/eventsource-onmesage.htm", @@ -15732,6 +15848,10 @@ "url": "/gamepad/idlharness.html" }, { + "path": "generic-sensor/idlharness.html", + "url": "/generic-sensor/idlharness.html" + }, + { "path": "geolocation-API/PositionOptions.html", "url": "/geolocation-API/PositionOptions.html" }, @@ -18684,6 +18804,10 @@ "url": "/html/semantics/embedded-content/the-embed-element/embed-document.html" }, { + "path": "html/semantics/embedded-content/the-embed-element/embed-ignored-in-media-element.html", + "url": "/html/semantics/embedded-content/the-embed-element/embed-ignored-in-media-element.html" + }, + { "path": "html/semantics/embedded-content/the-iframe-element/iframe_javascript_url_01.htm", "url": "/html/semantics/embedded-content/the-iframe-element/iframe_javascript_url_01.htm" }, @@ -19516,10 +19640,22 @@ "url": "/html/semantics/tabular-data/the-table-element/insertRow-method-02.html" }, { + "path": "html/semantics/tabular-data/the-table-element/insertRow-method-03.html", + "url": "/html/semantics/tabular-data/the-table-element/insertRow-method-03.html" + }, + { "path": "html/semantics/tabular-data/the-table-element/tBodies.html", "url": "/html/semantics/tabular-data/the-table-element/tBodies.html" }, { + "path": "html/semantics/tabular-data/the-table-element/tFoot.html", + "url": "/html/semantics/tabular-data/the-table-element/tFoot.html" + }, + { + "path": "html/semantics/tabular-data/the-table-element/tHead.html", + "url": "/html/semantics/tabular-data/the-table-element/tHead.html" + }, + { "path": "html/semantics/tabular-data/the-table-element/table-insertRow.html", "url": "/html/semantics/tabular-data/the-table-element/table-insertRow.html" }, @@ -19932,6 +20068,22 @@ "url": "/html/webappapis/scripting/processing-model-2/window-onerror-runtime-error.html" }, { + "path": "html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-1.html", + "url": "/html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-1.html" + }, + { + "path": "html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-2.html", + "url": "/html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-2.html" + }, + { + "path": "html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-3.html", + "url": "/html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-3.html" + }, + { + "path": "html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-4.html", + "url": "/html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-4.html" + }, + { "path": "html/webappapis/system-state-and-capabilities/the-navigator-object/NavigatorID.html", "url": "/html/webappapis/system-state-and-capabilities/the-navigator-object/NavigatorID.html" }, @@ -28144,6 +28296,10 @@ "url": "/shadow-dom/ShadowRoot-interface.html" }, { + "path": "shadow-dom/leaktests/html-collection.html", + "url": "/shadow-dom/leaktests/html-collection.html" + }, + { "path": "shadow-dom/styles/shadow-cascade-order.html", "url": "/shadow-dom/styles/shadow-cascade-order.html" }, @@ -28300,22 +28456,6 @@ "url": "/shadow-dom/untriaged/events/test-001.html" }, { - "path": "shadow-dom/untriaged/html-elements-and-their-shadow-trees/test-001.html", - "url": "/shadow-dom/untriaged/html-elements-and-their-shadow-trees/test-001.html" - }, - { - "path": "shadow-dom/untriaged/html-elements-and-their-shadow-trees/test-002.html", - "url": "/shadow-dom/untriaged/html-elements-and-their-shadow-trees/test-002.html" - }, - { - "path": "shadow-dom/untriaged/html-elements-and-their-shadow-trees/test-003.html", - "url": "/shadow-dom/untriaged/html-elements-and-their-shadow-trees/test-003.html" - }, - { - "path": "shadow-dom/untriaged/html-elements-and-their-shadow-trees/test-004.html", - "url": "/shadow-dom/untriaged/html-elements-and-their-shadow-trees/test-004.html" - }, - { "path": "shadow-dom/untriaged/html-elements-in-shadow-trees/html-forms/test-001.html", "url": "/shadow-dom/untriaged/html-elements-in-shadow-trees/html-forms/test-001.html" }, @@ -28336,10 +28476,6 @@ "url": "/shadow-dom/untriaged/html-elements-in-shadow-trees/inert-html-elements/test-002.html" }, { - "path": "shadow-dom/untriaged/shadow-trees/lower-boundary-encapsulation/test-004.html", - "url": "/shadow-dom/untriaged/shadow-trees/lower-boundary-encapsulation/test-004.html" - }, - { "path": "shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/dom-tree-accessors-001.html", "url": "/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/dom-tree-accessors-001.html" }, @@ -28396,10 +28532,6 @@ "url": "/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/window-named-properties-003.html" }, { - "path": "shadow-dom/untriaged/styles/css-variables/test-001.html", - "url": "/shadow-dom/untriaged/styles/css-variables/test-001.html" - }, - { "path": "shadow-dom/untriaged/styles/test-001.html", "url": "/shadow-dom/untriaged/styles/test-001.html" }, @@ -28416,10 +28548,6 @@ "url": "/shadow-dom/untriaged/styles/test-008.html" }, { - "path": "shadow-dom/untriaged/styles/test-010.html", - "url": "/shadow-dom/untriaged/styles/test-010.html" - }, - { "path": "shadow-dom/untriaged/user-interaction/active-element/test-001.html", "url": "/shadow-dom/untriaged/user-interaction/active-element/test-001.html" }, @@ -28688,10 +28816,18 @@ "url": "/web-animations/animation-effect-timing/duration.html" }, { + "path": "web-animations/animation-effect-timing/easing.html", + "url": "/web-animations/animation-effect-timing/easing.html" + }, + { "path": "web-animations/animation-effect-timing/endDelay.html", "url": "/web-animations/animation-effect-timing/endDelay.html" }, { + "path": "web-animations/animation-effect-timing/fill.html", + "url": "/web-animations/animation-effect-timing/fill.html" + }, + { "path": "web-animations/animation-effect-timing/getAnimations.html", "url": "/web-animations/animation-effect-timing/getAnimations.html" }, @@ -28708,6 +28844,18 @@ "url": "/web-animations/animation-effect-timing/iterations.html" }, { + "path": "web-animations/animation-model/animation-types/discrete-animation.html", + "url": "/web-animations/animation-model/animation-types/discrete-animation.html" + }, + { + "path": "web-animations/animation-model/animation-types/not-animatable.html", + "url": "/web-animations/animation-model/animation-types/not-animatable.html" + }, + { + "path": "web-animations/animation-model/keyframes/effect-value-context.html", + "url": "/web-animations/animation-model/keyframes/effect-value-context.html" + }, + { "path": "web-animations/animation-timeline/document-timeline.html", "url": "/web-animations/animation-timeline/document-timeline.html" }, @@ -28728,6 +28876,26 @@ "url": "/web-animations/animation/finish.html" }, { + "path": "web-animations/animation/finished.html", + "url": "/web-animations/animation/finished.html" + }, + { + "path": "web-animations/animation/id.html", + "url": "/web-animations/animation/id.html" + }, + { + "path": "web-animations/animation/oncancel.html", + "url": "/web-animations/animation/oncancel.html" + }, + { + "path": "web-animations/animation/onfinish.html", + "url": "/web-animations/animation/onfinish.html" + }, + { + "path": "web-animations/animation/pause.html", + "url": "/web-animations/animation/pause.html" + }, + { "path": "web-animations/animation/play.html", "url": "/web-animations/animation/play.html" }, @@ -28740,6 +28908,14 @@ "url": "/web-animations/animation/playbackRate.html" }, { + "path": "web-animations/animation/ready.html", + "url": "/web-animations/animation/ready.html" + }, + { + "path": "web-animations/animation/reverse.html", + "url": "/web-animations/animation/reverse.html" + }, + { "path": "web-animations/keyframe-effect/constructor.html", "url": "/web-animations/keyframe-effect/constructor.html" }, @@ -33164,6 +33340,10 @@ "url": "/workers/constructors/Worker/unresolvable-url.html" }, { + "path": "workers/constructors/Worker/use-base-url.html", + "url": "/workers/constructors/Worker/use-base-url.html" + }, + { "path": "workers/interfaces.worker.js", "url": "/workers/interfaces.worker" }, @@ -33650,9 +33830,9 @@ "url": "/XMLHttpRequest/xmlhttprequest-timeout-worker-twice.html" }, { - "path": "ambient-light/AmbientLight_tests.html", + "path": "ambient-light/AmbientLightSensor_tests.html", "timeout": "long", - "url": "/ambient-light/AmbientLight_tests.html" + "url": "/ambient-light/AmbientLightSensor_tests.html" }, { "path": "content-security-policy/media-src/media-src-7_1_2.html", @@ -35059,5528 +35239,9 @@ }, "local_changes": { "deleted": [], - "items": { - "reftest": { - "2dcontext/building-paths/canvas_complexshapes_arcto_001.htm": [ - { - "path": "2dcontext/building-paths/canvas_complexshapes_arcto_001.htm", - "references": [ - [ - "/2dcontext/building-paths/canvas_complexshapes_arcto_001-ref.htm", - "==" - ] - ], - "url": "/2dcontext/building-paths/canvas_complexshapes_arcto_001.htm" - } - ], - "2dcontext/building-paths/canvas_complexshapes_beziercurveto_001.htm": [ - { - "path": "2dcontext/building-paths/canvas_complexshapes_beziercurveto_001.htm", - "references": [ - [ - "/2dcontext/building-paths/canvas_complexshapes_beziercurveto_001-ref.htm", - "==" - ] - ], - "url": "/2dcontext/building-paths/canvas_complexshapes_beziercurveto_001.htm" - } - ], - "2dcontext/compositing/canvas_compositing_globalcompositeoperation_001.htm": [ - { - "path": "2dcontext/compositing/canvas_compositing_globalcompositeoperation_001.htm", - "references": [ - [ - "/2dcontext/compositing/canvas_compositing_globalcompositeoperation_001-ref.htm", - "==" - ] - ], - "url": "/2dcontext/compositing/canvas_compositing_globalcompositeoperation_001.htm" - } - ], - "2dcontext/drawing-images-to-the-canvas/drawimage_canvas_1.html": [ - { - "path": "2dcontext/drawing-images-to-the-canvas/drawimage_canvas_1.html", - "references": [ - [ - "/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_1_ref.html", - "==" - ] - ], - "url": "/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_1.html" - } - ], - "2dcontext/drawing-images-to-the-canvas/drawimage_canvas_10.html": [ - { - "path": "2dcontext/drawing-images-to-the-canvas/drawimage_canvas_10.html", - "references": [ - [ - "/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_10_ref.html", - "==" - ] - ], - "url": "/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_10.html" - } - ], - "2dcontext/drawing-images-to-the-canvas/drawimage_canvas_11.html": [ - { - "path": "2dcontext/drawing-images-to-the-canvas/drawimage_canvas_11.html", - "references": [ - [ - "/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_11_ref.html", - "==" - ] - ], - "url": "/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_11.html" - } - ], - "2dcontext/drawing-images-to-the-canvas/drawimage_canvas_12.html": [ - { - "path": "2dcontext/drawing-images-to-the-canvas/drawimage_canvas_12.html", - "references": [ - [ - "/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_12_ref.html", - "==" - ] - ], - "url": "/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_12.html" - } - ], - "2dcontext/drawing-images-to-the-canvas/drawimage_canvas_2.html": [ - { - "path": "2dcontext/drawing-images-to-the-canvas/drawimage_canvas_2.html", - "references": [ - [ - "/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_2_ref.html", - "==" - ] - ], - "url": "/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_2.html" - } - ], - "2dcontext/drawing-images-to-the-canvas/drawimage_canvas_3.html": [ - { - "path": "2dcontext/drawing-images-to-the-canvas/drawimage_canvas_3.html", - "references": [ - [ - "/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_3_ref.html", - "==" - ] - ], - "url": "/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_3.html" - } - ], - "2dcontext/drawing-images-to-the-canvas/drawimage_canvas_4.html": [ - { - "path": "2dcontext/drawing-images-to-the-canvas/drawimage_canvas_4.html", - "references": [ - [ - "/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_4_ref.html", - "==" - ] - ], - "url": "/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_4.html" - } - ], - "2dcontext/drawing-images-to-the-canvas/drawimage_canvas_5.html": [ - { - "path": "2dcontext/drawing-images-to-the-canvas/drawimage_canvas_5.html", - "references": [ - [ - "/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_5_ref.html", - "==" - ] - ], - "url": "/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_5.html" - } - ], - "2dcontext/drawing-images-to-the-canvas/drawimage_canvas_6.html": [ - { - "path": "2dcontext/drawing-images-to-the-canvas/drawimage_canvas_6.html", - "references": [ - [ - "/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_6_ref.html", - "==" - ] - ], - "url": "/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_6.html" - } - ], - "2dcontext/drawing-images-to-the-canvas/drawimage_canvas_7.html": [ - { - "path": "2dcontext/drawing-images-to-the-canvas/drawimage_canvas_7.html", - "references": [ - [ - "/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_7_ref.html", - "==" - ] - ], - "url": "/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_7.html" - } - ], - "2dcontext/drawing-images-to-the-canvas/drawimage_canvas_8.html": [ - { - "path": "2dcontext/drawing-images-to-the-canvas/drawimage_canvas_8.html", - "references": [ - [ - "/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_8_ref.html", - "==" - ] - ], - "url": "/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_8.html" - } - ], - "2dcontext/drawing-images-to-the-canvas/drawimage_canvas_9.html": [ - { - "path": "2dcontext/drawing-images-to-the-canvas/drawimage_canvas_9.html", - "references": [ - [ - "/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_9_ref.html", - "==" - ] - ], - "url": "/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_9.html" - } - ], - "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1.html": [ - { - "path": "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1.html", - "references": [ - [ - "/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1_ref.html", - "==" - ] - ], - "url": "/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1.html" - } - ], - "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_10.html": [ - { - "path": "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_10.html", - "references": [ - [ - "/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_10_ref.html", - "==" - ] - ], - "url": "/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_10.html" - } - ], - "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_11.html": [ - { - "path": "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_11.html", - "references": [ - [ - "/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_11_ref.html", - "==" - ] - ], - "url": "/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_11.html" - } - ], - "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_12.html": [ - { - "path": "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_12.html", - "references": [ - [ - "/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_12_ref.html", - "==" - ] - ], - "url": "/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_12.html" - } - ], - "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_13.html": [ - { - "path": "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_13.html", - "references": [ - [ - "/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_13_ref.html", - "==" - ] - ], - "url": "/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_13.html" - } - ], - "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_2.html": [ - { - "path": "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_2.html", - "references": [ - [ - "/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_2_ref.html", - "==" - ] - ], - "url": "/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_2.html" - } - ], - "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_3.html": [ - { - "path": "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_3.html", - "references": [ - [ - "/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_3_ref.html", - "==" - ] - ], - "url": "/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_3.html" - } - ], - "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_4.html": [ - { - "path": "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_4.html", - "references": [ - [ - "/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_4_ref.html", - "==" - ] - ], - "url": "/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_4.html" - } - ], - "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_5.html": [ - { - "path": "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_5.html", - "references": [ - [ - "/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_5_ref.html", - "==" - ] - ], - "url": "/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_5.html" - } - ], - "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_6.html": [ - { - "path": "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_6.html", - "references": [ - [ - "/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_6_ref.html", - "==" - ] - ], - "url": "/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_6.html" - } - ], - "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_7.html": [ - { - "path": "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_7.html", - "references": [ - [ - "/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_7_ref.html", - "==" - ] - ], - "url": "/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_7.html" - } - ], - "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_8.html": [ - { - "path": "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_8.html", - "references": [ - [ - "/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_8_ref.html", - "==" - ] - ], - "url": "/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_8.html" - } - ], - "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_9.html": [ - { - "path": "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_9.html", - "references": [ - [ - "/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_9_ref.html", - "==" - ] - ], - "url": "/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_9.html" - } - ], - "2dcontext/line-styles/canvas_linestyles_linecap_001.htm": [ - { - "path": "2dcontext/line-styles/canvas_linestyles_linecap_001.htm", - "references": [ - [ - "/2dcontext/line-styles/canvas_linestyles_linecap_001-ref.htm", - "==" - ] - ], - "url": "/2dcontext/line-styles/canvas_linestyles_linecap_001.htm" - } - ], - "2dcontext/line-styles/lineto_a.html": [ - { - "path": "2dcontext/line-styles/lineto_a.html", - "references": [ - [ - "/2dcontext/line-styles/lineto_ref.html", - "==" - ] - ], - "url": "/2dcontext/line-styles/lineto_a.html" - } - ], - "2dcontext/shadows/canvas_shadows_002.htm": [ - { - "path": "2dcontext/shadows/canvas_shadows_002.htm", - "references": [ - [ - "/2dcontext/shadows/canvas_shadows_002-ref.htm", - "==" - ] - ], - "url": "/2dcontext/shadows/canvas_shadows_002.htm" - } - ], - "2dcontext/the-canvas-state/canvas_state_restore_001.htm": [ - { - "path": "2dcontext/the-canvas-state/canvas_state_restore_001.htm", - "references": [ - [ - "/2dcontext/the-canvas-state/canvas_state_restore_001-ref.htm", - "==" - ] - ], - "url": "/2dcontext/the-canvas-state/canvas_state_restore_001.htm" - } - ], - "2dcontext/transformations/canvas_transformations_reset_001.html": [ - { - "path": "2dcontext/transformations/canvas_transformations_reset_001.html", - "references": [ - [ - "/2dcontext/transformations/canvas_transformations_reset_001-ref.html", - "==" - ] - ], - "url": "/2dcontext/transformations/canvas_transformations_reset_001.html" - } - ], - "2dcontext/transformations/canvas_transformations_scale_001.htm": [ - { - "path": "2dcontext/transformations/canvas_transformations_scale_001.htm", - "references": [ - [ - "/2dcontext/transformations/canvas_transformations_scale_001-ref.htm", - "==" - ] - ], - "url": "/2dcontext/transformations/canvas_transformations_scale_001.htm" - } - ], - "2dcontext/transformations/transform_a.html": [ - { - "path": "2dcontext/transformations/transform_a.html", - "references": [ - [ - "/2dcontext/transformations/transform_ref.html", - "==" - ] - ], - "url": "/2dcontext/transformations/transform_a.html" - } - ], - "FileAPI/url/url_xmlhttprequest_img.html": [ - { - "path": "FileAPI/url/url_xmlhttprequest_img.html", - "references": [ - [ - "/FileAPI/url/url_xmlhttprequest_img-ref.html", - "==" - ] - ], - "url": "/FileAPI/url/url_xmlhttprequest_img.html" - } - ], - "compat/webkit-text-fill-color-property-001a.html": [ - { - "path": "compat/webkit-text-fill-color-property-001a.html", - "references": [ - [ - "/compat/webkit-text-fill-color-property-001-ref.html", - "==" - ] - ], - "url": "/compat/webkit-text-fill-color-property-001a.html" - } - ], - "compat/webkit-text-fill-color-property-001b.html": [ - { - "path": "compat/webkit-text-fill-color-property-001b.html", - "references": [ - [ - "/compat/webkit-text-fill-color-property-001-ref.html", - "==" - ] - ], - "url": "/compat/webkit-text-fill-color-property-001b.html" - } - ], - "compat/webkit-text-fill-color-property-001c.html": [ - { - "path": "compat/webkit-text-fill-color-property-001c.html", - "references": [ - [ - "/compat/webkit-text-fill-color-property-001-ref.html", - "==" - ] - ], - "url": "/compat/webkit-text-fill-color-property-001c.html" - } - ], - "compat/webkit-text-fill-color-property-001d.html": [ - { - "path": "compat/webkit-text-fill-color-property-001d.html", - "references": [ - [ - "/compat/webkit-text-fill-color-property-001-ref.html", - "==" - ] - ], - "url": "/compat/webkit-text-fill-color-property-001d.html" - } - ], - "custom-elements/registering-custom-elements/unresolved-element-pseudoclass/unresolved-element-pseudoclass-css-test-custom-tag.html": [ - { - "path": "custom-elements/registering-custom-elements/unresolved-element-pseudoclass/unresolved-element-pseudoclass-css-test-custom-tag.html", - "references": [ - [ - "/custom-elements/registering-custom-elements/unresolved-element-pseudoclass/unresolved-element-pseudoclass-css-test-custom-tag-ref.html", - "==" - ] - ], - "url": "/custom-elements/registering-custom-elements/unresolved-element-pseudoclass/unresolved-element-pseudoclass-css-test-custom-tag.html" - } - ], - "custom-elements/registering-custom-elements/unresolved-element-pseudoclass/unresolved-element-pseudoclass-css-test-registered-custom-tag.html": [ - { - "path": "custom-elements/registering-custom-elements/unresolved-element-pseudoclass/unresolved-element-pseudoclass-css-test-registered-custom-tag.html", - "references": [ - [ - "/custom-elements/registering-custom-elements/unresolved-element-pseudoclass/unresolved-element-pseudoclass-css-test-registered-custom-tag-ref.html", - "==" - ] - ], - "url": "/custom-elements/registering-custom-elements/unresolved-element-pseudoclass/unresolved-element-pseudoclass-css-test-registered-custom-tag.html" - } - ], - "custom-elements/registering-custom-elements/unresolved-element-pseudoclass/unresolved-element-pseudoclass-css-test-registered-type-extension.html": [ - { - "path": "custom-elements/registering-custom-elements/unresolved-element-pseudoclass/unresolved-element-pseudoclass-css-test-registered-type-extension.html", - "references": [ - [ - "/custom-elements/registering-custom-elements/unresolved-element-pseudoclass/unresolved-element-pseudoclass-css-test-registered-type-extension-ref.html", - "==" - ] - ], - "url": "/custom-elements/registering-custom-elements/unresolved-element-pseudoclass/unresolved-element-pseudoclass-css-test-registered-type-extension.html" - } - ], - "custom-elements/registering-custom-elements/unresolved-element-pseudoclass/unresolved-element-pseudoclass-css-test-type-extension.html": [ - { - "path": "custom-elements/registering-custom-elements/unresolved-element-pseudoclass/unresolved-element-pseudoclass-css-test-type-extension.html", - "references": [ - [ - "/custom-elements/registering-custom-elements/unresolved-element-pseudoclass/unresolved-element-pseudoclass-css-test-type-extension-ref.html", - "==" - ] - ], - "url": "/custom-elements/registering-custom-elements/unresolved-element-pseudoclass/unresolved-element-pseudoclass-css-test-type-extension.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-EN-L.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-EN-L.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-EN-L-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-EN-L.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-EN-R.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-EN-R.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-EN-R-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-EN-R.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-L.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-L.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-L-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-L.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-N-EN-L.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-N-EN-L.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-N-EN-L-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-N-EN-L.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-N-EN-R.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-N-EN-R.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-N-EN-R-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-N-EN-R.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-N-EN.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-N-EN.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-N-EN-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-N-EN.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-N-L.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-N-L.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-N-L-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-N-L.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-N-R.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-N-R.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-N-R-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-N-R.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-R.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-R.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-R-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-R.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-contained-L.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-contained-L.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-contained-L-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-contained-L.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-contained-R.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-contained-R.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-contained-R-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-contained-R.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-contained-bdi-L.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-contained-bdi-L.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-contained-bdi-L-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-contained-bdi-L.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-contained-bdi-R.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-contained-bdi-R.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-contained-bdi-R-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-contained-bdi-R.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-contained-dir-L.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-contained-dir-L.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-contained-dir-L-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-contained-dir-L.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-contained-dir-R.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-contained-dir-R.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-contained-dir-R-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-contained-dir-R.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-contained-dir_auto-L.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-contained-dir_auto-L.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-contained-dir_auto-L-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-contained-dir_auto-L.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-contained-dir_auto-R.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-contained-dir_auto-R.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-contained-dir_auto-R-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-contained-dir_auto-R.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-contained-script-L.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-contained-script-L.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-contained-script-L-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-contained-script-L.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-contained-script-R.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-contained-script-R.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-contained-script-R-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-contained-script-R.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-contained-style-L.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-contained-style-L.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-contained-style-L-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-contained-style-L.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-contained-style-R.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-contained-style-R.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-contained-style-R-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-contained-style-R.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-contained-textarea-L.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-contained-textarea-L.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-contained-textarea-L-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-contained-textarea-L.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-contained-textarea-R.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-contained-textarea-R.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-contained-textarea-R-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-contained-textarea-R.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-input-EN-L.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-input-EN-L.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-input-EN-L-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-input-EN-L.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-input-EN-R.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-input-EN-R.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-input-EN-R-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-input-EN-R.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-input-L.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-input-L.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-input-L-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-input-L.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-input-N-EN-L.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-input-N-EN-L.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-input-N-EN-L-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-input-N-EN-L.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-input-N-EN-R.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-input-N-EN-R.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-input-N-EN-R-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-input-N-EN-R.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-input-N-EN.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-input-N-EN.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-input-N-EN-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-input-N-EN.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-input-N-L.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-input-N-L.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-input-N-L-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-input-N-L.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-input-N-R.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-input-N-R.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-input-N-R-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-input-N-R.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-input-R.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-input-R.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-input-R-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-input-R.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-input-script-EN-L.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-input-script-EN-L.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-input-script-EN-L-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-input-script-EN-L.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-input-script-EN-R.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-input-script-EN-R.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-input-script-EN-R-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-input-script-EN-R.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-input-script-L.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-input-script-L.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-input-script-L-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-input-script-L.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-input-script-N-EN-L.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-input-script-N-EN-L.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-input-script-N-EN-L-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-input-script-N-EN-L.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-input-script-N-EN-R.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-input-script-N-EN-R.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-input-script-N-EN-R-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-input-script-N-EN-R.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-input-script-N-EN.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-input-script-N-EN.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-input-script-N-EN-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-input-script-N-EN.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-input-script-N-L.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-input-script-N-L.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-input-script-N-L-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-input-script-N-L.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-input-script-N-R.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-input-script-N-R.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-input-script-N-R-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-input-script-N-R.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-input-script-R.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-input-script-R.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-input-script-R-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-input-script-R.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-isolate.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-isolate.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-isolate-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-isolate.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-pre-N-EN.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-pre-N-EN.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-pre-N-EN-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-pre-N-EN.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-pre-N-between-Rs.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-pre-N-between-Rs.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-pre-N-between-Rs-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-pre-N-between-Rs.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-pre-mixed.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-pre-mixed.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-pre-mixed-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-pre-mixed.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-textarea-N-EN.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-textarea-N-EN.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-textarea-N-EN-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-textarea-N-EN.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-textarea-N-between-Rs.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-textarea-N-between-Rs.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-textarea-N-between-Rs-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-textarea-N-between-Rs.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-textarea-mixed.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-textarea-mixed.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-textarea-mixed-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-textarea-mixed.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-textarea-script-N-EN.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-textarea-script-N-EN.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-textarea-script-N-EN-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-textarea-script-N-EN.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-textarea-script-N-between-Rs.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-textarea-script-N-between-Rs.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-textarea-script-N-between-Rs-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-textarea-script-N-between-Rs.html" - } - ], - "html/dom/elements/global-attributes/dir_auto-textarea-script-mixed.html": [ - { - "path": "html/dom/elements/global-attributes/dir_auto-textarea-script-mixed.html", - "references": [ - [ - "/html/dom/elements/global-attributes/dir_auto-textarea-script-mixed-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/dir_auto-textarea-script-mixed.html" - } - ], - "html/dom/elements/global-attributes/lang-xmllang-01.html": [ - { - "path": "html/dom/elements/global-attributes/lang-xmllang-01.html", - "references": [ - [ - "/html/dom/elements/global-attributes/lang-xmllang-01-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/lang-xmllang-01.html" - } - ], - "html/dom/elements/global-attributes/lang-xyzzy.html": [ - { - "path": "html/dom/elements/global-attributes/lang-xyzzy.html", - "references": [ - [ - "/html/dom/elements/global-attributes/lang-xyzzy-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/lang-xyzzy.html" - } - ], - "html/dom/elements/global-attributes/style-01.html": [ - { - "path": "html/dom/elements/global-attributes/style-01.html", - "references": [ - [ - "/html/dom/elements/global-attributes/style-01-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/global-attributes/style-01.html" - } - ], - "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-001a.html": [ - { - "path": "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-001a.html", - "references": [ - [ - "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/reference/dir-isolation-001-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-001a.html" - } - ], - "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-001b.html": [ - { - "path": "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-001b.html", - "references": [ - [ - "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/reference/dir-isolation-001-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-001b.html" - } - ], - "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-001c.html": [ - { - "path": "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-001c.html", - "references": [ - [ - "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/reference/dir-isolation-001-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-001c.html" - } - ], - "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-002a.html": [ - { - "path": "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-002a.html", - "references": [ - [ - "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/reference/dir-isolation-002a-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-002a.html" - } - ], - "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-002b.html": [ - { - "path": "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-002b.html", - "references": [ - [ - "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/reference/dir-isolation-002b-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-002b.html" - } - ], - "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-002c.html": [ - { - "path": "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-002c.html", - "references": [ - [ - "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/reference/dir-isolation-002c-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-002c.html" - } - ], - "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-003a.html": [ - { - "path": "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-003a.html", - "references": [ - [ - "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/reference/dir-isolation-003-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-003a.html" - } - ], - "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-003b.html": [ - { - "path": "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-003b.html", - "references": [ - [ - "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/reference/dir-isolation-003-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-003b.html" - } - ], - "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-003c.html": [ - { - "path": "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-003c.html", - "references": [ - [ - "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/reference/dir-isolation-003-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-003c.html" - } - ], - "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-004a.html": [ - { - "path": "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-004a.html", - "references": [ - [ - "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/reference/dir-isolation-004-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-004a.html" - } - ], - "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-004b.html": [ - { - "path": "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-004b.html", - "references": [ - [ - "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/reference/dir-isolation-004-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-004b.html" - } - ], - "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-004c.html": [ - { - "path": "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-004c.html", - "references": [ - [ - "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/reference/dir-isolation-004-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-004c.html" - } - ], - "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-005a.html": [ - { - "path": "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-005a.html", - "references": [ - [ - "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/reference/dir-isolation-005-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-005a.html" - } - ], - "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-005b.html": [ - { - "path": "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-005b.html", - "references": [ - [ - "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/reference/dir-isolation-005-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-005b.html" - } - ], - "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-005c.html": [ - { - "path": "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-005c.html", - "references": [ - [ - "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/reference/dir-isolation-005-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-005c.html" - } - ], - "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-006a.html": [ - { - "path": "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-006a.html", - "references": [ - [ - "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/reference/dir-isolation-006-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-006a.html" - } - ], - "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-006b.html": [ - { - "path": "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-006b.html", - "references": [ - [ - "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/reference/dir-isolation-006-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-006b.html" - } - ], - "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-006c.html": [ - { - "path": "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-006c.html", - "references": [ - [ - "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/reference/dir-isolation-006c-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-006c.html" - } - ], - "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-007a.html": [ - { - "path": "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-007a.html", - "references": [ - [ - "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/reference/dir-isolation-007-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-007a.html" - } - ], - "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-007b.html": [ - { - "path": "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-007b.html", - "references": [ - [ - "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/reference/dir-isolation-007-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-007b.html" - } - ], - "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-007c.html": [ - { - "path": "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-007c.html", - "references": [ - [ - "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/reference/dir-isolation-007-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-007c.html" - } - ], - "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-008a.html": [ - { - "path": "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-008a.html", - "references": [ - [ - "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/reference/dir-isolation-008-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-008a.html" - } - ], - "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-008b.html": [ - { - "path": "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-008b.html", - "references": [ - [ - "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/reference/dir-isolation-008-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-008b.html" - } - ], - "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-008c.html": [ - { - "path": "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-008c.html", - "references": [ - [ - "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/reference/dir-isolation-008-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-008c.html" - } - ], - "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-009a.html": [ - { - "path": "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-009a.html", - "references": [ - [ - "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/reference/dir-isolation-009-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-009a.html" - } - ], - "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-009b.html": [ - { - "path": "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-009b.html", - "references": [ - [ - "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/reference/dir-isolation-009b-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-009b.html" - } - ], - "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-009c.html": [ - { - "path": "html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-009c.html", - "references": [ - [ - "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/reference/dir-isolation-009b-ref.html", - "==" - ] - ], - "url": "/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-009c.html" - } - ], - "html/editing/the-hidden-attribute/hidden-2.svg": [ - { - "path": "html/editing/the-hidden-attribute/hidden-2.svg", - "references": [ - [ - "/html/editing/the-hidden-attribute/hidden-2-ref.svg", - "==" - ] - ], - "url": "/html/editing/the-hidden-attribute/hidden-2.svg" - } - ], - "html/rendering/bindings/the-input-element-as-a-text-entry-widget/unrecognized-type-should-fallback-as-text-type.html": [ - { - "path": "html/rendering/bindings/the-input-element-as-a-text-entry-widget/unrecognized-type-should-fallback-as-text-type.html", - "references": [ - [ - "/html/rendering/bindings/the-input-element-as-a-text-entry-widget/unrecognized-type-should-fallback-as-text-type-ref.html", - "==" - ] - ], - "url": "/html/rendering/bindings/the-input-element-as-a-text-entry-widget/unrecognized-type-should-fallback-as-text-type.html" - } - ], - "html/rendering/bindings/the-select-element-0/option-label.html": [ - { - "path": "html/rendering/bindings/the-select-element-0/option-label.html", - "references": [ - [ - "/html/rendering/bindings/the-select-element-0/option-label-ref.html", - "==" - ] - ], - "url": "/html/rendering/bindings/the-select-element-0/option-label.html" - } - ], - "html/rendering/bindings/the-textarea-element-0/cols-default.html": [ - { - "path": "html/rendering/bindings/the-textarea-element-0/cols-default.html", - "references": [ - [ - "/html/rendering/bindings/the-textarea-element-0/textarea-ref.html", - "==" - ] - ], - "url": "/html/rendering/bindings/the-textarea-element-0/cols-default.html" - } - ], - "html/rendering/bindings/the-textarea-element-0/cols-zero.html": [ - { - "path": "html/rendering/bindings/the-textarea-element-0/cols-zero.html", - "references": [ - [ - "/html/rendering/bindings/the-textarea-element-0/textarea-ref.html", - "==" - ] - ], - "url": "/html/rendering/bindings/the-textarea-element-0/cols-zero.html" - } - ], - "html/rendering/bindings/the-textarea-element-0/rows-default.html": [ - { - "path": "html/rendering/bindings/the-textarea-element-0/rows-default.html", - "references": [ - [ - "/html/rendering/bindings/the-textarea-element-0/textarea-ref.html", - "==" - ] - ], - "url": "/html/rendering/bindings/the-textarea-element-0/rows-default.html" - } - ], - "html/rendering/bindings/the-textarea-element-0/rows-zero.html": [ - { - "path": "html/rendering/bindings/the-textarea-element-0/rows-zero.html", - "references": [ - [ - "/html/rendering/bindings/the-textarea-element-0/textarea-ref.html", - "==" - ] - ], - "url": "/html/rendering/bindings/the-textarea-element-0/rows-zero.html" - } - ], - "html/rendering/non-replaced-elements/flow-content-0/figure.html": [ - { - "path": "html/rendering/non-replaced-elements/flow-content-0/figure.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/flow-content-0/figure-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/flow-content-0/figure.html" - } - ], - "html/rendering/non-replaced-elements/lists/li-type-supported-xhtml.xhtml": [ - { - "path": "html/rendering/non-replaced-elements/lists/li-type-supported-xhtml.xhtml", - "references": [ - [ - "/html/rendering/non-replaced-elements/lists/li-type-supported-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/lists/li-type-supported-xhtml.xhtml" - } - ], - "html/rendering/non-replaced-elements/lists/li-type-supported.html": [ - { - "path": "html/rendering/non-replaced-elements/lists/li-type-supported.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/lists/li-type-supported-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/lists/li-type-supported.html" - } - ], - "html/rendering/non-replaced-elements/lists/li-type-unsupported-lower-alpha.html": [ - { - "path": "html/rendering/non-replaced-elements/lists/li-type-unsupported-lower-alpha.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/lists/li-type-unsupported-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/lists/li-type-unsupported-lower-alpha.html" - } - ], - "html/rendering/non-replaced-elements/lists/li-type-unsupported-lower-roman.html": [ - { - "path": "html/rendering/non-replaced-elements/lists/li-type-unsupported-lower-roman.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/lists/li-type-unsupported-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/lists/li-type-unsupported-lower-roman.html" - } - ], - "html/rendering/non-replaced-elements/lists/li-type-unsupported-upper-alpha.html": [ - { - "path": "html/rendering/non-replaced-elements/lists/li-type-unsupported-upper-alpha.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/lists/li-type-unsupported-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/lists/li-type-unsupported-upper-alpha.html" - } - ], - "html/rendering/non-replaced-elements/lists/li-type-unsupported-upper-roman.html": [ - { - "path": "html/rendering/non-replaced-elements/lists/li-type-unsupported-upper-roman.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/lists/li-type-unsupported-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/lists/li-type-unsupported-upper-roman.html" - } - ], - "html/rendering/non-replaced-elements/lists/ol-type-supported-xhtml.xhtml": [ - { - "path": "html/rendering/non-replaced-elements/lists/ol-type-supported-xhtml.xhtml", - "references": [ - [ - "/html/rendering/non-replaced-elements/lists/ol-type-supported-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/lists/ol-type-supported-xhtml.xhtml" - } - ], - "html/rendering/non-replaced-elements/lists/ol-type-supported.html": [ - { - "path": "html/rendering/non-replaced-elements/lists/ol-type-supported.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/lists/ol-type-supported-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/lists/ol-type-supported.html" - } - ], - "html/rendering/non-replaced-elements/lists/ol-type-unsupported-circle.html": [ - { - "path": "html/rendering/non-replaced-elements/lists/ol-type-unsupported-circle.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/lists/ol-type-unsupported-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/lists/ol-type-unsupported-circle.html" - } - ], - "html/rendering/non-replaced-elements/lists/ol-type-unsupported-disc.html": [ - { - "path": "html/rendering/non-replaced-elements/lists/ol-type-unsupported-disc.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/lists/ol-type-unsupported-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/lists/ol-type-unsupported-disc.html" - } - ], - "html/rendering/non-replaced-elements/lists/ol-type-unsupported-invalid.html": [ - { - "path": "html/rendering/non-replaced-elements/lists/ol-type-unsupported-invalid.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/lists/ol-type-unsupported-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/lists/ol-type-unsupported-invalid.html" - } - ], - "html/rendering/non-replaced-elements/lists/ol-type-unsupported-lower-alpha.html": [ - { - "path": "html/rendering/non-replaced-elements/lists/ol-type-unsupported-lower-alpha.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/lists/ol-type-unsupported-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/lists/ol-type-unsupported-lower-alpha.html" - } - ], - "html/rendering/non-replaced-elements/lists/ol-type-unsupported-lower-roman.html": [ - { - "path": "html/rendering/non-replaced-elements/lists/ol-type-unsupported-lower-roman.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/lists/ol-type-unsupported-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/lists/ol-type-unsupported-lower-roman.html" - } - ], - "html/rendering/non-replaced-elements/lists/ol-type-unsupported-none.html": [ - { - "path": "html/rendering/non-replaced-elements/lists/ol-type-unsupported-none.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/lists/ol-type-unsupported-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/lists/ol-type-unsupported-none.html" - } - ], - "html/rendering/non-replaced-elements/lists/ol-type-unsupported-round.html": [ - { - "path": "html/rendering/non-replaced-elements/lists/ol-type-unsupported-round.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/lists/ol-type-unsupported-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/lists/ol-type-unsupported-round.html" - } - ], - "html/rendering/non-replaced-elements/lists/ol-type-unsupported-square.html": [ - { - "path": "html/rendering/non-replaced-elements/lists/ol-type-unsupported-square.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/lists/ol-type-unsupported-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/lists/ol-type-unsupported-square.html" - } - ], - "html/rendering/non-replaced-elements/lists/ol-type-unsupported-upper-alpha.html": [ - { - "path": "html/rendering/non-replaced-elements/lists/ol-type-unsupported-upper-alpha.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/lists/ol-type-unsupported-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/lists/ol-type-unsupported-upper-alpha.html" - } - ], - "html/rendering/non-replaced-elements/lists/ol-type-unsupported-upper-roman.html": [ - { - "path": "html/rendering/non-replaced-elements/lists/ol-type-unsupported-upper-roman.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/lists/ol-type-unsupported-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/lists/ol-type-unsupported-upper-roman.html" - } - ], - "html/rendering/non-replaced-elements/lists/ul-type-supported-xhtml.xhtml": [ - { - "path": "html/rendering/non-replaced-elements/lists/ul-type-supported-xhtml.xhtml", - "references": [ - [ - "/html/rendering/non-replaced-elements/lists/ul-type-supported-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/lists/ul-type-supported-xhtml.xhtml" - } - ], - "html/rendering/non-replaced-elements/lists/ul-type-supported.html": [ - { - "path": "html/rendering/non-replaced-elements/lists/ul-type-supported.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/lists/ul-type-supported-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/lists/ul-type-supported.html" - } - ], - "html/rendering/non-replaced-elements/lists/ul-type-unsupported-decimal.html": [ - { - "path": "html/rendering/non-replaced-elements/lists/ul-type-unsupported-decimal.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/lists/ul-type-unsupported-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/lists/ul-type-unsupported-decimal.html" - } - ], - "html/rendering/non-replaced-elements/lists/ul-type-unsupported-invalid.html": [ - { - "path": "html/rendering/non-replaced-elements/lists/ul-type-unsupported-invalid.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/lists/ul-type-unsupported-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/lists/ul-type-unsupported-invalid.html" - } - ], - "html/rendering/non-replaced-elements/lists/ul-type-unsupported-lower-alpha.html": [ - { - "path": "html/rendering/non-replaced-elements/lists/ul-type-unsupported-lower-alpha.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/lists/ul-type-unsupported-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/lists/ul-type-unsupported-lower-alpha.html" - } - ], - "html/rendering/non-replaced-elements/lists/ul-type-unsupported-lower-roman.html": [ - { - "path": "html/rendering/non-replaced-elements/lists/ul-type-unsupported-lower-roman.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/lists/ul-type-unsupported-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/lists/ul-type-unsupported-lower-roman.html" - } - ], - "html/rendering/non-replaced-elements/lists/ul-type-unsupported-upper-alpha.html": [ - { - "path": "html/rendering/non-replaced-elements/lists/ul-type-unsupported-upper-alpha.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/lists/ul-type-unsupported-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/lists/ul-type-unsupported-upper-alpha.html" - } - ], - "html/rendering/non-replaced-elements/lists/ul-type-unsupported-upper-roman.html": [ - { - "path": "html/rendering/non-replaced-elements/lists/ul-type-unsupported-upper-roman.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/lists/ul-type-unsupported-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/lists/ul-type-unsupported-upper-roman.html" - } - ], - "html/rendering/non-replaced-elements/phrasing-content-0/font-element-text-decoration-color/001-a.html": [ - { - "path": "html/rendering/non-replaced-elements/phrasing-content-0/font-element-text-decoration-color/001-a.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/phrasing-content-0/font-element-text-decoration-color/001-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/phrasing-content-0/font-element-text-decoration-color/001-a.html" - } - ], - "html/rendering/non-replaced-elements/phrasing-content-0/font-element-text-decoration-color/001-q.html": [ - { - "path": "html/rendering/non-replaced-elements/phrasing-content-0/font-element-text-decoration-color/001-q.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/phrasing-content-0/font-element-text-decoration-color/001-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/phrasing-content-0/font-element-text-decoration-color/001-q.html" - } - ], - "html/rendering/non-replaced-elements/phrasing-content-0/font-element-text-decoration-color/001-s.html": [ - { - "path": "html/rendering/non-replaced-elements/phrasing-content-0/font-element-text-decoration-color/001-s.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/phrasing-content-0/font-element-text-decoration-color/001-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/phrasing-content-0/font-element-text-decoration-color/001-s.html" - } - ], - "html/rendering/non-replaced-elements/phrasing-content-0/font-element-text-decoration-color/001-x.xhtml": [ - { - "path": "html/rendering/non-replaced-elements/phrasing-content-0/font-element-text-decoration-color/001-x.xhtml", - "references": [ - [ - "/html/rendering/non-replaced-elements/phrasing-content-0/font-element-text-decoration-color/001-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/phrasing-content-0/font-element-text-decoration-color/001-x.xhtml" - } - ], - "html/rendering/non-replaced-elements/tables/table-border-1.html": [ - { - "path": "html/rendering/non-replaced-elements/tables/table-border-1.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/tables/table-border-1-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/tables/table-border-1.html" - } - ], - "html/rendering/non-replaced-elements/tables/table-border-2.html": [ - { - "path": "html/rendering/non-replaced-elements/tables/table-border-2.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/tables/table-border-2-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/tables/table-border-2.html" - } - ], - "html/rendering/non-replaced-elements/tables/table-cell-width-s.html": [ - { - "path": "html/rendering/non-replaced-elements/tables/table-cell-width-s.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/tables/table-cell-width-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/tables/table-cell-width-s.html" - } - ], - "html/rendering/non-replaced-elements/tables/table-cell-width.html": [ - { - "path": "html/rendering/non-replaced-elements/tables/table-cell-width.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/tables/table-cell-width-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/tables/table-cell-width.html" - } - ], - "html/rendering/non-replaced-elements/tables/table-layout.html": [ - { - "path": "html/rendering/non-replaced-elements/tables/table-layout.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/tables/table-layout-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/tables/table-layout.html" - } - ], - "html/rendering/non-replaced-elements/tables/table-width-150percent.html": [ - { - "path": "html/rendering/non-replaced-elements/tables/table-width-150percent.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/tables/table-width-150percent-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/tables/table-width-150percent.html" - } - ], - "html/rendering/non-replaced-elements/tables/table-width-s.html": [ - { - "path": "html/rendering/non-replaced-elements/tables/table-width-s.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/tables/table-width-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/tables/table-width-s.html" - } - ], - "html/rendering/non-replaced-elements/tables/table-width.html": [ - { - "path": "html/rendering/non-replaced-elements/tables/table-width.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/tables/table-width-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/tables/table-width.html" - } - ], - "html/rendering/non-replaced-elements/the-fieldset-element-0/min-width-not-important.html": [ - { - "path": "html/rendering/non-replaced-elements/the-fieldset-element-0/min-width-not-important.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/the-fieldset-element-0/ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/the-fieldset-element-0/min-width-not-important.html" - } - ], - "html/rendering/non-replaced-elements/the-hr-element-0/align.html": [ - { - "path": "html/rendering/non-replaced-elements/the-hr-element-0/align.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/the-hr-element-0/align-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/the-hr-element-0/align.html" - } - ], - "html/rendering/non-replaced-elements/the-hr-element-0/color.html": [ - { - "path": "html/rendering/non-replaced-elements/the-hr-element-0/color.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/the-hr-element-0/color-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/the-hr-element-0/color.html" - } - ], - "html/rendering/non-replaced-elements/the-hr-element-0/width.html": [ - { - "path": "html/rendering/non-replaced-elements/the-hr-element-0/width.html", - "references": [ - [ - "/html/rendering/non-replaced-elements/the-hr-element-0/width-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/the-hr-element-0/width.html" - } - ], - "html/rendering/non-replaced-elements/the-page/body_text_00ffff.xhtml": [ - { - "path": "html/rendering/non-replaced-elements/the-page/body_text_00ffff.xhtml", - "references": [ - [ - "/html/rendering/non-replaced-elements/the-page/body_text_00ffff-ref.html", - "==" - ] - ], - "url": "/html/rendering/non-replaced-elements/the-page/body_text_00ffff.xhtml" - } - ], - "html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-dim.html": [ - { - "path": "html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-dim.html", - "references": [ - [ - "/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-dim-ref.html", - "==" - ] - ], - "url": "/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-dim.html" - } - ], - "html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img_border_percent.xhtml": [ - { - "path": "html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img_border_percent.xhtml", - "references": [ - [ - "/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img_border-ref.xhtml", - "==" - ] - ], - "url": "/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img_border_percent.xhtml" - } - ], - "html/rendering/replaced-elements/attributes-for-embedded-content-and-images/object_border_perc.xhtml": [ - { - "path": "html/rendering/replaced-elements/attributes-for-embedded-content-and-images/object_border_perc.xhtml", - "references": [ - [ - "/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/object_border-ref.xhtml", - "==" - ] - ], - "url": "/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/object_border_perc.xhtml" - } - ], - "html/rendering/replaced-elements/attributes-for-embedded-content-and-images/object_border_pixel.xhtml": [ - { - "path": "html/rendering/replaced-elements/attributes-for-embedded-content-and-images/object_border_pixel.xhtml", - "references": [ - [ - "/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/object_border-ref.xhtml", - "==" - ] - ], - "url": "/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/object_border_pixel.xhtml" - } - ], - "html/rendering/replaced-elements/images/space.html": [ - { - "path": "html/rendering/replaced-elements/images/space.html", - "references": [ - [ - "/html/rendering/replaced-elements/images/space-ref.html", - "==" - ] - ], - "url": "/html/rendering/replaced-elements/images/space.html" - } - ], - "html/semantics/document-metadata/the-link-element/stylesheet-with-base.html": [ - { - "path": "html/semantics/document-metadata/the-link-element/stylesheet-with-base.html", - "references": [ - [ - "/html/semantics/document-metadata/the-link-element/stylesheet-with-base-ref.html", - "==" - ] - ], - "url": "/html/semantics/document-metadata/the-link-element/stylesheet-with-base.html" - } - ], - "html/semantics/document-metadata/the-style-element/html_style_in_comment.xhtml": [ - { - "path": "html/semantics/document-metadata/the-style-element/html_style_in_comment.xhtml", - "references": [ - [ - "/html/semantics/document-metadata/the-style-element/html_style_in_comment-ref.html", - "==" - ] - ], - "url": "/html/semantics/document-metadata/the-style-element/html_style_in_comment.xhtml" - } - ], - "html/semantics/embedded-content/the-audio-element/audio_001.htm": [ - { - "path": "html/semantics/embedded-content/the-audio-element/audio_001.htm", - "references": [ - [ - "/html/semantics/embedded-content/the-audio-element/audio_content-ref.htm", - "==" - ] - ], - "url": "/html/semantics/embedded-content/the-audio-element/audio_001.htm" - } - ], - "html/semantics/embedded-content/the-audio-element/audio_002.htm": [ - { - "path": "html/semantics/embedded-content/the-audio-element/audio_002.htm", - "references": [ - [ - "/html/semantics/embedded-content/the-audio-element/audio_content-ref.htm", - "==" - ] - ], - "url": "/html/semantics/embedded-content/the-audio-element/audio_002.htm" - } - ], - "html/semantics/embedded-content/the-embed-element/embed-represent-nothing-01.html": [ - { - "path": "html/semantics/embedded-content/the-embed-element/embed-represent-nothing-01.html", - "references": [ - [ - "/html/semantics/embedded-content/the-embed-element/embed-represent-nothing-ref.html", - "==" - ] - ], - "url": "/html/semantics/embedded-content/the-embed-element/embed-represent-nothing-01.html" - } - ], - "html/semantics/embedded-content/the-embed-element/embed-represent-nothing-02.html": [ - { - "path": "html/semantics/embedded-content/the-embed-element/embed-represent-nothing-02.html", - "references": [ - [ - "/html/semantics/embedded-content/the-embed-element/embed-represent-nothing-ref.html", - "==" - ] - ], - "url": "/html/semantics/embedded-content/the-embed-element/embed-represent-nothing-02.html" - } - ], - "html/semantics/embedded-content/the-embed-element/embed-represent-nothing-03.html": [ - { - "path": "html/semantics/embedded-content/the-embed-element/embed-represent-nothing-03.html", - "references": [ - [ - "/html/semantics/embedded-content/the-embed-element/embed-represent-nothing-ref.html", - "==" - ] - ], - "url": "/html/semantics/embedded-content/the-embed-element/embed-represent-nothing-03.html" - } - ], - "html/semantics/embedded-content/the-embed-element/embed-represent-nothing-04.html": [ - { - "path": "html/semantics/embedded-content/the-embed-element/embed-represent-nothing-04.html", - "references": [ - [ - "/html/semantics/embedded-content/the-embed-element/embed-represent-nothing-ref.html", - "==" - ] - ], - "url": "/html/semantics/embedded-content/the-embed-element/embed-represent-nothing-04.html" - } - ], - "html/semantics/embedded-content/the-iframe-element/iframe-with-base.html": [ - { - "path": "html/semantics/embedded-content/the-iframe-element/iframe-with-base.html", - "references": [ - [ - "/html/semantics/embedded-content/the-iframe-element/iframe-with-base-ref.html", - "==" - ] - ], - "url": "/html/semantics/embedded-content/the-iframe-element/iframe-with-base.html" - } - ], - "html/semantics/embedded-content/the-img-element/document-base-url.html": [ - { - "path": "html/semantics/embedded-content/the-img-element/document-base-url.html", - "references": [ - [ - "/html/semantics/embedded-content/the-img-element/document-base-url-ref.html", - "==" - ] - ], - "url": "/html/semantics/embedded-content/the-img-element/document-base-url.html" - } - ], - "html/semantics/embedded-content/the-video-element/video_content_image.htm": [ - { - "path": "html/semantics/embedded-content/the-video-element/video_content_image.htm", - "references": [ - [ - "/html/semantics/embedded-content/the-video-element/video_content-ref.htm", - "==" - ] - ], - "url": "/html/semantics/embedded-content/the-video-element/video_content_image.htm" - } - ], - "html/semantics/embedded-content/the-video-element/video_content_text.htm": [ - { - "path": "html/semantics/embedded-content/the-video-element/video_content_text.htm", - "references": [ - [ - "/html/semantics/embedded-content/the-video-element/video_content-ref.htm", - "==" - ] - ], - "url": "/html/semantics/embedded-content/the-video-element/video_content_text.htm" - } - ], - "html/semantics/embedded-content/the-video-element/video_dynamic_poster_absolute.htm": [ - { - "path": "html/semantics/embedded-content/the-video-element/video_dynamic_poster_absolute.htm", - "references": [ - [ - "/html/semantics/embedded-content/the-video-element/video_dynamic_poster-ref.htm", - "==" - ] - ], - "url": "/html/semantics/embedded-content/the-video-element/video_dynamic_poster_absolute.htm" - } - ], - "html/semantics/embedded-content/the-video-element/video_dynamic_poster_relative.htm": [ - { - "path": "html/semantics/embedded-content/the-video-element/video_dynamic_poster_relative.htm", - "references": [ - [ - "/html/semantics/embedded-content/the-video-element/video_dynamic_poster-ref.htm", - "==" - ] - ], - "url": "/html/semantics/embedded-content/the-video-element/video_dynamic_poster_relative.htm" - } - ], - "html/semantics/embedded-content/the-video-element/video_initially_paused.html": [ - { - "path": "html/semantics/embedded-content/the-video-element/video_initially_paused.html", - "references": [ - [ - "/html/semantics/embedded-content/the-video-element/video_initially_paused-ref.html", - "==" - ] - ], - "url": "/html/semantics/embedded-content/the-video-element/video_initially_paused.html" - } - ], - "html/semantics/forms/the-input-element/image01.html": [ - { - "path": "html/semantics/forms/the-input-element/image01.html", - "references": [ - [ - "/html/semantics/forms/the-input-element/image01-ref.html", - "==" - ] - ], - "url": "/html/semantics/forms/the-input-element/image01.html" - } - ], - "html/semantics/forms/the-textarea-element/textarea-newline-bidi.html": [ - { - "path": "html/semantics/forms/the-textarea-element/textarea-newline-bidi.html", - "references": [ - [ - "/html/semantics/forms/the-textarea-element/textarea-newline-bidi-ref.html", - "==" - ] - ], - "url": "/html/semantics/forms/the-textarea-element/textarea-newline-bidi.html" - } - ], - "html/semantics/grouping-content/the-li-element/grouping-li-reftest-002.html": [ - { - "path": "html/semantics/grouping-content/the-li-element/grouping-li-reftest-002.html", - "references": [ - [ - "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-002-ref.html", - "==" - ] - ], - "url": "/html/semantics/grouping-content/the-li-element/grouping-li-reftest-002.html" - } - ], - "html/semantics/grouping-content/the-ol-element/reversed-2.html": [ - { - "path": "html/semantics/grouping-content/the-ol-element/reversed-2.html", - "references": [ - [ - "/html/semantics/grouping-content/the-ol-element/reversed-2-ref.html", - "==" - ] - ], - "url": "/html/semantics/grouping-content/the-ol-element/reversed-2.html" - } - ], - "html/semantics/grouping-content/the-pre-element/pre-newline-bidi.html": [ - { - "path": "html/semantics/grouping-content/the-pre-element/pre-newline-bidi.html", - "references": [ - [ - "/html/semantics/grouping-content/the-pre-element/pre-newline-bidi-ref.html", - "==" - ] - ], - "url": "/html/semantics/grouping-content/the-pre-element/pre-newline-bidi.html" - } - ], - "html/semantics/links/linktypes/alternate-css.html": [ - { - "path": "html/semantics/links/linktypes/alternate-css.html", - "references": [ - [ - "/html/semantics/links/linktypes/alternate-css-ref.html", - "==" - ] - ], - "url": "/html/semantics/links/linktypes/alternate-css.html" - } - ], - "html/semantics/scripting-1/the-template-element/additions-to-the-css-user-agent-style-sheet/css-user-agent-style-sheet-test-001.html": [ - { - "path": "html/semantics/scripting-1/the-template-element/additions-to-the-css-user-agent-style-sheet/css-user-agent-style-sheet-test-001.html", - "references": [ - [ - "/html/semantics/scripting-1/the-template-element/additions-to-the-css-user-agent-style-sheet/css-user-agent-style-sheet-test-001-ref.html", - "==" - ] - ], - "url": "/html/semantics/scripting-1/the-template-element/additions-to-the-css-user-agent-style-sheet/css-user-agent-style-sheet-test-001.html" - } - ], - "html/semantics/scripting-1/the-template-element/additions-to-the-css-user-agent-style-sheet/css-user-agent-style-sheet-test-002.html": [ - { - "path": "html/semantics/scripting-1/the-template-element/additions-to-the-css-user-agent-style-sheet/css-user-agent-style-sheet-test-002.html", - "references": [ - [ - "/html/semantics/scripting-1/the-template-element/additions-to-the-css-user-agent-style-sheet/css-user-agent-style-sheet-test-001-ref.html", - "==" - ] - ], - "url": "/html/semantics/scripting-1/the-template-element/additions-to-the-css-user-agent-style-sheet/css-user-agent-style-sheet-test-002.html" - } - ], - "html/semantics/scripting-1/the-template-element/additions-to-the-css-user-agent-style-sheet/css-user-agent-style-sheet-test-003.html": [ - { - "path": "html/semantics/scripting-1/the-template-element/additions-to-the-css-user-agent-style-sheet/css-user-agent-style-sheet-test-003.html", - "references": [ - [ - "/html/semantics/scripting-1/the-template-element/additions-to-the-css-user-agent-style-sheet/css-user-agent-style-sheet-test-001-ref.html", - "==" - ] - ], - "url": "/html/semantics/scripting-1/the-template-element/additions-to-the-css-user-agent-style-sheet/css-user-agent-style-sheet-test-003.html" - } - ], - "html/semantics/text-level-semantics/the-bdi-element/bdi-auto-dir-default.html": [ - { - "path": "html/semantics/text-level-semantics/the-bdi-element/bdi-auto-dir-default.html", - "references": [ - [ - "/html/semantics/text-level-semantics/the-bdi-element/bdi-auto-dir-default-ref.html", - "==" - ] - ], - "url": "/html/semantics/text-level-semantics/the-bdi-element/bdi-auto-dir-default.html" - } - ], - "html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-missing-pdf.html": [ - { - "path": "html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-missing-pdf.html", - "references": [ - [ - "/html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-missing-pdf-ref.html", - "==" - ] - ], - "url": "/html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-missing-pdf.html" - } - ], - "html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-nested.html": [ - { - "path": "html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-nested.html", - "references": [ - [ - "/html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-nested-ref.html", - "==" - ] - ], - "url": "/html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-nested.html" - } - ], - "html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-number.html": [ - { - "path": "html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-number.html", - "references": [ - [ - "/html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-number-ref.html", - "==" - ] - ], - "url": "/html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-number.html" - } - ], - "html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-separate.html": [ - { - "path": "html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-separate.html", - "references": [ - [ - "/html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-separate-ref.html", - "==" - ] - ], - "url": "/html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-separate.html" - } - ], - "html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-another-bdi-1.html": [ - { - "path": "html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-another-bdi-1.html", - "references": [ - [ - "/html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-another-bdi-1-ref.html", - "==" - ] - ], - "url": "/html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-another-bdi-1.html" - } - ], - "html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-another-bdi-2.html": [ - { - "path": "html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-another-bdi-2.html", - "references": [ - [ - "/html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-another-bdi-2-ref.html", - "==" - ] - ], - "url": "/html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-another-bdi-2.html" - } - ], - "html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-letter-following-1.html": [ - { - "path": "html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-letter-following-1.html", - "references": [ - [ - "/html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-letter-following-1-ref.html", - "==" - ] - ], - "url": "/html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-letter-following-1.html" - } - ], - "html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-letter-following-2.html": [ - { - "path": "html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-letter-following-2.html", - "references": [ - [ - "/html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-letter-following-2-ref.html", - "==" - ] - ], - "url": "/html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-letter-following-2.html" - } - ], - "html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-letter-preceding-1.html": [ - { - "path": "html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-letter-preceding-1.html", - "references": [ - [ - "/html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-letter-preceding-1-ref.html", - "==" - ] - ], - "url": "/html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-letter-preceding-1.html" - } - ], - "html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-letter-preceding-2.html": [ - { - "path": "html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-letter-preceding-2.html", - "references": [ - [ - "/html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-letter-preceding-2-ref.html", - "==" - ] - ], - "url": "/html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-letter-preceding-2.html" - } - ], - "html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-number-following-1.html": [ - { - "path": "html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-number-following-1.html", - "references": [ - [ - "/html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-number-following-1-ref.html", - "==" - ] - ], - "url": "/html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-number-following-1.html" - } - ], - "html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-number-following-2.html": [ - { - "path": "html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-number-following-2.html", - "references": [ - [ - "/html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-number-following-2-ref.html", - "==" - ] - ], - "url": "/html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-number-following-2.html" - } - ], - "html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-surrounding-run.html": [ - { - "path": "html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-surrounding-run.html", - "references": [ - [ - "/html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-surrounding-run-ref.html", - "==" - ] - ], - "url": "/html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-to-surrounding-run.html" - } - ], - "html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-wrapped.html": [ - { - "path": "html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-wrapped.html", - "references": [ - [ - "/html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-wrapped-ref.html", - "==" - ] - ], - "url": "/html/semantics/text-level-semantics/the-bdi-element/bdi-neutral-wrapped.html" - } - ], - "html/semantics/text-level-semantics/the-bdi-element/bdi-paragraph-level-container.html": [ - { - "path": "html/semantics/text-level-semantics/the-bdi-element/bdi-paragraph-level-container.html", - "references": [ - [ - "/html/semantics/text-level-semantics/the-bdi-element/bdi-paragraph-level-container-ref.html", - "==" - ] - ], - "url": "/html/semantics/text-level-semantics/the-bdi-element/bdi-paragraph-level-container.html" - } - ], - "html/semantics/text-level-semantics/the-bdo-element/bdo-child.html": [ - { - "path": "html/semantics/text-level-semantics/the-bdo-element/bdo-child.html", - "references": [ - [ - "/html/semantics/text-level-semantics/the-bdo-element/bidi-001-ref.html", - "==" - ] - ], - "url": "/html/semantics/text-level-semantics/the-bdo-element/bdo-child.html" - } - ], - "html/semantics/text-level-semantics/the-bdo-element/bdo-ltr.html": [ - { - "path": "html/semantics/text-level-semantics/the-bdo-element/bdo-ltr.html", - "references": [ - [ - "/html/semantics/text-level-semantics/the-bdo-element/bidi-001-ref.html", - "==" - ] - ], - "url": "/html/semantics/text-level-semantics/the-bdo-element/bdo-ltr.html" - } - ], - "html/semantics/text-level-semantics/the-bdo-element/bdo-override.html": [ - { - "path": "html/semantics/text-level-semantics/the-bdo-element/bdo-override.html", - "references": [ - [ - "/html/semantics/text-level-semantics/the-bdo-element/bidi-001-ref.html", - "==" - ] - ], - "url": "/html/semantics/text-level-semantics/the-bdo-element/bdo-override.html" - } - ], - "html/semantics/text-level-semantics/the-bdo-element/bidi-001.html": [ - { - "path": "html/semantics/text-level-semantics/the-bdo-element/bidi-001.html", - "references": [ - [ - "/html/semantics/text-level-semantics/the-bdo-element/bidi-001-ref.html", - "==" - ] - ], - "url": "/html/semantics/text-level-semantics/the-bdo-element/bidi-001.html" - } - ], - "html/semantics/text-level-semantics/the-br-element/br-bidi-in-inline-ancestors.html": [ - { - "path": "html/semantics/text-level-semantics/the-br-element/br-bidi-in-inline-ancestors.html", - "references": [ - [ - "/html/semantics/text-level-semantics/the-br-element/br-bidi-in-inline-ancestors-ref.html", - "==" - ] - ], - "url": "/html/semantics/text-level-semantics/the-br-element/br-bidi-in-inline-ancestors.html" - } - ], - "html/semantics/text-level-semantics/the-br-element/br-bidi.html": [ - { - "path": "html/semantics/text-level-semantics/the-br-element/br-bidi.html", - "references": [ - [ - "/html/semantics/text-level-semantics/the-br-element/br-bidi-ref.html", - "==" - ] - ], - "url": "/html/semantics/text-level-semantics/the-br-element/br-bidi.html" - } - ], - "html/semantics/text-level-semantics/the-wbr-element/wbr-element.html": [ - { - "path": "html/semantics/text-level-semantics/the-wbr-element/wbr-element.html", - "references": [ - [ - "/html/semantics/text-level-semantics/the-wbr-element/wbr-element-ref.html", - "==" - ] - ], - "url": "/html/semantics/text-level-semantics/the-wbr-element/wbr-element.html" - } - ], - "shadow-dom/untriaged/shadow-trees/nested-shadow-trees/nested_tree_reftest.html": [ - { - "path": "shadow-dom/untriaged/shadow-trees/nested-shadow-trees/nested_tree_reftest.html", - "references": [ - [ - "/shadow-dom/untriaged/shadow-trees/nested-shadow-trees/nested_tree_reftest-ref.html", - "==" - ] - ], - "url": "/shadow-dom/untriaged/shadow-trees/nested-shadow-trees/nested_tree_reftest.html" - } - ], - "shadow-dom/untriaged/shadow-trees/reprojection/reprojection-001.html": [ - { - "path": "shadow-dom/untriaged/shadow-trees/reprojection/reprojection-001.html", - "references": [ - [ - "/shadow-dom/untriaged/shadow-trees/reprojection/reprojection-001-ref.html", - "==" - ] - ], - "url": "/shadow-dom/untriaged/shadow-trees/reprojection/reprojection-001.html" - } - ], - "shadow-dom/untriaged/shadow-trees/shadow-root-001.html": [ - { - "path": "shadow-dom/untriaged/shadow-trees/shadow-root-001.html", - "references": [ - [ - "/shadow-dom/untriaged/shadow-trees/shadow-root-001-ref.html", - "==" - ] - ], - "url": "/shadow-dom/untriaged/shadow-trees/shadow-root-001.html" - } - ], - "shadow-dom/untriaged/shadow-trees/shadow-root-002.html": [ - { - "path": "shadow-dom/untriaged/shadow-trees/shadow-root-002.html", - "references": [ - [ - "/shadow-dom/untriaged/shadow-trees/shadow-root-002-ref.html", - "==" - ] - ], - "url": "/shadow-dom/untriaged/shadow-trees/shadow-root-002.html" - } - ], - "shadow-dom/untriaged/shadow-trees/text-decoration-001.html": [ - { - "path": "shadow-dom/untriaged/shadow-trees/text-decoration-001.html", - "references": [ - [ - "/shadow-dom/untriaged/shadow-trees/text-decoration-001-ref.html", - "==" - ] - ], - "url": "/shadow-dom/untriaged/shadow-trees/text-decoration-001.html" - } - ], - "shadow-dom/untriaged/styles/not-apply-in-shadow-root-001.html": [ - { - "path": "shadow-dom/untriaged/styles/not-apply-in-shadow-root-001.html", - "references": [ - [ - "/shadow-dom/untriaged/styles/not-apply-in-shadow-root-001-ref.html", - "==" - ] - ], - "url": "/shadow-dom/untriaged/styles/not-apply-in-shadow-root-001.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/2_cues_overlapping_completely_move_up.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/2_cues_overlapping_completely_move_up.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/2_cues_overlapping_completely_move_up-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/2_cues_overlapping_completely_move_up.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/2_cues_overlapping_partially_move_down.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/2_cues_overlapping_partially_move_down.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/2_cues_overlapping_partially_move_down-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/2_cues_overlapping_partially_move_down.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/2_cues_overlapping_partially_move_up.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/2_cues_overlapping_partially_move_up.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/2_cues_overlapping_partially_move_up-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/2_cues_overlapping_partially_move_up.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/2_tracks.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/2_tracks.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/2_tracks-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/2_tracks.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/3_tracks.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/3_tracks.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/3_tracks-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/3_tracks.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/align_end.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/align_end.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/align_end-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/align_end.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/align_end_wrapped.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/align_end_wrapped.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/align_end_wrapped-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/align_end_wrapped.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/align_middle.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/align_middle.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/align_middle-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/align_middle.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/align_middle_position_50.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/align_middle_position_50.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/align_middle_position_50-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/align_middle_position_50.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/align_middle_position_gt_50.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/align_middle_position_gt_50.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/align_middle_position_gt_50-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/align_middle_position_gt_50.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/align_middle_position_lt_50.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/align_middle_position_lt_50.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/align_middle_position_lt_50-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/align_middle_position_lt_50.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/align_middle_position_lt_50_size_gt_maximum_size.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/align_middle_position_lt_50_size_gt_maximum_size.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/align_middle_position_lt_50_size_gt_maximum_size-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/align_middle_position_lt_50_size_gt_maximum_size.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/align_middle_wrapped.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/align_middle_wrapped.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/align_middle_wrapped-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/align_middle_wrapped.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/align_start.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/align_start.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/align_start-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/align_start.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/align_start_wrapped.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/align_start_wrapped.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/align_start_wrapped-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/align_start_wrapped.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/audio_has_no_subtitles.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/audio_has_no_subtitles.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/audio_has_no_subtitles-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/audio_has_no_subtitles.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/basic.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/basic.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/basic-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/basic.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/bidi/bidi_ruby.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/bidi/bidi_ruby.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/bidi/bidi_ruby-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/bidi/bidi_ruby.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/bidi/u002E_LF_u05D0.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/bidi/u002E_LF_u05D0.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/bidi/u002E_LF_u05D0-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/bidi/u002E_LF_u05D0.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/bidi/u002E_u2028_u05D0.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/bidi/u002E_u2028_u05D0.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/bidi/u002E_u2028_u05D0-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/bidi/u002E_u2028_u05D0.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/bidi/u002E_u2029_u05D0.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/bidi/u002E_u2029_u05D0.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/bidi/u002E_u2029_u05D0-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/bidi/u002E_u2029_u05D0.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/bidi/u0041_first.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/bidi/u0041_first.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/bidi/u0041_first-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/bidi/u0041_first.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/bidi/u05D0_first.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/bidi/u05D0_first.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/bidi/u05D0_first-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/bidi/u05D0_first.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/bidi/u0628_first.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/bidi/u0628_first.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/bidi/u0628_first-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/bidi/u0628_first.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/bidi/u06E9_no_strong_dir.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/bidi/u06E9_no_strong_dir.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/bidi/u06E9_no_strong_dir-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/bidi/u06E9_no_strong_dir.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/cue_too_long.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/cue_too_long.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/cue_too_long-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/cue_too_long.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/decode_escaped_entities.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/decode_escaped_entities.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/decode_escaped_entities-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/decode_escaped_entities.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/disable_controls_reposition.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/disable_controls_reposition.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/disable_controls_reposition-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/disable_controls_reposition.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/dom_override_cue_align_position_line_size.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/dom_override_cue_align_position_line_size.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/dom_override_cue_align_position_line_size-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/dom_override_cue_align_position_line_size.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/dom_override_cue_align_position_line_size_while_paused.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/dom_override_cue_align_position_line_size_while_paused.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/dom_override_cue_align_position_line_size_while_paused-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/dom_override_cue_align_position_line_size_while_paused.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/dom_override_cue_line.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/dom_override_cue_line.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/dom_override_cue_line-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/dom_override_cue_line.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/dom_override_cue_text.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/dom_override_cue_text.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/dom_override_cue_text-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/dom_override_cue_text.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/dom_override_cue_text_while_paused.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/dom_override_cue_text_while_paused.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/dom_override_cue_text_while_paused-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/dom_override_cue_text_while_paused.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/dom_override_remove_cue_while_paused.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/dom_override_remove_cue_while_paused.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/dom_override_remove_cue_while_paused-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/dom_override_remove_cue_while_paused.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/enable_controls_reposition.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/enable_controls_reposition.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/enable_controls_reposition-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/enable_controls_reposition.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/evil/9_cues_overlapping_completely.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/evil/9_cues_overlapping_completely.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/evil/9_cues_overlapping_completely-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/evil/9_cues_overlapping_completely.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/evil/9_cues_overlapping_completely_all_cues_have_same_timestamp.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/evil/9_cues_overlapping_completely_all_cues_have_same_timestamp.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/evil/9_cues_overlapping_completely_all_cues_have_same_timestamp-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/evil/9_cues_overlapping_completely_all_cues_have_same_timestamp.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/evil/media_404_omit_subtitles.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/evil/media_404_omit_subtitles.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/evil/media_404_omit_subtitles-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/evil/media_404_omit_subtitles.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/evil/media_height_19.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/evil/media_height_19.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/evil/media_height_19-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/evil/media_height_19.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/evil/single_quote.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/evil/single_quote.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/evil/single_quote-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/evil/single_quote.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/evil/size_90.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/evil/size_90.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/evil/size_90-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/evil/size_90.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/evil/size_99.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/evil/size_99.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/evil/size_99-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/evil/size_99.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/line_-2_wrapped_cue_grow_upwards.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/line_-2_wrapped_cue_grow_upwards.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/line_-2_wrapped_cue_grow_upwards-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/line_-2_wrapped_cue_grow_upwards.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/line_0_is_top.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/line_0_is_top.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/line_0_is_top-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/line_0_is_top.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/line_1_wrapped_cue_grow_downwards.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/line_1_wrapped_cue_grow_downwards.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/line_1_wrapped_cue_grow_downwards-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/line_1_wrapped_cue_grow_downwards.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/line_50_percent.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/line_50_percent.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/line_50_percent-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/line_50_percent.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/line_integer_and_percent_mixed_overlap.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/line_integer_and_percent_mixed_overlap.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/line_integer_and_percent_mixed_overlap-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/line_integer_and_percent_mixed_overlap.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/line_integer_and_percent_mixed_overlap_move_up.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/line_integer_and_percent_mixed_overlap_move_up.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/line_integer_and_percent_mixed_overlap_move_up-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/line_integer_and_percent_mixed_overlap_move_up.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/line_percent_and_integer_mixed_overlap.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/line_percent_and_integer_mixed_overlap.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/line_percent_and_integer_mixed_overlap-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/line_percent_and_integer_mixed_overlap.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/line_percent_and_integer_mixed_overlap_move_up.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/line_percent_and_integer_mixed_overlap_move_up.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/line_percent_and_integer_mixed_overlap_move_up-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/line_percent_and_integer_mixed_overlap_move_up.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/media_height400_with_controls.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/media_height400_with_controls.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/media_height400_with_controls-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/media_height400_with_controls.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/media_with_controls.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/media_with_controls.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/media_with_controls-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/media_with_controls.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/navigate_cue_position.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/navigate_cue_position.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/navigate_cue_position-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/navigate_cue_position.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/one_line_cue_plus_wrapped_cue.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/one_line_cue_plus_wrapped_cue.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/one_line_cue_plus_wrapped_cue-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/one_line_cue_plus_wrapped_cue.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/repaint.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/repaint.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/repaint-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/repaint.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue/background_properties.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue/background_properties.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/background_properties-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/background_properties.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue/background_shorthand.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue/background_shorthand.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/background_shorthand-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/background_shorthand.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue/background_shorthand_css_relative_url.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue/background_shorthand_css_relative_url.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/background_shorthand_css_relative_url-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/background_shorthand_css_relative_url.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue/color_hex.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue/color_hex.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/color_hex-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/color_hex.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue/color_hsla.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue/color_hsla.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/color_hsla-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/color_hsla.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue/color_rgba.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue/color_rgba.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/color_rgba-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/color_rgba.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue/cue_selector_single_colon.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue/cue_selector_single_colon.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/cue_selector_single_colon-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/cue_selector_single_colon.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue/font_properties.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue/font_properties.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/font_properties-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/font_properties.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue/font_shorthand.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue/font_shorthand.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/font_shorthand-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/font_shorthand.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue/inherit_values_from_media_element.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue/inherit_values_from_media_element.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/inherit_values_from_media_element-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/inherit_values_from_media_element.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue/outline_properties.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue/outline_properties.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/outline_properties-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/outline_properties.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue/outline_shorthand.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue/outline_shorthand.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/outline_shorthand-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/outline_shorthand.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue/text-decoration_line-through.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue/text-decoration_line-through.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/text-decoration_line-through-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/text-decoration_line-through.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue/text-decoration_overline.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue/text-decoration_overline.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/text-decoration_overline-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/text-decoration_overline.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue/text-decoration_overline_underline_line-through.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue/text-decoration_overline_underline_line-through.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/text-decoration_overline_underline_line-through-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/text-decoration_overline_underline_line-through.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue/text-decoration_underline.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue/text-decoration_underline.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/text-decoration_underline-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/text-decoration_underline.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue/text-shadow.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue/text-shadow.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/text-shadow-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/text-shadow.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue/white-space_normal_wrapped.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue/white-space_normal_wrapped.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/white-space_normal_wrapped-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/white-space_normal_wrapped.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue/white-space_nowrap_wrapped.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue/white-space_nowrap_wrapped.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/white-space_nowrap_wrapped-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/white-space_nowrap_wrapped.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue/white-space_pre-line_wrapped.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue/white-space_pre-line_wrapped.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/white-space_pre-line_wrapped-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/white-space_pre-line_wrapped.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue/white-space_pre-wrap_wrapped.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue/white-space_pre-wrap_wrapped.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/white-space_pre-wrap_wrapped-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/white-space_pre-wrap_wrapped.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue/white-space_pre.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue/white-space_pre.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/white-space_pre-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/white-space_pre.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue/white-space_pre_wrapped.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue/white-space_pre_wrapped.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/white-space_pre_wrapped-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue/white-space_pre_wrapped.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/background_box.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/background_box.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/background_box-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/background_box.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/background_properties.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/background_properties.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/background_properties-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/background_properties.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/background_shorthand.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/background_shorthand.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/background_shorthand-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/background_shorthand.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/background_shorthand_css_relative_url.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/background_shorthand_css_relative_url.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/background_shorthand_css_relative_url-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/background_shorthand_css_relative_url.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_animation_with_timestamp.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_animation_with_timestamp.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_animation_with_timestamp-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_animation_with_timestamp.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_background_properties.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_background_properties.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_background_properties-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_background_properties.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_background_shorthand.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_background_shorthand.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_background_shorthand-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_background_shorthand.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_color.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_color.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_color-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_color.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_font_properties.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_font_properties.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_font_properties-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_font_properties.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_font_shorthand.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_font_shorthand.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_font_shorthand-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_font_shorthand.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_namespace.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_namespace.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_namespace-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_namespace.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_outline_properties.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_outline_properties.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_outline_properties-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_outline_properties.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_outline_shorthand.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_outline_shorthand.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_outline_shorthand-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_outline_shorthand.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_text-decoration_line-through.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_text-decoration_line-through.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_text-decoration_line-through-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_text-decoration_line-through.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_text-shadow.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_text-shadow.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_text-shadow-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_text-shadow.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_timestamp_future.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_timestamp_future.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_timestamp_future-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_timestamp_future.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_timestamp_past.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_timestamp_past.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_timestamp_past-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_timestamp_past.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_transition_with_timestamp.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_transition_with_timestamp.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_transition_with_timestamp-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_transition_with_timestamp.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_white-space_normal_wrapped.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_white-space_normal_wrapped.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_white-space_normal_wrapped-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_white-space_normal_wrapped.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_white-space_nowrap.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_white-space_nowrap.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_white-space_nowrap-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_white-space_nowrap.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_white-space_pre-line_wrapped.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_white-space_pre-line_wrapped.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_white-space_pre-line_wrapped-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_white-space_pre-line_wrapped.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_white-space_pre-wrap_wrapped.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_white-space_pre-wrap_wrapped.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_white-space_pre-wrap_wrapped-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_white-space_pre-wrap_wrapped.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_white-space_pre_wrapped.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_white-space_pre_wrapped.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_white-space_pre_wrapped-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_white-space_pre_wrapped.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_with_class.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_with_class.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_with_class-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_with_class.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_with_class_object_specific_selector.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_with_class_object_specific_selector.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_with_class_object_specific_selector-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/bold_object/bold_with_class_object_specific_selector.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_animation_with_timestamp.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_animation_with_timestamp.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_animation_with_timestamp-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_animation_with_timestamp.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_background_properties.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_background_properties.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_background_properties-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_background_properties.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_background_shorthand.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_background_shorthand.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_background_shorthand-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_background_shorthand.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_color.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_color.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_color-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_color.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_font_properties.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_font_properties.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_font_properties-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_font_properties.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_font_shorthand.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_font_shorthand.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_font_shorthand-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_font_shorthand.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_namespace.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_namespace.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_namespace-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_namespace.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_outline_properties.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_outline_properties.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_outline_properties-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_outline_properties.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_outline_shorthand.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_outline_shorthand.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_outline_shorthand-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_outline_shorthand.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_text-decoration_line-through.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_text-decoration_line-through.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_text-decoration_line-through-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_text-decoration_line-through.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_text-shadow.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_text-shadow.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_text-shadow-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_text-shadow.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_timestamp_future.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_timestamp_future.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_timestamp_future-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_timestamp_future.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_timestamp_past.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_timestamp_past.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_timestamp_past-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_timestamp_past.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_transition_with_timestamp.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_transition_with_timestamp.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_transition_with_timestamp-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_transition_with_timestamp.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_white-space_normal_wrapped.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_white-space_normal_wrapped.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_white-space_normal_wrapped-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_white-space_normal_wrapped.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_white-space_nowrap.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_white-space_nowrap.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_white-space_nowrap-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_white-space_nowrap.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_white-space_pre-line_wrapped.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_white-space_pre-line_wrapped.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_white-space_pre-line_wrapped-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_white-space_pre-line_wrapped.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_white-space_pre-wrap_wrapped.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_white-space_pre-wrap_wrapped.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_white-space_pre-wrap_wrapped-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_white-space_pre-wrap_wrapped.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_white-space_pre_wrapped.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_white-space_pre_wrapped.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_white-space_pre_wrapped-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_white-space_pre_wrapped.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_with_class.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_with_class.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_with_class-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_with_class.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_with_class_object_specific_selector.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_with_class_object_specific_selector.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_with_class_object_specific_selector-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_with_class_object_specific_selector.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/color_hex.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/color_hex.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/color_hex-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/color_hex.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/color_hsla.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/color_hsla.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/color_hsla-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/color_hsla.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/color_rgba.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/color_rgba.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/color_rgba-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/color_rgba.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/cue_func_selector_single_colon.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/cue_func_selector_single_colon.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/cue_func_selector_single_colon-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/cue_func_selector_single_colon.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/font_properties.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/font_properties.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/font_properties-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/font_properties.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/font_shorthand.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/font_shorthand.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/font_shorthand-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/font_shorthand.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/id_color.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/id_color.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/id_color-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/id_color.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/inherit_values_from_media_element.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/inherit_values_from_media_element.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/inherit_values_from_media_element-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/inherit_values_from_media_element.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_animation_with_timestamp.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_animation_with_timestamp.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_animation_with_timestamp-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_animation_with_timestamp.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_background_properties.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_background_properties.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_background_properties-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_background_properties.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_background_shorthand.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_background_shorthand.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_background_shorthand-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_background_shorthand.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_color.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_color.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_color-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_color.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_font_properties.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_font_properties.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_font_properties-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_font_properties.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_font_shorthand.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_font_shorthand.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_font_shorthand-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_font_shorthand.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_namespace.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_namespace.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_namespace-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_namespace.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_outline_properties.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_outline_properties.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_outline_properties-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_outline_properties.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_outline_shorthand.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_outline_shorthand.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_outline_shorthand-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_outline_shorthand.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_text-decoration_line-through.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_text-decoration_line-through.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_text-decoration_line-through-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_text-decoration_line-through.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_text-shadow.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_text-shadow.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_text-shadow-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_text-shadow.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_timestamp_future.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_timestamp_future.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_timestamp_future-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_timestamp_future.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_timestamp_past.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_timestamp_past.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_timestamp_past-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_timestamp_past.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_transition_with_timestamp.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_transition_with_timestamp.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_transition_with_timestamp-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_transition_with_timestamp.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_white-space_normal_wrapped.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_white-space_normal_wrapped.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_white-space_normal_wrapped-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_white-space_normal_wrapped.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_white-space_nowrap.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_white-space_nowrap.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_white-space_nowrap-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_white-space_nowrap.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_white-space_pre-line_wrapped.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_white-space_pre-line_wrapped.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_white-space_pre-line_wrapped-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_white-space_pre-line_wrapped.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_white-space_pre-wrap_wrapped.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_white-space_pre-wrap_wrapped.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_white-space_pre-wrap_wrapped-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_white-space_pre-wrap_wrapped.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_white-space_pre_wrapped.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_white-space_pre_wrapped.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_white-space_pre_wrapped-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_white-space_pre_wrapped.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_with_class.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_with_class.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_with_class-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_with_class.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_with_class_object_specific_selector.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_with_class_object_specific_selector.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_with_class_object_specific_selector-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/italic_object/italic_with_class_object_specific_selector.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/not_allowed_properties.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/not_allowed_properties.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/not_allowed_properties-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/not_allowed_properties.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/not_root_selector.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/not_root_selector.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/not_root_selector-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/not_root_selector.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/outline_properties.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/outline_properties.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/outline_properties-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/outline_properties.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/outline_shorthand.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/outline_shorthand.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/outline_shorthand-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/outline_shorthand.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/root_namespace.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/root_namespace.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/root_namespace-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/root_namespace.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/root_selector.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/root_selector.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/root_selector-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/root_selector.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/text-decoration_line-through.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/text-decoration_line-through.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/text-decoration_line-through-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/text-decoration_line-through.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/text-decoration_overline.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/text-decoration_overline.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/text-decoration_overline-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/text-decoration_overline.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/text-decoration_overline_underline_line-through.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/text-decoration_overline_underline_line-through.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/text-decoration_overline_underline_line-through-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/text-decoration_overline_underline_line-through.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/text-decoration_underline.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/text-decoration_underline.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/text-decoration_underline-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/text-decoration_underline.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/text-shadow.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/text-shadow.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/text-shadow-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/text-shadow.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/type_selector_root.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/type_selector_root.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/type_selector_root-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/type_selector_root.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_animation_with_timestamp.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_animation_with_timestamp.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_animation_with_timestamp-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_animation_with_timestamp.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_background_properties.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_background_properties.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_background_properties-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_background_properties.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_background_shorthand.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_background_shorthand.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_background_shorthand-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_background_shorthand.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_color.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_color.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_color-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_color.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_font_properties.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_font_properties.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_font_properties-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_font_properties.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_font_shorthand.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_font_shorthand.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_font_shorthand-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_font_shorthand.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_namespace.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_namespace.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_namespace-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_namespace.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_outline_properties.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_outline_properties.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_outline_properties-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_outline_properties.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_outline_shorthand.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_outline_shorthand.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_outline_shorthand-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_outline_shorthand.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_text-decoration_line-through.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_text-decoration_line-through.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_text-decoration_line-through-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_text-decoration_line-through.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_text-shadow.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_text-shadow.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_text-shadow-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_text-shadow.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_timestamp_future.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_timestamp_future.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_timestamp_future-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_timestamp_future.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_timestamp_past.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_timestamp_past.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_timestamp_past-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_timestamp_past.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_transition_with_timestamp.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_transition_with_timestamp.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_transition_with_timestamp-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_transition_with_timestamp.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_white-space_normal_wrapped.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_white-space_normal_wrapped.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_white-space_normal_wrapped-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_white-space_normal_wrapped.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_white-space_nowrap.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_white-space_nowrap.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_white-space_nowrap-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_white-space_nowrap.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_white-space_pre-line_wrapped.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_white-space_pre-line_wrapped.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_white-space_pre-line_wrapped-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_white-space_pre-line_wrapped.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_white-space_pre-wrap_wrapped.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_white-space_pre-wrap_wrapped.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_white-space_pre-wrap_wrapped-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_white-space_pre-wrap_wrapped.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_white-space_pre_wrapped.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_white-space_pre_wrapped.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_white-space_pre_wrapped-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_white-space_pre_wrapped.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_with_class.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_with_class.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_with_class-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_with_class.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_with_class_object_specific_selector.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_with_class_object_specific_selector.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_with_class_object_specific_selector-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/underline_object/underline_with_class_object_specific_selector.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_animation_with_timestamp.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_animation_with_timestamp.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_animation_with_timestamp-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_animation_with_timestamp.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_background_properties.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_background_properties.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_background_properties-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_background_properties.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_background_shorthand.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_background_shorthand.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_background_shorthand-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_background_shorthand.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_color.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_color.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_color-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_color.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_font_properties.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_font_properties.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_font_properties-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_font_properties.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_font_shorthand.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_font_shorthand.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_font_shorthand-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_font_shorthand.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_namespace.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_namespace.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_namespace-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_namespace.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_outline_properties.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_outline_properties.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_outline_properties-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_outline_properties.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_outline_shorthand.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_outline_shorthand.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_outline_shorthand-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_outline_shorthand.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_text-decoration_line-through.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_text-decoration_line-through.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_text-decoration_line-through-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_text-decoration_line-through.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_text-shadow.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_text-shadow.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_text-shadow-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_text-shadow.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_timestamp_future.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_timestamp_future.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_timestamp_future-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_timestamp_future.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_timestamp_past.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_timestamp_past.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_timestamp_past-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_timestamp_past.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_transition_with_timestamp.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_transition_with_timestamp.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_transition_with_timestamp-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_transition_with_timestamp.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_voice_attribute.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_voice_attribute.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_voice_attribute-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_voice_attribute.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_white-space_normal_wrapped.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_white-space_normal_wrapped.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_white-space_normal_wrapped-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_white-space_normal_wrapped.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_white-space_nowrap.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_white-space_nowrap.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_white-space_nowrap-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_white-space_nowrap.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_white-space_pre-line_wrapped.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_white-space_pre-line_wrapped.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_white-space_pre-line_wrapped-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_white-space_pre-line_wrapped.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_white-space_pre-wrap_wrapped.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_white-space_pre-wrap_wrapped.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_white-space_pre-wrap_wrapped-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_white-space_pre-wrap_wrapped.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_white-space_pre_wrapped.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_white-space_pre_wrapped.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_white-space_pre_wrapped-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_white-space_pre_wrapped.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_with_class.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_with_class.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_with_class-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_with_class.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_with_class_object_specific_selector.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_with_class_object_specific_selector.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_with_class_object_specific_selector-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_with_class_object_specific_selector.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/white-space_normal_wrapped.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/white-space_normal_wrapped.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/white-space_normal_wrapped-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/white-space_normal_wrapped.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/white-space_nowrap_wrapped.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/white-space_nowrap_wrapped.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/white-space_nowrap_wrapped-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/white-space_nowrap_wrapped.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/white-space_pre-line_wrapped.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/white-space_pre-line_wrapped.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/white-space_pre-line_wrapped-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/white-space_pre-line_wrapped.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/white-space_pre-wrap_wrapped.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/white-space_pre-wrap_wrapped.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/white-space_pre-wrap_wrapped-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/white-space_pre-wrap_wrapped.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/white-space_pre.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/white-space_pre.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/white-space_pre-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/white-space_pre.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/white-space_pre_wrapped.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/white-space_pre_wrapped.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/white-space_pre_wrapped-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/white-space_pre_wrapped.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/default_styles/bold_object_default_font-style.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/default_styles/bold_object_default_font-style.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/default_styles/bold_object_default_font-style-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/default_styles/bold_object_default_font-style.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/default_styles/inherit_as_default_value_inherits_values_from_media_element.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/default_styles/inherit_as_default_value_inherits_values_from_media_element.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/default_styles/inherit_as_default_value_inherits_values_from_media_element-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/default_styles/inherit_as_default_value_inherits_values_from_media_element.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/default_styles/italic_object_default_font-style.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/default_styles/italic_object_default_font-style.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/default_styles/italic_object_default_font-style-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/default_styles/italic_object_default_font-style.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/selectors/default_styles/underline_object_default_font-style.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/selectors/default_styles/underline_object_default_font-style.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/selectors/default_styles/underline_object_default_font-style-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/selectors/default_styles/underline_object_default_font-style.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/size_50.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/size_50.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/size_50-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/size_50.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/too_many_cues.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/too_many_cues.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/too_many_cues-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/too_many_cues.html" - } - ], - "webvtt/rendering/cues-with-video/processing-model/too_many_cues_wrapped.html": [ - { - "path": "webvtt/rendering/cues-with-video/processing-model/too_many_cues_wrapped.html", - "references": [ - [ - "/webvtt/rendering/cues-with-video/processing-model/too_many_cues_wrapped-ref.html", - "==" - ] - ], - "url": "/webvtt/rendering/cues-with-video/processing-model/too_many_cues_wrapped.html" - } - ] - }, - "testharness": { - "html/semantics/tabular-data/the-table-element/insertRow-method-03.html": [ - { - "path": "html/semantics/tabular-data/the-table-element/insertRow-method-03.html", - "url": "/html/semantics/tabular-data/the-table-element/insertRow-method-03.html" - } - ], - "html/semantics/tabular-data/the-table-element/tFoot.html": [ - { - "path": "html/semantics/tabular-data/the-table-element/tFoot.html", - "url": "/html/semantics/tabular-data/the-table-element/tFoot.html" - } - ], - "html/semantics/tabular-data/the-table-element/tHead.html": [ - { - "path": "html/semantics/tabular-data/the-table-element/tHead.html", - "url": "/html/semantics/tabular-data/the-table-element/tHead.html" - } - ] - } - }, - "reftest_nodes": { - "html/semantics/document-metadata/the-link-element/stylesheet-with-base.html": [ - { - "path": "html/semantics/document-metadata/the-link-element/stylesheet-with-base.html", - "references": [ - [ - "/html/semantics/document-metadata/the-link-element/stylesheet-with-base-ref.html", - "==" - ] - ], - "url": "/html/semantics/document-metadata/the-link-element/stylesheet-with-base.html" - } - ], - "html/semantics/embedded-content/the-iframe-element/iframe-with-base.html": [ - { - "path": "html/semantics/embedded-content/the-iframe-element/iframe-with-base.html", - "references": [ - [ - "/html/semantics/embedded-content/the-iframe-element/iframe-with-base-ref.html", - "==" - ] - ], - "url": "/html/semantics/embedded-content/the-iframe-element/iframe-with-base.html" - } - ], - "html/semantics/embedded-content/the-img-element/document-base-url.html": [ - { - "path": "html/semantics/embedded-content/the-img-element/document-base-url.html", - "references": [ - [ - "/html/semantics/embedded-content/the-img-element/document-base-url-ref.html", - "==" - ] - ], - "url": "/html/semantics/embedded-content/the-img-element/document-base-url.html" - } - ] - } + "deleted_reftests": {}, + "items": {}, + "reftest_nodes": {} }, "reftest_nodes": { "2dcontext/building-paths/canvas_complexshapes_arcto_001.htm": [ @@ -41075,6 +35736,66 @@ "url": "/compat/webkit-text-fill-color-property-001d.html" } ], + "compat/webkit-text-fill-color-property-002.html": [ + { + "path": "compat/webkit-text-fill-color-property-002.html", + "references": [ + [ + "/compat/webkit-text-fill-color-property-002-ref.html", + "==" + ] + ], + "url": "/compat/webkit-text-fill-color-property-002.html" + } + ], + "compat/webkit-text-fill-color-property-003.html": [ + { + "path": "compat/webkit-text-fill-color-property-003.html", + "references": [ + [ + "/compat/webkit-text-fill-color-property-003-ref.html", + "==" + ] + ], + "url": "/compat/webkit-text-fill-color-property-003.html" + } + ], + "compat/webkit-text-fill-color-property-004.html": [ + { + "path": "compat/webkit-text-fill-color-property-004.html", + "references": [ + [ + "/compat/webkit-text-fill-color-property-004-ref.html", + "==" + ] + ], + "url": "/compat/webkit-text-fill-color-property-004.html" + } + ], + "compat/webkit-text-fill-color-property-005.html": [ + { + "path": "compat/webkit-text-fill-color-property-005.html", + "references": [ + [ + "/compat/webkit-text-fill-color-property-005-ref.html", + "==" + ] + ], + "url": "/compat/webkit-text-fill-color-property-005.html" + } + ], + "compat/webkit-text-fill-color-property-006.html": [ + { + "path": "compat/webkit-text-fill-color-property-006.html", + "references": [ + [ + "/compat/webkit-text-fill-color-property-006-ref.html", + "==" + ] + ], + "url": "/compat/webkit-text-fill-color-property-006.html" + } + ], "custom-elements/registering-custom-elements/unresolved-element-pseudoclass/unresolved-element-pseudoclass-css-test-custom-tag.html": [ { "path": "custom-elements/registering-custom-elements/unresolved-element-pseudoclass/unresolved-element-pseudoclass-css-test-custom-tag.html", @@ -43295,6 +38016,30 @@ "url": "/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/object_border_pixel.xhtml" } ], + "html/rendering/replaced-elements/embedded-content-rendering-rules/canvas-fallback.html": [ + { + "path": "html/rendering/replaced-elements/embedded-content-rendering-rules/canvas-fallback.html", + "references": [ + [ + "/html/rendering/replaced-elements/embedded-content-rendering-rules/canvas-fallback-ref.html", + "==" + ] + ], + "url": "/html/rendering/replaced-elements/embedded-content-rendering-rules/canvas-fallback.html" + } + ], + "html/rendering/replaced-elements/embedded-content-rendering-rules/canvas_scale.html": [ + { + "path": "html/rendering/replaced-elements/embedded-content-rendering-rules/canvas_scale.html", + "references": [ + [ + "/html/rendering/replaced-elements/embedded-content-rendering-rules/canvas_scale_ref.html", + "==" + ] + ], + "url": "/html/rendering/replaced-elements/embedded-content-rendering-rules/canvas_scale.html" + } + ], "html/rendering/replaced-elements/images/space.html": [ { "path": "html/rendering/replaced-elements/images/space.html", @@ -43307,6 +38052,18 @@ "url": "/html/rendering/replaced-elements/images/space.html" } ], + "html/semantics/document-metadata/the-link-element/stylesheet-with-base.html": [ + { + "path": "html/semantics/document-metadata/the-link-element/stylesheet-with-base.html", + "references": [ + [ + "/html/semantics/document-metadata/the-link-element/stylesheet-with-base-ref.html", + "==" + ] + ], + "url": "/html/semantics/document-metadata/the-link-element/stylesheet-with-base.html" + } + ], "html/semantics/document-metadata/the-style-element/html_style_in_comment.xhtml": [ { "path": "html/semantics/document-metadata/the-style-element/html_style_in_comment.xhtml", @@ -43391,6 +38148,30 @@ "url": "/html/semantics/embedded-content/the-embed-element/embed-represent-nothing-04.html" } ], + "html/semantics/embedded-content/the-iframe-element/iframe-with-base.html": [ + { + "path": "html/semantics/embedded-content/the-iframe-element/iframe-with-base.html", + "references": [ + [ + "/html/semantics/embedded-content/the-iframe-element/iframe-with-base-ref.html", + "==" + ] + ], + "url": "/html/semantics/embedded-content/the-iframe-element/iframe-with-base.html" + } + ], + "html/semantics/embedded-content/the-img-element/document-base-url.html": [ + { + "path": "html/semantics/embedded-content/the-img-element/document-base-url.html", + "references": [ + [ + "/html/semantics/embedded-content/the-img-element/document-base-url-ref.html", + "==" + ] + ], + "url": "/html/semantics/embedded-content/the-img-element/document-base-url.html" + } + ], "html/semantics/embedded-content/the-video-element/video_content_image.htm": [ { "path": "html/semantics/embedded-content/the-video-element/video_content_image.htm", @@ -46776,7 +41557,7 @@ } ] }, - "rev": "d011702f368b88b3bae86e7a8fd2ddd22e18b33c", + "rev": "b94b41945d3c7c9b4f3346cf8654cc5ca7ae567c", "url_base": "/", "version": 3 } diff --git a/tests/wpt/metadata/XMLHttpRequest/send-authentication-basic-cors-not-enabled.htm.ini b/tests/wpt/metadata/XMLHttpRequest/send-authentication-basic-cors-not-enabled.htm.ini deleted file mode 100644 index b346d7181e3..00000000000 --- a/tests/wpt/metadata/XMLHttpRequest/send-authentication-basic-cors-not-enabled.htm.ini +++ /dev/null @@ -1,5 +0,0 @@ -[send-authentication-basic-cors-not-enabled.htm] - type: testharness - [XMLHttpRequest: send() - "Basic" authenticated CORS requests with user name and password passed to open() (asserts failure)] - expected: FAIL - diff --git a/tests/wpt/metadata/cssom-view/elementScroll.html.ini b/tests/wpt/metadata/cssom-view/elementScroll.html.ini new file mode 100644 index 00000000000..706def9d330 --- /dev/null +++ b/tests/wpt/metadata/cssom-view/elementScroll.html.ini @@ -0,0 +1,5 @@ +[elementScroll.html] + type: testharness + [Element scroll maximum test] + expected: FAIL + diff --git a/tests/wpt/metadata/dom/events/ProgressEvent.html.ini b/tests/wpt/metadata/dom/events/ProgressEvent.html.ini new file mode 100644 index 00000000000..333025897f6 --- /dev/null +++ b/tests/wpt/metadata/dom/events/ProgressEvent.html.ini @@ -0,0 +1,6 @@ +[ProgressEvent.html] + type: testharness + bug: https://github.com/servo/servo/issues/10740 + [document.createEvent() should not work with ProgressEvent.] + expected: FAIL + diff --git a/tests/wpt/metadata/dom/interfaces.html.ini b/tests/wpt/metadata/dom/interfaces.html.ini index 4cdad8a3627..7fa6c28a6c7 100644 --- a/tests/wpt/metadata/dom/interfaces.html.ini +++ b/tests/wpt/metadata/dom/interfaces.html.ini @@ -102,9 +102,6 @@ [DocumentFragment interface: calling queryAll(DOMString) on document.createDocumentFragment() with too few arguments must throw TypeError] expected: FAIL - [Element interface: operation hasAttributes()] - expected: FAIL - [Element interface: operation query(DOMString)] expected: FAIL @@ -165,9 +162,6 @@ [DOMTokenList interface: calling supports(DOMString) on document.body.classList with too few arguments must throw TypeError] expected: FAIL - [Node interface: attribute rootNode] - expected: FAIL - [Document interface: new Document() must inherit property "origin" with the proper type (3)] expected: FAIL @@ -183,33 +177,90 @@ [Document interface: calling queryAll(DOMString) on new Document() with too few arguments must throw TypeError] expected: FAIL - [Node interface: new Document() must inherit property "rootNode" with the proper type (16)] + [Element interface: element must inherit property "query" with the proper type (36)] + expected: FAIL + + [Element interface: element must inherit property "queryAll" with the proper type (37)] expected: FAIL - [Node interface: xmlDoc must inherit property "rootNode" with the proper type (16)] + [Node interface: attribute isConnected] expected: FAIL - [Node interface: document.createDocumentFragment() must inherit property "rootNode" with the proper type (16)] + [Node interface: new Document() must inherit property "isConnected" with the proper type (15)] expected: FAIL - [Node interface: document.doctype must inherit property "rootNode" with the proper type (16)] + [Node interface: xmlDoc must inherit property "isConnected" with the proper type (15)] expected: FAIL - [Node interface: element must inherit property "rootNode" with the proper type (16)] + [Node interface: document.doctype must inherit property "isConnected" with the proper type (15)] expected: FAIL - [Node interface: document.createTextNode("abc") must inherit property "rootNode" with the proper type (16)] + [Node interface: document.createDocumentFragment() must inherit property "isConnected" with the proper type (15)] expected: FAIL - [Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "rootNode" with the proper type (16)] + [ShadowRoot interface: existence and properties of interface object] expected: FAIL - [Node interface: document.createComment("abc") must inherit property "rootNode" with the proper type (16)] + [ShadowRoot interface object length] expected: FAIL - [Element interface: element must inherit property "query" with the proper type (36)] + [ShadowRoot interface object name] expected: FAIL - [Element interface: element must inherit property "queryAll" with the proper type (37)] + [ShadowRoot interface: existence and properties of interface prototype object] + expected: FAIL + + [ShadowRoot interface: existence and properties of interface prototype object's "constructor" property] + expected: FAIL + + [ShadowRoot interface: attribute mode] + expected: FAIL + + [ShadowRoot interface: attribute host] + expected: FAIL + + [Element interface: attribute slot] + expected: FAIL + + [Element interface: operation attachShadow(ShadowRootInit)] + expected: FAIL + + [Element interface: attribute shadowRoot] + expected: FAIL + + [Element interface: attribute assignedSlot] + expected: FAIL + + [Element interface: element must inherit property "slot" with the proper type (7)] + expected: FAIL + + [Element interface: element must inherit property "attachShadow" with the proper type (24)] + expected: FAIL + + [Element interface: calling attachShadow(ShadowRootInit) on element with too few arguments must throw TypeError] + expected: FAIL + + [Element interface: element must inherit property "shadowRoot" with the proper type (25)] + expected: FAIL + + [Element interface: element must inherit property "assignedSlot" with the proper type (48)] + expected: FAIL + + [Node interface: element must inherit property "isConnected" with the proper type (15)] + expected: FAIL + + [Text interface: attribute assignedSlot] + expected: FAIL + + [Text interface: document.createTextNode("abc") must inherit property "assignedSlot" with the proper type (2)] + expected: FAIL + + [Node interface: document.createTextNode("abc") must inherit property "isConnected" with the proper type (15)] + expected: FAIL + + [Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "isConnected" with the proper type (15)] + expected: FAIL + + [Node interface: document.createComment("abc") must inherit property "isConnected" with the proper type (15)] expected: FAIL diff --git a/tests/wpt/metadata/dom/nodes/DOMImplementation-createDocument.html.ini b/tests/wpt/metadata/dom/nodes/DOMImplementation-createDocument.html.ini new file mode 100644 index 00000000000..6ee786f53be --- /dev/null +++ b/tests/wpt/metadata/dom/nodes/DOMImplementation-createDocument.html.ini @@ -0,0 +1,9 @@ +[DOMImplementation-createDocument.html] + type: testharness + bug: https://github.com/servo/servo/issues/10743 + [createDocument test 179: metadata for "http://www.w3.org/1999/xhtml","",null] + expected: FAIL + + [createDocument test 180: metadata for "http://www.w3.org/2000/svg","",null] + expected: FAIL + diff --git a/tests/wpt/metadata/dom/nodes/Document-createEvent.html.ini b/tests/wpt/metadata/dom/nodes/Document-createEvent.html.ini index 04346bd9ee7..cf50ce94f65 100644 --- a/tests/wpt/metadata/dom/nodes/Document-createEvent.html.ini +++ b/tests/wpt/metadata/dom/nodes/Document-createEvent.html.ini @@ -1,5 +1,363 @@ [Document-createEvent.html] type: testharness - [Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "KeyEvent"] + bug: https://github.com/servo/servo/issues/10734 + [AnimationEvent should be an alias for AnimationEvent.] + expected: FAIL + + [createEvent('AnimationEvent') should be initialized correctly.] + expected: FAIL + + [animationevent should be an alias for AnimationEvent.] + expected: FAIL + + [createEvent('animationevent') should be initialized correctly.] + expected: FAIL + + [ANIMATIONEVENT should be an alias for AnimationEvent.] + expected: FAIL + + [createEvent('ANIMATIONEVENT') should be initialized correctly.] + expected: FAIL + + [BeforeUnloadEvent should be an alias for BeforeUnloadEvent.] + expected: FAIL + + [createEvent('BeforeUnloadEvent') should be initialized correctly.] + expected: FAIL + + [beforeunloadevent should be an alias for BeforeUnloadEvent.] + expected: FAIL + + [createEvent('beforeunloadevent') should be initialized correctly.] + expected: FAIL + + [BEFOREUNLOADEVENT should be an alias for BeforeUnloadEvent.] + expected: FAIL + + [createEvent('BEFOREUNLOADEVENT') should be initialized correctly.] + expected: FAIL + + [CloseEvent should be an alias for CloseEvent.] + bug: https://github.com/servo/servo/issues/10737 + expected: FAIL + + [createEvent('CloseEvent') should be initialized correctly.] + bug: https://github.com/servo/servo/issues/10737 + expected: FAIL + + [closeevent should be an alias for CloseEvent.] + bug: https://github.com/servo/servo/issues/10737 + expected: FAIL + + [createEvent('closeevent') should be initialized correctly.] + bug: https://github.com/servo/servo/issues/10737 + expected: FAIL + + [CLOSEEVENT should be an alias for CloseEvent.] + bug: https://github.com/servo/servo/issues/10737 + expected: FAIL + + [createEvent('CLOSEEVENT') should be initialized correctly.] + bug: https://github.com/servo/servo/issues/10737 + expected: FAIL + + [CompositionEvent should be an alias for CompositionEvent.] + expected: FAIL + + [createEvent('CompositionEvent') should be initialized correctly.] + expected: FAIL + + [compositionevent should be an alias for CompositionEvent.] + expected: FAIL + + [createEvent('compositionevent') should be initialized correctly.] + expected: FAIL + + [COMPOSITIONEVENT should be an alias for CompositionEvent.] + expected: FAIL + + [createEvent('COMPOSITIONEVENT') should be initialized correctly.] + expected: FAIL + + [DeviceMotionEvent should be an alias for DeviceMotionEvent.] + expected: FAIL + + [createEvent('DeviceMotionEvent') should be initialized correctly.] + expected: FAIL + + [devicemotionevent should be an alias for DeviceMotionEvent.] + expected: FAIL + + [createEvent('devicemotionevent') should be initialized correctly.] + expected: FAIL + + [DEVICEMOTIONEVENT should be an alias for DeviceMotionEvent.] + expected: FAIL + + [createEvent('DEVICEMOTIONEVENT') should be initialized correctly.] + expected: FAIL + + [DeviceOrientationEvent should be an alias for DeviceOrientationEvent.] + expected: FAIL + + [createEvent('DeviceOrientationEvent') should be initialized correctly.] + expected: FAIL + + [deviceorientationevent should be an alias for DeviceOrientationEvent.] + expected: FAIL + + [createEvent('deviceorientationevent') should be initialized correctly.] + expected: FAIL + + [DEVICEORIENTATIONEVENT should be an alias for DeviceOrientationEvent.] + expected: FAIL + + [createEvent('DEVICEORIENTATIONEVENT') should be initialized correctly.] + expected: FAIL + + [DragEvent should be an alias for DragEvent.] + expected: FAIL + + [createEvent('DragEvent') should be initialized correctly.] + expected: FAIL + + [dragevent should be an alias for DragEvent.] + expected: FAIL + + [createEvent('dragevent') should be initialized correctly.] + expected: FAIL + + [DRAGEVENT should be an alias for DragEvent.] + expected: FAIL + + [createEvent('DRAGEVENT') should be initialized correctly.] + expected: FAIL + + [ErrorEvent should be an alias for ErrorEvent.] + bug: https://github.com/servo/servo/issues/10738 + expected: FAIL + + [createEvent('ErrorEvent') should be initialized correctly.] + bug: https://github.com/servo/servo/issues/10738 + expected: FAIL + + [errorevent should be an alias for ErrorEvent.] + bug: https://github.com/servo/servo/issues/10738 + expected: FAIL + + [createEvent('errorevent') should be initialized correctly.] + bug: https://github.com/servo/servo/issues/10738 + expected: FAIL + + [ERROREVENT should be an alias for ErrorEvent.] + bug: https://github.com/servo/servo/issues/10738 + expected: FAIL + + [createEvent('ERROREVENT') should be initialized correctly.] + bug: https://github.com/servo/servo/issues/10738 + expected: FAIL + + [FocusEvent should be an alias for FocusEvent.] + bug: https://github.com/servo/servo/issues/10739 + expected: FAIL + + [createEvent('FocusEvent') should be initialized correctly.] + bug: https://github.com/servo/servo/issues/10739 + expected: FAIL + + [focusevent should be an alias for FocusEvent.] + bug: https://github.com/servo/servo/issues/10739 + expected: FAIL + + [createEvent('focusevent') should be initialized correctly.] + bug: https://github.com/servo/servo/issues/10739 + expected: FAIL + + [FOCUSEVENT should be an alias for FocusEvent.] + bug: https://github.com/servo/servo/issues/10739 + expected: FAIL + + [createEvent('FOCUSEVENT') should be initialized correctly.] + bug: https://github.com/servo/servo/issues/10739 + expected: FAIL + + [HashChangeEvent should be an alias for HashChangeEvent.] + expected: FAIL + + [createEvent('HashChangeEvent') should be initialized correctly.] + expected: FAIL + + [hashchangeevent should be an alias for HashChangeEvent.] + expected: FAIL + + [createEvent('hashchangeevent') should be initialized correctly.] + expected: FAIL + + [HASHCHANGEEVENT should be an alias for HashChangeEvent.] + expected: FAIL + + [createEvent('HASHCHANGEEVENT') should be initialized correctly.] + expected: FAIL + + [IDBVersionChangeEvent should be an alias for IDBVersionChangeEvent.] + expected: FAIL + + [createEvent('IDBVersionChangeEvent') should be initialized correctly.] + expected: FAIL + + [idbversionchangeevent should be an alias for IDBVersionChangeEvent.] + expected: FAIL + + [createEvent('idbversionchangeevent') should be initialized correctly.] + expected: FAIL + + [IDBVERSIONCHANGEEVENT should be an alias for IDBVersionChangeEvent.] + expected: FAIL + + [createEvent('IDBVERSIONCHANGEEVENT') should be initialized correctly.] + expected: FAIL + + [PageTransitionEvent should be an alias for PageTransitionEvent.] + expected: FAIL + + [createEvent('PageTransitionEvent') should be initialized correctly.] + expected: FAIL + + [pagetransitionevent should be an alias for PageTransitionEvent.] + expected: FAIL + + [createEvent('pagetransitionevent') should be initialized correctly.] + expected: FAIL + + [PAGETRANSITIONEVENT should be an alias for PageTransitionEvent.] + expected: FAIL + + [createEvent('PAGETRANSITIONEVENT') should be initialized correctly.] + expected: FAIL + + [PopStateEvent should be an alias for PopStateEvent.] + expected: FAIL + + [createEvent('PopStateEvent') should be initialized correctly.] + expected: FAIL + + [popstateevent should be an alias for PopStateEvent.] + expected: FAIL + + [createEvent('popstateevent') should be initialized correctly.] + expected: FAIL + + [POPSTATEEVENT should be an alias for PopStateEvent.] + expected: FAIL + + [createEvent('POPSTATEEVENT') should be initialized correctly.] + expected: FAIL + + [SVGZoomEvent should be an alias for SVGZoomEvent.] + expected: FAIL + + [createEvent('SVGZoomEvent') should be initialized correctly.] + expected: FAIL + + [svgzoomevent should be an alias for SVGZoomEvent.] + expected: FAIL + + [createEvent('svgzoomevent') should be initialized correctly.] + expected: FAIL + + [SVGZOOMEVENT should be an alias for SVGZoomEvent.] + expected: FAIL + + [createEvent('SVGZOOMEVENT') should be initialized correctly.] + expected: FAIL + + [SVGZoomEvents should be an alias for SVGZoomEvent.] + expected: FAIL + + [createEvent('SVGZoomEvents') should be initialized correctly.] + expected: FAIL + + [svgzoomevents should be an alias for SVGZoomEvent.] + expected: FAIL + + [createEvent('svgzoomevents') should be initialized correctly.] + expected: FAIL + + [SVGZOOMEVENTS should be an alias for SVGZoomEvent.] + expected: FAIL + + [createEvent('SVGZOOMEVENTS') should be initialized correctly.] + expected: FAIL + + [TextEvent should be an alias for CompositionEvent.] + expected: FAIL + + [createEvent('TextEvent') should be initialized correctly.] + expected: FAIL + + [textevent should be an alias for CompositionEvent.] + expected: FAIL + + [createEvent('textevent') should be initialized correctly.] + expected: FAIL + + [TEXTEVENT should be an alias for CompositionEvent.] + expected: FAIL + + [createEvent('TEXTEVENT') should be initialized correctly.] + expected: FAIL + + [TrackEvent should be an alias for TrackEvent.] + expected: FAIL + + [createEvent('TrackEvent') should be initialized correctly.] + expected: FAIL + + [trackevent should be an alias for TrackEvent.] + expected: FAIL + + [createEvent('trackevent') should be initialized correctly.] + expected: FAIL + + [TRACKEVENT should be an alias for TrackEvent.] + expected: FAIL + + [createEvent('TRACKEVENT') should be initialized correctly.] + expected: FAIL + + [TransitionEvent should be an alias for TransitionEvent.] + expected: FAIL + + [createEvent('TransitionEvent') should be initialized correctly.] + expected: FAIL + + [transitionevent should be an alias for TransitionEvent.] + expected: FAIL + + [createEvent('transitionevent') should be initialized correctly.] + expected: FAIL + + [TRANSITIONEVENT should be an alias for TransitionEvent.] + expected: FAIL + + [createEvent('TRANSITIONEVENT') should be initialized correctly.] + expected: FAIL + + [WheelEvent should be an alias for WheelEvent.] + expected: FAIL + + [createEvent('WheelEvent') should be initialized correctly.] + expected: FAIL + + [wheelevent should be an alias for WheelEvent.] + expected: FAIL + + [createEvent('wheelevent') should be initialized correctly.] + expected: FAIL + + [WHEELEVENT should be an alias for WheelEvent.] + expected: FAIL + + [createEvent('WHEELEVENT') should be initialized correctly.] expected: FAIL diff --git a/tests/wpt/metadata/dom/nodes/Element-closest.html.ini b/tests/wpt/metadata/dom/nodes/Element-closest.html.ini index 7947188eb27..705a5da6b9f 100644 --- a/tests/wpt/metadata/dom/nodes/Element-closest.html.ini +++ b/tests/wpt/metadata/dom/nodes/Element-closest.html.ini @@ -1,6 +1,7 @@ [Element-closest.html] type: testharness [Element.closest with context node 'test11' and selector ':invalid'] + bug: https://github.com/servo/servo/issues/10781 expected: FAIL [Element.closest with context node 'test4' and selector ':scope'] diff --git a/tests/wpt/metadata/dom/nodes/rootNode.html.ini b/tests/wpt/metadata/dom/nodes/rootNode.html.ini deleted file mode 100644 index 44e544621ef..00000000000 --- a/tests/wpt/metadata/dom/nodes/rootNode.html.ini +++ /dev/null @@ -1,14 +0,0 @@ -[rootNode.html] - type: testharness - [rootNode attribute must return the context object when it does not have any parent] - expected: FAIL - - [rootNode attribute must return the parent node of the context object when the context object has a single ancestor not in a document] - expected: FAIL - - [rootNode attribute must return the document when a node is in document] - expected: FAIL - - [rootNode attribute must return a document fragment when a node is in the fragment] - expected: FAIL - diff --git a/tests/wpt/metadata/eventsource/dedicated-worker/eventsource-eventtarget.htm.ini b/tests/wpt/metadata/eventsource/dedicated-worker/eventsource-eventtarget.htm.ini deleted file mode 100644 index 97a2fac1de8..00000000000 --- a/tests/wpt/metadata/eventsource/dedicated-worker/eventsource-eventtarget.htm.ini +++ /dev/null @@ -1,5 +0,0 @@ -[eventsource-eventtarget.htm] - type: testharness - [dedicated worker - EventSource: addEventListener()] - expected: FAIL - diff --git a/tests/wpt/metadata/eventsource/dedicated-worker/eventsource-eventtarget.worker.js.ini b/tests/wpt/metadata/eventsource/dedicated-worker/eventsource-eventtarget.worker.js.ini new file mode 100644 index 00000000000..7e541e80663 --- /dev/null +++ b/tests/wpt/metadata/eventsource/dedicated-worker/eventsource-eventtarget.worker.js.ini @@ -0,0 +1,7 @@ +[eventsource-eventtarget.worker] + type: testharness + expected: TIMEOUT + bug: https://github.com/servo/servo/issues/8925 + [dedicated worker - EventSource: addEventListener()] + expected: TIMEOUT + diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/scroll-frag-percent-encoded.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/scroll-frag-percent-encoded.html.ini index 86f6db6e6e5..cde642c374c 100644 --- a/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/scroll-frag-percent-encoded.html.ini +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/scroll-frag-percent-encoded.html.ini @@ -1,5 +1,6 @@ [scroll-frag-percent-encoded.html] type: testharness + disabled: https://github.com/servo/servo/issues/10753 [Fragment Navigation: fragment id should be percent-decoded] expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/scroll-to-id-top.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/scroll-to-id-top.html.ini index dc184da60db..271674575ae 100644 --- a/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/scroll-to-id-top.html.ini +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/scroll-to-id-top.html.ini @@ -1,5 +1,6 @@ [scroll-to-id-top.html] type: testharness + disabled: https://github.com/servo/servo/issues/10753 [Fragment Navigation: TOP is a valid element id, which overrides navigating to top of the document] expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/scroll-to-top.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/scroll-to-top.html.ini index a9fdfd551b8..2370922cb98 100644 --- a/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/scroll-to-top.html.ini +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/scroll-to-top.html.ini @@ -1,5 +1,6 @@ [scroll-to-top.html] type: testharness + disabled: https://github.com/servo/servo/issues/10753 [Fragment Navigation: When fragid is TOP scroll to the top of the document] expected: FAIL diff --git a/tests/wpt/metadata/html/dom/interfaces.html.ini b/tests/wpt/metadata/html/dom/interfaces.html.ini index f7f6399a95e..1acedab90ec 100644 --- a/tests/wpt/metadata/html/dom/interfaces.html.ini +++ b/tests/wpt/metadata/html/dom/interfaces.html.ini @@ -1956,9 +1956,6 @@ [HTMLElement interface: document.createElement("noscript") must inherit property "onwaiting" with the proper type (94)] expected: FAIL - [Element interface: document.createElement("noscript") must inherit property "hasAttributes" with the proper type (7)] - expected: FAIL - [Element interface: document.createElement("noscript") must inherit property "query" with the proper type (34)] expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/selectors/pseudo-classes/readwrite-readonly.html.ini b/tests/wpt/metadata/html/semantics/selectors/pseudo-classes/readwrite-readonly.html.ini index 3f06a8ead61..090483d537e 100644 --- a/tests/wpt/metadata/html/semantics/selectors/pseudo-classes/readwrite-readonly.html.ini +++ b/tests/wpt/metadata/html/semantics/selectors/pseudo-classes/readwrite-readonly.html.ini @@ -1,5 +1,6 @@ [readwrite-readonly.html] type: testharness + bug: https://github.com/servo/servo/issues/10732 [The :read-write pseudo-class must match input elements to which the readonly attribute applies, and that are mutable] expected: FAIL @@ -48,3 +49,9 @@ [The :read-only pseudo-class must not match elements that are editing hosts] expected: FAIL + [The :read-write pseudo-class must not match input elements to which the readonly attribute does not apply] + expected: FAIL + + [The :read-only pseudo-class must match input elements to which the readonly attribute does not apply] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/selectors/pseudo-classes/valid-invalid.html.ini b/tests/wpt/metadata/html/semantics/selectors/pseudo-classes/valid-invalid.html.ini index 6e37ccdda71..ffcc544ebe1 100644 --- a/tests/wpt/metadata/html/semantics/selectors/pseudo-classes/valid-invalid.html.ini +++ b/tests/wpt/metadata/html/semantics/selectors/pseudo-classes/valid-invalid.html.ini @@ -1,5 +1,6 @@ [valid-invalid.html] type: testharness + bug: https://github.com/servo/servo/issues/10781 [':valid' matches elements that satisfy their constraints] expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/tabular-data/the-table-element/tBodies.html.ini b/tests/wpt/metadata/html/semantics/tabular-data/the-table-element/tBodies.html.ini deleted file mode 100644 index 071314f2235..00000000000 --- a/tests/wpt/metadata/html/semantics/tabular-data/the-table-element/tBodies.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[tBodies.html] - type: testharness - [HTMLTableElement.tBodies] - expected: FAIL - diff --git a/tests/wpt/metadata/html/webappapis/animation-frames/callback-exception.html.ini b/tests/wpt/metadata/html/webappapis/animation-frames/callback-exception.html.ini index 7b14e24c05d..43ac27f20e2 100644 --- a/tests/wpt/metadata/html/webappapis/animation-frames/callback-exception.html.ini +++ b/tests/wpt/metadata/html/webappapis/animation-frames/callback-exception.html.ini @@ -1,6 +1,7 @@ [callback-exception.html] type: testharness expected: TIMEOUT + bug: https://github.com/servo/servo/issues/3311 [requestAnimationFrame callback exceptions are reported to error handler] expected: TIMEOUT diff --git a/tests/wpt/metadata/html/webappapis/animation-frames/callback-invoked.html.ini b/tests/wpt/metadata/html/webappapis/animation-frames/callback-invoked.html.ini index c829e4716cf..10f4459dbfc 100644 --- a/tests/wpt/metadata/html/webappapis/animation-frames/callback-invoked.html.ini +++ b/tests/wpt/metadata/html/webappapis/animation-frames/callback-invoked.html.ini @@ -1,5 +1,6 @@ [callback-invoked.html] type: testharness + bug: https://github.com/servo/servo/issues/9751 [requestAnimationFrame callback is invoked at least once before the timeout] expected: FAIL diff --git a/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-processing-algorithm.html.ini b/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-processing-algorithm.html.ini index d0ea8e8024f..0b64433aff9 100644 --- a/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-processing-algorithm.html.ini +++ b/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-processing-algorithm.html.ini @@ -1,5 +1,6 @@ [event-handler-processing-algorithm.html] type: testharness [beforeunload listener returning null cancels event] + bug: https://github.com/servo/servo/issues/10787 expected: FAIL diff --git a/tests/wpt/metadata/html/webappapis/scripting/events/invalid-uncompiled-raw-handler-compiled-once.html.ini b/tests/wpt/metadata/html/webappapis/scripting/events/invalid-uncompiled-raw-handler-compiled-once.html.ini index 0bdfff20821..e5a79400737 100644 --- a/tests/wpt/metadata/html/webappapis/scripting/events/invalid-uncompiled-raw-handler-compiled-once.html.ini +++ b/tests/wpt/metadata/html/webappapis/scripting/events/invalid-uncompiled-raw-handler-compiled-once.html.ini @@ -1,6 +1,7 @@ [invalid-uncompiled-raw-handler-compiled-once.html] type: testharness note: remove inline-event-listener-panic.html when onerror is implemented properly. + bug: https://github.com/servo/servo/issues/3311 [Invalid uncompiled raw handlers should only be compiled once.] expected: FAIL diff --git a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-1.html.ini b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-1.html.ini new file mode 100644 index 00000000000..d0e9c948e3a --- /dev/null +++ b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-1.html.ini @@ -0,0 +1,6 @@ +[window-onerror-with-cross-frame-event-listeners-1.html] + type: testharness + bug: https://github.com/servo/servo/issues/3311 + [The error event from an event listener should fire on that listener's global] + expected: FAIL + diff --git a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-2.html.ini b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-2.html.ini new file mode 100644 index 00000000000..3d72563832c --- /dev/null +++ b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-2.html.ini @@ -0,0 +1,6 @@ +[window-onerror-with-cross-frame-event-listeners-2.html] + type: testharness + bug: https://github.com/servo/servo/issues/3311 + [The error event from an event listener should fire on that listener's global] + expected: FAIL + diff --git a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-3.html.ini b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-3.html.ini new file mode 100644 index 00000000000..10f8529a133 --- /dev/null +++ b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-3.html.ini @@ -0,0 +1,6 @@ +[window-onerror-with-cross-frame-event-listeners-3.html] + type: testharness + bug: https://github.com/servo/servo/issues/3311 + [The error event from an event listener should fire on that listener's global] + expected: FAIL + diff --git a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-4.html.ini b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-4.html.ini new file mode 100644 index 00000000000..eff06558b41 --- /dev/null +++ b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-4.html.ini @@ -0,0 +1,6 @@ +[window-onerror-with-cross-frame-event-listeners-4.html] + type: testharness + bug: https://github.com/servo/servo/issues/3311 + [The error event from an event listener should fire on that listener's global] + expected: FAIL + diff --git a/tests/wpt/metadata/mozilla-sync b/tests/wpt/metadata/mozilla-sync index 042374c3deb..afe467ba081 100644 --- a/tests/wpt/metadata/mozilla-sync +++ b/tests/wpt/metadata/mozilla-sync @@ -1 +1 @@ -f9608022caf7f223dfdfe960c31fb5fe7eb0d1f1
\ No newline at end of file +cb42be98279348981951933aeee4b1bfcf1517d1
\ No newline at end of file diff --git a/tests/wpt/metadata/url/a-element-xhtml.xhtml.ini b/tests/wpt/metadata/url/a-element-xhtml.xhtml.ini index 1733d692fa9..1de208b4b44 100644 --- a/tests/wpt/metadata/url/a-element-xhtml.xhtml.ini +++ b/tests/wpt/metadata/url/a-element-xhtml.xhtml.ini @@ -798,3 +798,6 @@ [Parsing: <??a=b&c=d> against <http://example.org/foo/bar>] expected: FAIL + [Parsing: <sc::a@example.net> against <about:blank>] + expected: FAIL + diff --git a/tests/wpt/metadata/url/a-element.html.ini b/tests/wpt/metadata/url/a-element.html.ini index f4a3706ae28..d52cb01c63a 100644 --- a/tests/wpt/metadata/url/a-element.html.ini +++ b/tests/wpt/metadata/url/a-element.html.ini @@ -798,3 +798,6 @@ [Parsing: <??a=b&c=d> against <http://example.org/foo/bar>] expected: FAIL + [Parsing: <sc::a@example.net> against <about:blank>] + expected: FAIL + diff --git a/tests/wpt/metadata/url/url-constructor.html.ini b/tests/wpt/metadata/url/url-constructor.html.ini index 04058f5ebbd..dba2b15a3a2 100644 --- a/tests/wpt/metadata/url/url-constructor.html.ini +++ b/tests/wpt/metadata/url/url-constructor.html.ini @@ -1,212 +1,5 @@ [url-constructor.html] type: testharness - [Parsing: <#β> against <http://example.org/foo/bar>] - expected: FAIL - - [Parsing: <http://www.google.com/foo?bar=baz# »> against <about:blank>] - expected: FAIL - - [Parsing: <data:test# »> against <about:blank>] - expected: FAIL - - [Parsing: <http://你好你好> against <http://other.com/>] - expected: FAIL - - [Parsing: <foo://> against <http://example.org/foo/bar>] - expected: FAIL - - [Parsing: <foo://///////> against <http://example.org/foo/bar>] - expected: FAIL - - [Parsing: <foo://///////bar.com/> against <http://example.org/foo/bar>] - expected: FAIL - - [Parsing: <foo:////://///> against <http://example.org/foo/bar>] - expected: FAIL - - [Parsing: <file:/example.com/> against <http://example.org/foo/bar>] - expected: FAIL - - [Parsing: <file:c:\\foo\\bar.html> against <file:///tmp/mock/path>] - expected: FAIL - - [Parsing: < File:c|////foo\\bar.html> against <file:///tmp/mock/path>] - expected: FAIL - - [Parsing: <C|/foo/bar> against <file:///tmp/mock/path>] - expected: FAIL - - [Parsing: </C|\\foo\\bar> against <file:///tmp/mock/path>] - expected: FAIL - - [Parsing: <//C|/foo/bar> against <file:///tmp/mock/path>] - expected: FAIL - - [Parsing: <file:///foo/bar.txt> against <file:///tmp/mock/path>] - expected: FAIL - - [Parsing: <file:///home/me> against <file:///tmp/mock/path>] - expected: FAIL - - [Parsing: <//> against <file:///tmp/mock/path>] - expected: FAIL - - [Parsing: <///> against <file:///tmp/mock/path>] - expected: FAIL - - [Parsing: <///test> against <file:///tmp/mock/path>] - expected: FAIL - - [Parsing: <test> against <file:///tmp/mock/path>] - expected: FAIL - - [Parsing: <file:test> against <file:///tmp/mock/path>] - expected: FAIL - - [Parsing: <httpa://foo:80/> against <about:blank>] - expected: FAIL - - [Parsing: <file:/example.com/> against <about:blank>] - expected: FAIL - - [Parsing: <#> against <test:test>] - expected: FAIL - - [Parsing: <#x> against <mailto:x@x.com>] - expected: FAIL - - [Parsing: <#x> against <data:,>] - expected: FAIL - - [Parsing: <#x> against <about:blank>] - expected: FAIL - - [Parsing: <#> against <test:test?test>] - expected: FAIL - - [Parsing: <i> against <sc:/pa/pa>] - expected: FAIL - - [Parsing: <i> against <sc://ho/pa>] - expected: FAIL - - [Parsing: <i> against <sc:///pa/pa>] - expected: FAIL - - [Parsing: <../i> against <sc:/pa/pa>] - expected: FAIL - - [Parsing: <../i> against <sc://ho/pa>] - expected: FAIL - - [Parsing: <../i> against <sc:///pa/pa>] - expected: FAIL - - [Parsing: </i> against <sc:/pa/pa>] - expected: FAIL - - [Parsing: </i> against <sc://ho/pa>] - expected: FAIL - - [Parsing: </i> against <sc:///pa/pa>] - expected: FAIL - - [Parsing: <?i> against <sc:/pa/pa>] - expected: FAIL - - [Parsing: <?i> against <sc://ho/pa>] - expected: FAIL - - [Parsing: <?i> against <sc:///pa/pa>] - expected: FAIL - - [Parsing: <#i> against <sc:sd>] - expected: FAIL - - [Parsing: <#i> against <sc:sd/sd>] - expected: FAIL - - [Parsing: <#i> against <sc:/pa/pa>] - expected: FAIL - - [Parsing: <#i> against <sc://ho/pa>] - expected: FAIL - - [Parsing: <#i> against <sc:///pa/pa>] - expected: FAIL - - [Parsing: <about:/../> against <about:blank>] - expected: FAIL - - [Parsing: <data:/../> against <about:blank>] - expected: FAIL - - [Parsing: <javascript:/../> against <about:blank>] - expected: FAIL - - [Parsing: <mailto:/../> against <about:blank>] - expected: FAIL - - [Parsing: <sc://ñ.test/> against <about:blank>] - expected: FAIL - - [Parsing: <http://&a:foo(b\]c@d:2/> against <http://example.org/foo/bar>] - expected: FAIL - - [Parsing: <http://::@c@d:2> against <http://example.org/foo/bar>] - expected: FAIL - - [Parsing: <//server/file> against <file:///tmp/mock/path>] - expected: FAIL - - [Parsing: <\\\\server\\file> against <file:///tmp/mock/path>] - expected: FAIL - - [Parsing: </\\server/file> against <file:///tmp/mock/path>] - expected: FAIL - - [Parsing: <file://test> against <file:///tmp/mock/path>] - expected: FAIL - - [Parsing: <file://localhost> against <file:///tmp/mock/path>] - expected: FAIL - - [Parsing: <file://localhost/> against <file:///tmp/mock/path>] - expected: FAIL - - [Parsing: <file://localhost/test> against <file:///tmp/mock/path>] - expected: FAIL - - [Parsing: <file:...> against <http://www.example.com/test>] - expected: FAIL - - [Parsing: <file:..> against <http://www.example.com/test>] - expected: FAIL - - [Parsing: <file:a> against <http://www.example.com/test>] - expected: FAIL - - [Parsing: <http://example.com/foo/%2e%2> against <about:blank>] - expected: FAIL - - [Parsing: <http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar> against <about:blank>] - expected: FAIL - - [Parsing: <http://www/foo%2Ehtml> against <about:blank>] - expected: FAIL - [Parsing: <h\tt\nt\rp://h\to\ns\rt:9\t0\n0\r0/p\ta\nt\rh?q\tu\ne\rry#f\tr\na\rg> against <about:blank>] expected: FAIL - [URL.searchParams updating, clearing] - expected: FAIL - - [URL.searchParams and URL.search setters, update propagation] - expected: FAIL - - [Parsing: <?a=b&c=d> against <http://example.org/foo/bar>] - expected: FAIL - - [Parsing: <??a=b&c=d> against <http://example.org/foo/bar>] - expected: FAIL - diff --git a/tests/wpt/metadata/url/urlsearchparams-constructor.html.ini b/tests/wpt/metadata/url/urlsearchparams-constructor.html.ini deleted file mode 100644 index af33a71e148..00000000000 --- a/tests/wpt/metadata/url/urlsearchparams-constructor.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[urlsearchparams-constructor.html] - type: testharness - [URLSearchParams constructor, empty.] - expected: FAIL - diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/limits/gl-min-textures.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/limits/gl-min-textures.html.ini index cd454029296..625e08bbc08 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/limits/gl-min-textures.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/limits/gl-min-textures.html.ini @@ -3,3 +3,6 @@ [WebGL test #0: successfullyParsed should be true (of type boolean). Was undefined (of type undefined).] expected: FAIL + [WebGL test #1: 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/more/conformance/quickCheckAPI-G_I.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/conformance/quickCheckAPI-G_I.html.ini index d313695857a..499147bb3cf 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/conformance/quickCheckAPI-G_I.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/conformance/quickCheckAPI-G_I.html.ini @@ -1,5 +1,6 @@ [quickCheckAPI-G_I.html] type: testharness + disabled: https://github.com/servo/servo/issues/10656 expected: if os == "linux": CRASH if os == "osx": TIMEOUT diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/conformance/quickCheckAPI-S_V.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/conformance/quickCheckAPI-S_V.html.ini index 4e8b19fdb8e..5a623d18402 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/conformance/quickCheckAPI-S_V.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/conformance/quickCheckAPI-S_V.html.ini @@ -1,3 +1,3 @@ [quickCheckAPI-S_V.html] type: testharness - expected: CRASH + disabled: https://github.com/servo/servo/issues/10698 diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/bufferDataBadArgs.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/bufferDataBadArgs.html.ini deleted file mode 100644 index aa52146e07f..00000000000 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/bufferDataBadArgs.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[bufferDataBadArgs.html] - type: testharness - [WebGL test #0: testBufferData] - expected: FAIL - diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/texImage2D.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/texImage2D.html.ini deleted file mode 100644 index 8f198e94924..00000000000 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/texImage2D.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[texImage2D.html] - type: testharness - [WebGL test #0: testTexImage2D] - expected: FAIL - diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/programs/gl-bind-attrib-location-test.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/programs/gl-bind-attrib-location-test.html.ini index 17d8dfb7a4b..6f3a8e7db45 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/programs/gl-bind-attrib-location-test.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/programs/gl-bind-attrib-location-test.html.ini @@ -2,3 +2,4 @@ type: testharness [WebGL test #6: 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/programs/invalid-UTF-16.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/programs/invalid-UTF-16.html.ini deleted file mode 100644 index 889bd615088..00000000000 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/programs/invalid-UTF-16.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[invalid-UTF-16.html] - type: testharness - expected: CRASH diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/reading/read-pixels-test.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/reading/read-pixels-test.html.ini index b5f47e0e275..72222627cc3 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/reading/read-pixels-test.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/reading/read-pixels-test.html.ini @@ -1,3 +1,3 @@ [read-pixels-test.html] type: testharness - expected: CRASH + expected: TIMEOUT diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/renderbuffers/feedback-loop.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/renderbuffers/feedback-loop.html.ini index a3be8b1b8b1..80b7a714709 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/renderbuffers/feedback-loop.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/renderbuffers/feedback-loop.html.ini @@ -3,3 +3,6 @@ [WebGL test #0: successfullyParsed should be true (of type boolean). Was undefined (of type undefined).] expected: FAIL + [WebGL test #1: 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/state-uneffected-after-compositing.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/state/state-uneffected-after-compositing.html.ini index c8e528531fb..8d9aeee05dc 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/state/state-uneffected-after-compositing.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/state/state-uneffected-after-compositing.html.ini @@ -1,6 +1,6 @@ [state-uneffected-after-compositing.html] type: testharness - expected: CRASH + expected: TIMEOUT [WebGL test #0: Unable to fetch WebGL rendering context for Canvas] expected: FAIL diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-mips.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-mips.html.ini index 12cce1a5131..f5b63a2a77d 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-mips.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-mips.html.ini @@ -6,3 +6,6 @@ [WebGL test #3: successfullyParsed should be true (of type boolean). Was undefined (of type undefined).] expected: FAIL + [WebGL test #11: 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/texture-npot.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-npot.html.ini index d03379487c8..82aee04e698 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-npot.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-npot.html.ini @@ -3,3 +3,6 @@ [WebGL test #1: successfullyParsed should be true (of type boolean). Was undefined (of type undefined).] expected: FAIL + [WebGL test #4: 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/texture-size-cube-maps.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-size-cube-maps.html.ini index d7e8a8b4c1b..4b7a0b20cd0 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 @@ -1,3 +1,3 @@ [texture-size-cube-maps.html] type: testharness - expected: CRASH + expected: TIMEOUT diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-size-limit.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-size-limit.html.ini index 531214358f8..9447365f926 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-size-limit.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-size-limit.html.ini @@ -1,8 +1,6 @@ [texture-size-limit.html] type: testharness - expected: - if os == "linux": CRASH - if not debug and (os == "mac") and (version == "OS X 10.10.5") and (processor == "x86_64") and (bits == 64) and (backend == "cpu"): CRASH + expected: TIMEOUT [WebGL test #0: Unable to fetch WebGL rendering context for Canvas] 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 index ab4df0b7d7e..a4bcc3d348b 100644 --- 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 @@ -1,8 +1,6 @@ [texture-size.html] type: testharness - expected: - if os == "linux": CRASH - if not debug and (os == "mac") and (version == "OS X 10.10.5") and (processor == "x86_64") and (bits == 64) and (backend == "cpu"): CRASH + expected: TIMEOUT [WebGL test #0: Unable to fetch WebGL rendering context for Canvas] expected: FAIL diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/uniforms/uniform-location.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/uniforms/uniform-location.html.ini index 4ac1dc8d4be..d8c77587466 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/uniforms/uniform-location.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/uniforms/uniform-location.html.ini @@ -41,3 +41,15 @@ [WebGL test #13: getError expected: NO_ERROR. Was INVALID_OPERATION : after evaluating: contextA.uniform4fv(locationVec4, vec)] expected: FAIL + [WebGL test #20: getError expected: INVALID_OPERATION. Was NO_ERROR : after evaluating: contextA.uniform1i(locationSx, 3)] + expected: FAIL + + [WebGL test #21: contextA.getUniform(programS, locationSx) threw exception TypeError: contextA.getUniform is not a function] + expected: FAIL + + [WebGL test #24: contextA.getUniform(programS, locationSx) should be 3. Threw exception TypeError: contextA.getUniform is not a function] + expected: FAIL + + [WebGL test #25: contextA.getUniform(programS, locationArray0) should be 123. Threw exception TypeError: contextA.getUniform is not a function] + expected: FAIL + diff --git a/tests/wpt/metadata/webstorage/storage_setitem.html.ini b/tests/wpt/metadata/webstorage/storage_setitem.html.ini index 93dfb482b17..0a0f43019b2 100644 --- a/tests/wpt/metadata/webstorage/storage_setitem.html.ini +++ b/tests/wpt/metadata/webstorage/storage_setitem.html.ini @@ -1,3 +1,19 @@ [storage_setitem.html] type: testharness - expected: CRASH + expected: TIMEOUT + [localStorage[\] = "�"] + expected: FAIL + bug: https://github.com/servo/servo/issues/6564 + + [localStorage[\] = "�a"] + expected: FAIL + bug: https://github.com/servo/servo/issues/6564 + + [localStorage[\] = "a�"] + expected: FAIL + bug: https://github.com/servo/servo/issues/6564 + + [localStorage["0"\]] + expected: TIMEOUT + bug: https://github.com/servo/servo/issues/10686 + diff --git a/tests/wpt/metadata/workers/Worker_dispatchEvent_ErrorEvent.htm.ini b/tests/wpt/metadata/workers/Worker_dispatchEvent_ErrorEvent.htm.ini new file mode 100644 index 00000000000..e3f456034a3 --- /dev/null +++ b/tests/wpt/metadata/workers/Worker_dispatchEvent_ErrorEvent.htm.ini @@ -0,0 +1,5 @@ +[Worker_dispatchEvent_ErrorEvent.htm] + type: testharness + [document.createEvent('ErrorEvent')] + expected: FAIL + diff --git a/tests/wpt/mozilla/meta/MANIFEST.json b/tests/wpt/mozilla/meta/MANIFEST.json index 1cadcfe1765..9bc3a4cb036 100644 --- a/tests/wpt/mozilla/meta/MANIFEST.json +++ b/tests/wpt/mozilla/meta/MANIFEST.json @@ -8,6 +8,7 @@ }, "local_changes": { "deleted": [], + "deleted_reftests": {}, "items": { "reftest": { "css/abs-overflow-stackingcontext.html": [ @@ -4587,6 +4588,18 @@ "url": "/_mozilla/css/submit_focus_a.html" } ], + "css/svg_children.html": [ + { + "path": "css/svg_children.html", + "references": [ + [ + "/_mozilla/css/svg_children_ref.html", + "==" + ] + ], + "url": "/_mozilla/css/svg_children.html" + } + ], "css/table_auto_width.html": [ { "path": "css/table_auto_width.html", @@ -5779,6 +5792,18 @@ "url": "/_mozilla/mozilla/iframe/resize_after_load.html" } ], + "mozilla/sslfail.html": [ + { + "path": "mozilla/sslfail.html", + "references": [ + [ + "/_mozilla/mozilla/sslfail-ref.html", + "==" + ] + ], + "url": "/_mozilla/mozilla/sslfail.html" + } + ], "mozilla/webgl/clearcolor.html": [ { "path": "mozilla/webgl/clearcolor.html", @@ -5803,6 +5828,18 @@ "url": "/_mozilla/mozilla/webgl/draw_arrays_simple.html" } ], + "mozilla/webgl/tex_image_2d_abv.html": [ + { + "path": "mozilla/webgl/tex_image_2d_abv.html", + "references": [ + [ + "/_mozilla/mozilla/webgl/tex_image_2d_abv_ref.html", + "==" + ] + ], + "url": "/_mozilla/mozilla/webgl/tex_image_2d_abv.html" + } + ], "mozilla/webgl/tex_image_2d_canvas.html": [ { "path": "mozilla/webgl/tex_image_2d_canvas.html", @@ -6657,6 +6694,12 @@ "url": "/_mozilla/mozilla/window_requestAnimationFrame2.html" } ], + "mozilla/window_resize_not_triggered_on_load.html": [ + { + "path": "mozilla/window_resize_not_triggered_on_load.html", + "url": "/_mozilla/mozilla/window_resize_not_triggered_on_load.html" + } + ], "mozilla/window_setInterval.html": [ { "path": "mozilla/window_setInterval.html", @@ -11249,6 +11292,18 @@ "url": "/_mozilla/css/submit_focus_a.html" } ], + "css/svg_children.html": [ + { + "path": "css/svg_children.html", + "references": [ + [ + "/_mozilla/css/svg_children_ref.html", + "==" + ] + ], + "url": "/_mozilla/css/svg_children.html" + } + ], "css/table_auto_width.html": [ { "path": "css/table_auto_width.html", @@ -12441,6 +12496,18 @@ "url": "/_mozilla/mozilla/iframe/resize_after_load.html" } ], + "mozilla/sslfail.html": [ + { + "path": "mozilla/sslfail.html", + "references": [ + [ + "/_mozilla/mozilla/sslfail-ref.html", + "==" + ] + ], + "url": "/_mozilla/mozilla/sslfail.html" + } + ], "mozilla/webgl/clearcolor.html": [ { "path": "mozilla/webgl/clearcolor.html", @@ -12465,6 +12532,18 @@ "url": "/_mozilla/mozilla/webgl/draw_arrays_simple.html" } ], + "mozilla/webgl/tex_image_2d_abv.html": [ + { + "path": "mozilla/webgl/tex_image_2d_abv.html", + "references": [ + [ + "/_mozilla/mozilla/webgl/tex_image_2d_abv_ref.html", + "==" + ] + ], + "url": "/_mozilla/mozilla/webgl/tex_image_2d_abv.html" + } + ], "mozilla/webgl/tex_image_2d_canvas.html": [ { "path": "mozilla/webgl/tex_image_2d_canvas.html", diff --git a/tests/wpt/mozilla/meta/mozilla/sslfail.html.ini b/tests/wpt/mozilla/meta/mozilla/sslfail.html.ini new file mode 100644 index 00000000000..0c722d3efd7 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/sslfail.html.ini @@ -0,0 +1,3 @@ +[sslfail.html] + type: reftest + disabled: https://github.com/servo/servo/issues/10760 diff --git a/tests/wpt/mozilla/tests/css/svg_children.html b/tests/wpt/mozilla/tests/css/svg_children.html new file mode 100644 index 00000000000..9562a1c5a2a --- /dev/null +++ b/tests/wpt/mozilla/tests/css/svg_children.html @@ -0,0 +1,9 @@ +<!doctype html> +<meta charset="utf-8"> +<title>not rendering children of svg</title> +<link rel="match" href="svg_children_ref.html"> +<svg> + <style> + /* some text content that should not be rendered */ + </style> +</svg> diff --git a/tests/wpt/mozilla/tests/css/svg_children_ref.html b/tests/wpt/mozilla/tests/css/svg_children_ref.html new file mode 100644 index 00000000000..cadbabc7c5a --- /dev/null +++ b/tests/wpt/mozilla/tests/css/svg_children_ref.html @@ -0,0 +1,2 @@ +<!doctype html> +<meta charset="utf-8"> diff --git a/tests/wpt/mozilla/tests/mozilla/bad_cert_detected.html b/tests/wpt/mozilla/tests/mozilla/bad_cert_detected.html index 22f6b6676e4..7b79c46b48d 100644 --- a/tests/wpt/mozilla/tests/mozilla/bad_cert_detected.html +++ b/tests/wpt/mozilla/tests/mozilla/bad_cert_detected.html @@ -10,18 +10,14 @@ var t = async_test("Invalid SSL cert noticed"); t.step(function() { var target = location.href.replace(HTTP_ORIGIN, HTTPS_ORIGIN) .replace('bad_cert_detected.html', - 'resources/origin_helpers.js'); - // Servo currently lacks the ability to introspect any content that is blocked - // due to a cert error, so we use a roundabout method to infer that that's happened. - // When the worker has a cert failure, that translates into attempting to evaluate the - // contents of badcert.html as JS, which triggers an exception that currently does not - // propagate to the parent scope. If we _do_ get an error event in the parent scope, - // that means that the cert verification was treated no different than any other - // network error, since we dispatch an error event in that case. + 'resources/worker_success.js'); var w = new Worker(target); - w.addEventListener('error', t.unreached_func("cert not detected as invalid"), false); - // We infer that we detected an invalid cert if nothing happens for a few seconds. - setTimeout(function() { t.done() }, 3000); + // If the script executes successfully, it should send a message. That indicates that + // there was no validation failure, which is bad. + w.addEventListener('message', t.unreached_func("cert not detected as invalid"), true); + // When the worker has a cert failure, that translates into an early error that is reported + // to the Worker object. + w.addEventListener('error', t.step_func_done(), true); }); </script> </body> diff --git a/tests/wpt/mozilla/tests/mozilla/resources/origin_helpers.js b/tests/wpt/mozilla/tests/mozilla/resources/origin_helpers.js index 35e6ebf6a05..6493d422c08 100644 --- a/tests/wpt/mozilla/tests/mozilla/resources/origin_helpers.js +++ b/tests/wpt/mozilla/tests/mozilla/resources/origin_helpers.js @@ -1,5 +1,5 @@ var HTTP_PORT = '{{ports[http][0]}}'; var HTTPS_PORT = '{{ports[https][0]}}'; -var ORIGINAL_HOST = '\'{{host}}\''; +var ORIGINAL_HOST = '{{host}}'; var HTTP_ORIGIN = 'http://' + ORIGINAL_HOST + ':' + HTTP_PORT; var HTTPS_ORIGIN = 'https://' + ORIGINAL_HOST + ':' + HTTPS_PORT; diff --git a/tests/wpt/mozilla/tests/mozilla/resources/ssl.https.html b/tests/wpt/mozilla/tests/mozilla/resources/ssl.https.html new file mode 100644 index 00000000000..ea0a70858a4 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/resources/ssl.https.html @@ -0,0 +1,5 @@ +<html> +<body> +this should be a secure connection +</body> +</html>
\ No newline at end of file diff --git a/tests/wpt/mozilla/tests/mozilla/resources/worker_success.js b/tests/wpt/mozilla/tests/mozilla/resources/worker_success.js new file mode 100644 index 00000000000..327986f34b9 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/resources/worker_success.js @@ -0,0 +1 @@ +postMessage('load succeeded'); diff --git a/tests/wpt/mozilla/tests/mozilla/sslfail-ref.html b/tests/wpt/mozilla/tests/mozilla/sslfail-ref.html new file mode 100644 index 00000000000..4d371a86886 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/sslfail-ref.html @@ -0,0 +1,9 @@ +<html> + <head> + <meta charset=utf-8> + <title>SSL Failure Reference</title> + </head> + <body> + <iframe src="about:sslfail"></iframe> + </body> +</html> diff --git a/tests/wpt/mozilla/tests/mozilla/sslfail.html b/tests/wpt/mozilla/tests/mozilla/sslfail.html new file mode 100644 index 00000000000..40eb31ca31a --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/sslfail.html @@ -0,0 +1,17 @@ +<html> + <head> + <meta charset=utf-8> + <title>SSL Failure</title> + <link rel=match href=sslfail-ref.html> + <script src="resources/origin_helpers.js?pipe=sub"></script> + </head> + <body> + <script> +var iframe = document.createElement('iframe'); +document.body.appendChild(iframe); +iframe.src = location.href + .replace(HTTP_ORIGIN, HTTPS_ORIGIN) + .replace('sslfail.html', 'resources/ssl.https.html'); + </script> + </body> +</html> diff --git a/tests/wpt/mozilla/tests/mozilla/webgl/tex_image_2d_abv.html b/tests/wpt/mozilla/tests/mozilla/webgl/tex_image_2d_abv.html new file mode 100644 index 00000000000..bfa6019a218 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/webgl/tex_image_2d_abv.html @@ -0,0 +1,106 @@ +<!doctype html> +<meta charset="utf-8"> +<title>WebGL: texImage2D with Array Buffer View</title> +<link rel="match" href="tex_image_2d_abv_ref.html"> +<style>html, body { margin: 0; padding: 0; }</style> +<!-- This reftest should show a 512x512px red square --> +<canvas id="c" width="512" height="512"></canvas> +<script id="vertex_shader" type="x-shader/x-vertex"> +precision mediump float; +attribute vec2 a_texCoord; +attribute vec2 a_position; +varying vec2 v_texCoord; + +void main() { + gl_Position = vec4(a_position, 0, 1); + v_texCoord = a_texCoord; +} +</script> + +<script id="fragment_shader" type="x-shader/x-fragment"> +precision mediump float; +uniform sampler2D u_image; +varying vec2 v_texCoord; +void main() { + gl_FragColor = texture2D(u_image, v_texCoord); +} +</script> +<script> + var gl = document.getElementById('c').getContext('webgl'); + + // Clear black + gl.clearColor(1, 1, 1, 1); + gl.clear(gl.COLOR_BUFFER_BIT); + + // Create the program + var vertex_shader = gl.createShader(gl.VERTEX_SHADER), + fragment_shader = gl.createShader(gl.FRAGMENT_SHADER), + program = gl.createProgram(); + + gl.shaderSource(vertex_shader, + document.getElementById('vertex_shader').textContent); + gl.shaderSource(fragment_shader, + document.getElementById('fragment_shader').textContent); + gl.compileShader(vertex_shader); + gl.compileShader(fragment_shader); + gl.attachShader(program, vertex_shader); + gl.attachShader(program, fragment_shader); + console.log(gl.getShaderInfoLog(vertex_shader)); + console.log(gl.getShaderInfoLog(fragment_shader)); + gl.linkProgram(program); + gl.useProgram(program); + + // Get the position from the fragment shader + var position = gl.getAttribLocation(program, "a_position"); + var tex_position = gl.getAttribLocation(program, "a_texCoord"); + + var texture_coordinates = new Float32Array([ + 0.0, 0.0, + 1.0, 0.0, + 0.0, 1.0, + 0.0, 1.0, + 1.0, 0.0, + 1.0, 1.0 + ]); + + var texture_buffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, texture_buffer); + gl.bufferData(gl.ARRAY_BUFFER, texture_coordinates, gl.STATIC_DRAW); + gl.enableVertexAttribArray(tex_position); + gl.vertexAttribPointer(tex_position, 2, gl.FLOAT, false, 0, 0); + + var square_data = new Float32Array([ + -1.0, 1.0, // top left + 1.0, 1.0, // top right + -1.0, -1.0, // bottom left + -1.0, -1.0, // bottom left + 1.0, 1.0, // top right + 1.0, -1.0 // bottom right + ]); + + // Create a buffer for the square with the square + // vertex data + var square_buffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, square_buffer); + gl.bufferData(gl.ARRAY_BUFFER, square_data, gl.STATIC_DRAW); + + gl.enableVertexAttribArray(position); + gl.vertexAttribPointer(position, 2, gl.FLOAT, false, 0, 0); + + // Load the texture and draw + var tex = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, tex); + console.log(gl.getError() == gl.NO_ERROR); + + + // Create a 1x1 red texture, but repeated. + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, + gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array([255, 0, 0, 255])); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); + console.log(gl.getError() == gl.NO_ERROR); + + gl.drawArrays(gl.TRIANGLES, 0, 6); +</script> diff --git a/tests/wpt/mozilla/tests/mozilla/webgl/tex_image_2d_abv_ref.html b/tests/wpt/mozilla/tests/mozilla/webgl/tex_image_2d_abv_ref.html new file mode 100644 index 00000000000..1e84eb7846c --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/webgl/tex_image_2d_abv_ref.html @@ -0,0 +1,13 @@ +<!doctype html> +<meta charset="utf-8"> +<title>ref: WebGL: texImage2D with Array Buffer View</title> +<style> + html, body { margin: 0; padding: 0; } + div { + width: 512px; + height: 512px; + background: red; + } +</style> +<!-- This reftest should show a 512x512px red square --> +<div></div> diff --git a/tests/wpt/mozilla/tests/mozilla/window_resize_not_triggered_on_load.html b/tests/wpt/mozilla/tests/mozilla/window_resize_not_triggered_on_load.html new file mode 100644 index 00000000000..f551f67ee91 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/window_resize_not_triggered_on_load.html @@ -0,0 +1,28 @@ +<!doctype html> +<meta charset="utf-8"> +<link rel="author" title="Mozilla" href="https://www.mozilla.org/"> +<link rel="author" title="Michael Howell" href="https://www.notriddle.com/"> +<link rel="help" href="https://drafts.csswg.org/cssom-view/#resizing-viewports"> +<script> +<!-- This event handler needs to be registered before the first layout --> +var resize_run = false; +window.onresize = function() { + resize_run = true; +}; +</script> +<title>window.onresize should not be called when the window first loads</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=d></div> +<script> +var t = async_test("window.onresize should not be called when the window first loads"); +var d = document.getElementById("d"); +window.getComputedStyle(d, null).getPropertyValue("width"); +d.style.width = "1px"; +window.onload = function() { + t.step(function() { + assert_true(!resize_run); + t.done(); + }); +}; +</script> diff --git a/tests/wpt/web-platform-tests/DOMEvents/tests/approved/EventObject.after.dispatchEvent.html b/tests/wpt/web-platform-tests/DOMEvents/tests/approved/EventObject.after.dispatchEvent.html deleted file mode 100644 index d8ab8d4f26a..00000000000 --- a/tests/wpt/web-platform-tests/DOMEvents/tests/approved/EventObject.after.dispatchEvent.html +++ /dev/null @@ -1,44 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<title> Event.defaultPrevented is reset after dipatchEvent() </title> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -</head> -<body> -<div id=log></div> - -<input id="target" type="hidden" value=""/> - -<script> - var EVENT = "foo"; - var TARGET = document.getElementById("target"); - var PreState; - var PosState; - - var description = "Test Description: " + - "As the final step of the event dispatch, the implementation must reset the event " + - "object's default-action-prevention state. "; - - test(function() - { - var evt = document.createEvent("Event"); - evt.initEvent(EVENT, true, true); - - TARGET.addEventListener(EVENT, TestEvent, true); - TARGET.dispatchEvent(evt); - - PosState = evt.defaultPrevented; - - assert_array_equals([evt.target, PreState, PosState], [TARGET, true, false]); - - }, description); - - function TestEvent(evt) - { - evt.preventDefault(); - PreState = evt.defaultPrevented; - } -</script> -</body> -</html> diff --git a/tests/wpt/web-platform-tests/DOMEvents/tests/submissions/Microsoft/converted/EventObject.after.dispatchEvent.html b/tests/wpt/web-platform-tests/DOMEvents/tests/submissions/Microsoft/converted/EventObject.after.dispatchEvent.html deleted file mode 100644 index a2e44c9c8cf..00000000000 --- a/tests/wpt/web-platform-tests/DOMEvents/tests/submissions/Microsoft/converted/EventObject.after.dispatchEvent.html +++ /dev/null @@ -1,45 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<title> Event.defaultPrevented is reset after dipatchEvent() </title> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -</head> -<body> -<div id=log></div> - -<input id="target" type="hidden" value=""/> - -<script> - - var EVENT = "foo"; - var TARGET = document.getElementById("target"); - var PreState; - var PosState; - - var description = "Test Description: " + - "As the final step of the event dispatch, the implementation must reset the event " + - "object's default-action-prevention state. "; - - test(function() - { - var evt = document.createEvent("Event"); - evt.initEvent(EVENT, true, true); - - TARGET.addEventListener(EVENT, TestEvent, true); - TARGET.dispatchEvent(evt); - - PosState = evt.defaultPrevented; - - assert_array_equals([evt.target, PreState, PosState], [TARGET, true, false]); - - }, description); - - function TestEvent(evt) - { - evt.preventDefault(); - PreState = evt.defaultPrevented; - } -</script> -</body> -</html> diff --git a/tests/wpt/web-platform-tests/FileAPI/blob/Blob-constructor.html b/tests/wpt/web-platform-tests/FileAPI/blob/Blob-constructor.html index 799091d55ac..9c2b0a138c9 100644 --- a/tests/wpt/web-platform-tests/FileAPI/blob/Blob-constructor.html +++ b/tests/wpt/web-platform-tests/FileAPI/blob/Blob-constructor.html @@ -23,22 +23,28 @@ test(function() { assert_equals(String(blob), '[object Blob]'); assert_equals(blob.size, 0); assert_equals(blob.type, ""); -}, "no-argument Blob constructor"); +}, "Blob constructor with no arguments"); test(function() { assert_throws(new TypeError(), function() { var blob = Blob(); }); -}, "no-argument Blob constructor without 'new'"); +}, "Blob constructor with no arguments, without 'new'"); test(function() { var blob = new Blob; assert_true(blob instanceof Blob); assert_equals(blob.size, 0); assert_equals(blob.type, ""); -}, "no-argument Blob constructor without brackets"); +}, "Blob constructor without brackets"); +test(function() { + var blob = new Blob(undefined); + assert_true(blob instanceof Blob); + assert_equals(String(blob), '[object Blob]'); + assert_equals(blob.size, 0); + assert_equals(blob.type, ""); +}, "Blob constructor with undefined as first argument"); // blobParts argument (WebIDL). test(function() { var args = [ null, - undefined, true, false, 0, diff --git a/tests/wpt/web-platform-tests/FileAPI/blob/Blob-slice.html b/tests/wpt/web-platform-tests/FileAPI/blob/Blob-slice.html index a66136b10f1..0ecea79c8c7 100644 --- a/tests/wpt/web-platform-tests/FileAPI/blob/Blob-slice.html +++ b/tests/wpt/web-platform-tests/FileAPI/blob/Blob-slice.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <meta charset=utf-8> <title>Blob slice</title> -<link rel=help href="http://dev.w3.org/2006/webapi/FileAPI/#slice-method-algo"> +<link rel=help href="https://w3c.github.io/FileAPI/#slice-method-algo"> <link rel=author title="Saurabh Anand" href="mailto:saurabhanandiit@gmail.com"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> @@ -162,6 +162,23 @@ test(function() { var invalidTypes = [ "\xFF", + "te\x09xt/plain", + "te\x00xt/plain", + "te\x1Fxt/plain", + "te\x7Fxt/plain" +]; +invalidTypes.forEach(function(type) { + test_blob(function() { + var blob = new Blob(["PASS"]); + return blob.slice(0, 4, type); + }, { + expected: "PASS", + type: "", + desc: "Invalid contentType (" + format_value(type) + ")" + }); +}); + +var validTypes = [ "te(xt/plain", "te)xt/plain", "te<xt/plain", @@ -180,23 +197,6 @@ var invalidTypes = [ "te{xt/plain", "te}xt/plain", "te\x20xt/plain", - "te\x09xt/plain", - "te\x00xt/plain", - "te\x1Fxt/plain", - "te\x7Fxt/plain" -]; -invalidTypes.forEach(function(type) { - test_blob(function() { - var blob = new Blob(["PASS"]); - return blob.slice(0, 4, type); - }, { - expected: "PASS", - type: "", - desc: "Invalid contentType (" + format_value(type) + ")" - }); -}); - -var validTypes = [ "TEXT/PLAIN", "text/plain;charset = UTF-8", "text/plain;charset=UTF-8" diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/XMLHttpRequest-withCredentials.js b/tests/wpt/web-platform-tests/XMLHttpRequest/XMLHttpRequest-withCredentials.js index b9b4d653244..ea945e8ab8f 100644 --- a/tests/wpt/web-platform-tests/XMLHttpRequest/XMLHttpRequest-withCredentials.js +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/XMLHttpRequest-withCredentials.js @@ -16,15 +16,8 @@ function test_withCredentials(worker) { test(function() { var client = new XMLHttpRequest() client.open("GET", "resources/delay.py?ms=1000", false) - if (worker) { - client.withCredentials = true - assert_true(client.withCredentials, "set in OPEN state") - } else { - assert_throws("InvalidAccessError", function() { - client.withCredentials = true - }) - assert_false(client.withCredentials, "set in OPEN state") - } + client.withCredentials = true + assert_true(client.withCredentials, "set in OPEN state") }, "setting on synchronous XHR") async_test(function() { diff --git a/tests/wpt/web-platform-tests/ambient-light/AmbientLightSensor.js b/tests/wpt/web-platform-tests/ambient-light/AmbientLightSensor.js new file mode 100644 index 00000000000..5a1f8ea2ff5 --- /dev/null +++ b/tests/wpt/web-platform-tests/ambient-light/AmbientLightSensor.js @@ -0,0 +1,5 @@ +(function() { + test(function() { + assert_true(false); + }, 'Test suite not implemented yet.'); +})(); diff --git a/tests/wpt/web-platform-tests/ambient-light/AmbientLight_tests.html b/tests/wpt/web-platform-tests/ambient-light/AmbientLightSensor_tests.html index 3751574ae46..2008597152b 100644 --- a/tests/wpt/web-platform-tests/ambient-light/AmbientLight_tests.html +++ b/tests/wpt/web-platform-tests/ambient-light/AmbientLightSensor_tests.html @@ -2,10 +2,10 @@ <meta charset=utf8> <meta content=long name=timeout> <meta content="width=device-width, initial-scale=1" name=viewport> -<title>Ambient Light Events Test Suite</title> +<title>Ambient Light Sensor Test Suite</title> <link rel="help" href="http://www.w3.org/TR/ambient-light/"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> -<script src="DeviceLightEvent_tests.js"></script> +<script src="AmbientLightSensor.js"></script> <div id="log"></div> diff --git a/tests/wpt/web-platform-tests/ambient-light/DeviceLightEvent_tests.js b/tests/wpt/web-platform-tests/ambient-light/DeviceLightEvent_tests.js deleted file mode 100644 index af89cb45c3f..00000000000 --- a/tests/wpt/web-platform-tests/ambient-light/DeviceLightEvent_tests.js +++ /dev/null @@ -1,403 +0,0 @@ -(function() { - //inheritance tests - test(function() { - var event = new DeviceLightEvent(''); - assert_true(event instanceof window.DeviceLightEvent); - }, 'the event is an instance of DeviceLightEvent'); - - test(function() { - var event = new DeviceLightEvent(''); - assert_true(event instanceof window.Event); - }, 'the event inherits from Event'); - - //Type attribute tests - test(function() { - assert_throws(new TypeError(), function() { - new DeviceLightEvent(); - }, 'First argument is required, so was expecting a TypeError.'); - }, 'Missing type argument'); - - test(function() { - var event = new DeviceLightEvent(undefined); - assert_equals(event.type, 'undefined'); - }, 'Event type set to undefined'); - - test(function() { - var event = new DeviceLightEvent(null); - assert_equals(event.type, 'null'); - }, 'type argument is null'); - - test(function() { - var event = new DeviceLightEvent(123); - assert_equals(event.type, '123'); - }, 'type argument is number'); - - test(function() { - var event = new DeviceLightEvent(new Number(123)); - assert_equals(event.type, '123'); - }, 'type argument is Number'); - - test(function() { - var event = new DeviceLightEvent([]); - assert_equals(event.type, ''); - }, 'type argument is array'); - - test(function() { - var event = new DeviceLightEvent(new Array()); - assert_equals(event.type, ''); - }, 'type argument is instance of Array'); - - test(function() { - var event = new DeviceLightEvent(['t', ['e', ['s', ['t']]]]); - assert_equals(event.type, 't,e,s,t'); - }, 'type argument is nested array'); - - test(function() { - var event = new DeviceLightEvent(Math); - assert_equals(event.type, '[object Math]'); - }, 'type argument is host object'); - - test(function() { - var event = new DeviceLightEvent(true); - assert_equals(event.type, 'true'); - }, 'type argument is boolean (true)'); - - test(function() { - var event = new DeviceLightEvent(new Boolean(true)); - assert_equals(event.type, 'true'); - }, 'type argument is instance of Boolean (true)'); - - test(function() { - var event = new DeviceLightEvent(false); - assert_equals(event.type, 'false'); - }, 'type argument is boolean (false)'); - - test(function() { - var event = new DeviceLightEvent(new Boolean(false)); - assert_equals(event.type, 'false'); - }, 'type argument is instance of Boolean (false)'); - - test(function() { - var event = new DeviceLightEvent('test'); - assert_equals(event.type, 'test'); - }, 'type argument is string'); - - test(function() { - var event = new DeviceLightEvent(new String('test')); - assert_equals(event.type, 'test'); - }, 'type argument is instance of String'); - - test(function() { - var event = new DeviceLightEvent(function test() {}); - assert_regexp_match(event.type, /function test.+{\s?}/); - }, 'type argument is function'); - - test(function() { - var event = new DeviceLightEvent({ - toString: function() { - return '123'; - } - }); - assert_equals(event.type, '123'); - }, 'type argument is complex object, with toString method'); - - test(function() { - assert_throws(new TypeError(), function() { - new DeviceLightEvent({ - toString: function() { - return function() {} - } - }); - }); - }, 'toString is of type function'); - - //eventInitDict attribute tests - test(function() { - var event = new DeviceLightEvent('test', undefined); - assert_equals(event.value, Infinity); - }, 'eventInitDict argument sets to undefined'); - - test(function() { - var event = new DeviceLightEvent('test', null); - assert_equals(event.value, Infinity); - }, 'eventInitDict argument is null'); - - test(function() { - var date = new Date(); - assert_throws(new TypeError(), function() { - new DeviceLightEvent('test', date); - }); - }, 'eventInitDict argument is Date object'); - - test(function() { - var regexp = /abc/; - assert_throws(new TypeError(), function() { - new DeviceLightEvent('test', regexp); - }); - }, 'eventInitDict argument is RegExp object'); - - test(function() { - assert_throws(new TypeError(), function() { - new DeviceLightEvent('test', false); - }); - }, 'eventInitDict argument is boolean'); - - test(function() { - assert_throws(new TypeError(), function() { - new DeviceLightEvent('test', 123); - }); - }, 'eventInitDict argument is number'); - - test(function() { - assert_throws(new TypeError(), function() { - new DeviceLightEvent('test', 'hello'); - }); - }, 'eventInitDict argument is string'); - - //test readonly attribute double value; - test(function() { - var event = new DeviceLightEvent('test'); - assert_readonly(event, 'value', 'readonly attribute value'); - }, 'value is readonly'); - - test(function() { - var event = new DeviceLightEvent('test'); - assert_equals(event.value, Infinity); - }, 'value initializes to positive Infinity'); - - test(function() { - var event = new DeviceLightEvent('test', { - value: Infinity - }); - assert_equals(event.value, Infinity); - }, 'value set to positive Infinity'); - - test(function() { - var event = new DeviceLightEvent('test', { - value: -Infinity - }); - assert_equals(event.value, -Infinity); - }, 'value set to negative Infinity'); - - test(function() { - var event = new DeviceLightEvent('test', { - value: 0 - }); - assert_equals(event.value, 0); - }, 'value set to 0'); - - test(function() { - var event = new DeviceLightEvent('test', { - value: 1 - }); - assert_equals(event.value, 1); - }, 'value set to 1'); - - test(function() { - var event = new DeviceLightEvent('test', { - value: -1 - }); - assert_equals(event.value, -1); - }, 'value set to -1'); - - test(function() { - var event = new DeviceLightEvent('test', { - value: 0.5 - }); - assert_equals(event.value, 0.5); - }, 'value set to 0.5'); - - test(function() { - var event = new DeviceLightEvent('test', { - value: false - }); - assert_equals(event.value, 0, 'value set to false, converts to 0.'); - }, 'value set to false'); - - test(function() { - var event = new DeviceLightEvent('test', { - value: true - }); - assert_equals(event.value, 1, 'value set to true, converts to 1.'); - }, 'value set to true'); - - - test(function() { - var prop = { - value: undefined - }; - try { - var event = new DeviceLightEvent('test', prop); - assert_true(isNaN(event.value)); - } catch(e) { - assert_unreached('error message: ' + e.message); - } - }, 'value of undefined resolves to NaN'); - - test(function() { - var event = new DeviceLightEvent('test', { - value: null - }); - assert_equals(event.value, 0, 'value resolves to 0'); - }, 'value of null resolves to 0'); - - - test(function() { - var event = new DeviceLightEvent('test', { - value: '' - }); - assert_equals(event.value, 0, 'value must resolve to 0'); - }, 'value of empty string must resolve to 0'); - - test(function() { - var event = new DeviceLightEvent('test', { - value: '\u0020' - }); - assert_equals(event.value, 0, 'value must resolve to 0'); - }, 'value of U+0020 must resolve to 0'); - - test(function() { - var event = new DeviceLightEvent('test', { - value: '\u0020\u0020\u0020\u0020\u0020\u0020' - }); - assert_equals(event.value, 0, 'value must resolve to 0'); - }, 'value of multiple U+0020 must resolve to 0'); - - test(function() { - var event = new DeviceLightEvent('test', { - value: '\u0020\u0020\u00201234\u0020\u0020\u0020' - }); - assert_equals(event.value, 1234, 'converts to 1234'); - }, 'converts to 1234'); - - test(function() { - var event = new DeviceLightEvent('test', { - value: [] - }); - assert_equals(event.value, 0, 'converts to 0'); - }, 'converts to 0'); - - - test(function() { - var prop = { - value: {} - }; - try { - var event = new DeviceLightEvent('test', prop); - assert_true(isNaN(event.value)); - } catch(e) { - assert_unreached('error message: ' + e.message); - } - }, 'value of {} resolves to NaN'); - - test(function() { - var prop = { - get value() { - return NaN; - } - }; - try { - var event = new DeviceLightEvent('test', prop); - assert_true(isNaN(event.value)); - } catch(e) { - assert_unreached('error message: ' + e.message); - } - }, 'value resolves to NaN'); - - test(function() { - var prop = { - get value() { - return '123'; - } - }; - var event = new DeviceLightEvent('test', prop); - assert_equals(event.value, 123, 'converts to 123'); - }, 'value resolves 123'); - - //test attribute EventHandler ondevicelight; - test(function() { - var desc = 'window.ondevicelight did not accept callable object', - descidl = 'Expected to find ondevicelight attribute on window object', - func = function() {}; - assert_idl_attribute(window, 'ondevicelight', descidl); - window.ondevicelight = func; - assert_equals(window.ondevicelight, func, desc); - }, 'expected ondevicelight on window and to be set to function'); - - test(function() { - var desc = 'window.ondevicelight must be null'; - assert_equals(window.ondevicelight, null, desc); - }, 'ondevicelight is null'); - - test(function() { - var desc = 'window.ondevicelight did not treat noncallable as null'; - window.ondevicelight = function() {}; - window.ondevicelight = {}; - assert_equals(window.ondevicelight, null, desc); - }, 'treat object as null'); - - test(function() { - var desc = 'window.ondevicelight did not treat noncallable as null'; - window.ondevicelight = function() {}; - window.ondevicelight = { - call: 'test' - }; - assert_equals(window.ondevicelight, null, desc); - }, 'treat object with non-callable call property as null'); - - test(function() { - var desc = 'window.ondevicelight did not treat noncallable (string) as null'; - window.ondevicelight = function() {}; - window.ondevicelight = 'string'; - assert_equals(window.ondevicelight, null, desc); - }, 'treat string as null'); - - test(function() { - var desc = 'window.ondevicelight did not treat noncallable (number) as null'; - window.ondevicelight = function() {}; - window.ondevicelight = 123; - assert_equals(window.ondevicelight, null, desc); - }, 'treat number as null'); - - test(function() { - var desc = 'window.ondevicelight did not treat noncallable (undefined) as null'; - window.ondevicelight = function() {}; - window.ondevicelight = undefined; - assert_equals(window.ondevicelight, null, desc); - }, 'treat undefined as null'); - - test(function() { - var desc = 'window.ondevicelight did not treat noncallable (array) as null'; - window.ondevicelight = function() {}; - window.ondevicelight = []; - assert_equals(window.ondevicelight, null, desc); - }, 'treat array as null'); - - test(function() { - var desc = 'window.ondevicelight did not treat noncallable host object as null'; - window.ondevicelight = function() {}; - window.ondevicelight = window.Node; - assert_equals(window.ondevicelight, null, desc); - }, 'treat non-callable host object as null'); - - //Async tests - var t = async_test('test if DeviceLightEvent received'); - window.addEventListener('devicelight', function(e) { - t.step(function() { - var msg = 'expected instance of DeviceLightEvent: '; - assert_true(e instanceof window.DeviceLightEvent, msg); - assert_idl_attribute(e, 'value', 'event has value property'); - }); - t.done(); - }); - - var t2 = async_test('test if DeviceLightEvent received (event handler attribute)'); - window.ondevicelight = function(e) { - t2.step(function() { - var msg = 'expected instance of DeviceLightEvent: '; - assert_true(e instanceof window.DeviceLightEvent, msg); - assert_idl_attribute(e, 'value', 'event has value property'); - }); - t2.done(); - }; -})(); diff --git a/tests/wpt/web-platform-tests/ambient-light/OWNERS b/tests/wpt/web-platform-tests/ambient-light/OWNERS index 548c25a14da..d0b7f095c90 100644 --- a/tests/wpt/web-platform-tests/ambient-light/OWNERS +++ b/tests/wpt/web-platform-tests/ambient-light/OWNERS @@ -1,3 +1,5 @@ @zqzhang @Volker-E @dontcallmedom +@tobie +@riju diff --git a/tests/wpt/web-platform-tests/ambient-light/idlharness.html b/tests/wpt/web-platform-tests/ambient-light/idlharness.html index bcf22284c9c..c2ab2ea9c31 100644 --- a/tests/wpt/web-platform-tests/ambient-light/idlharness.html +++ b/tests/wpt/web-platform-tests/ambient-light/idlharness.html @@ -1,6 +1,6 @@ <!DOCTYPE html> <meta charset="utf-8"> -<title>Ambient Light Events IDL tests</title> +<title>Ambient Light Sensor IDL tests</title> <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="help" href="http://www.w3.org/TR/ambient-light/"> <script src="/resources/testharness.js"></script> @@ -14,46 +14,91 @@ </style> <div id="log"></div> -<pre id="untested_idl"> -[PrimaryGlobal] -interface Window { +<pre id="idl"> +interface Event { }; -interface Event { +interface Error { }; dictionary EventInit { }; </pre> -<pre id='idl'> -partial interface Window { - attribute EventHandler ondevicelight; +<pre id="generic-idl"> +interface Sensor : EventTarget { + readonly attribute SensorState state; + readonly attribute SensorReading? reading; + void start(); + void stop(); + attribute EventHandler onchange; + attribute EventHandler onstatechange; + attribute EventHandler onerror; +}; + +dictionary SensorOptions { + double? frequency; +}; + +enum SensorState { + "idle", + "activating", + "active", + "errored" }; -dictionary DeviceLightEventInit : EventInit { - unrestricted double value; +interface SensorReading { + readonly attribute DOMHighResTimeStamp timeStamp; }; -[Constructor (DOMString type, optional DeviceLightEventInit eventInitDict)] -interface DeviceLightEvent : Event { - readonly attribute unrestricted double value; +[Constructor(DOMString type, SensorReadingEventInit eventInitDict)] +interface SensorReadingEvent : Event { + readonly attribute SensorReading reading; }; + +dictionary SensorReadingEventInit : EventInit { + SensorReading reading; +}; + +[Constructor(DOMString type, SensorErrorEventInit errorEventInitDict)] +interface SensorErrorEvent : Event { + readonly attribute Error error; +}; + +dictionary SensorErrorEventInit : EventInit { + Error error; +}; +</pre> + +<pre id="ambient-light-idl"> +[Constructor(optional SensorOptions sensorOptions)] +interface AmbientLightSensor : Sensor { + readonly attribute AmbientLightSensorReading? reading; +}; + +[Constructor(AmbientLightSensorReadingInit ambientLightSensorReadingInit)] +interface AmbientLightSensorReading : SensorReading { + readonly attribute unrestricted double illuminance; +}; + +dictionary AmbientLightSensorReadingInit { + unrestricted double illuminance; +}; + </pre> <script> (function() { "use strict"; var idl_array = new IdlArray(); - // replace 'EventHandler' and 'unrestricted double' unrecognised by idlharness.js - var idls = document.getElementById('idl').textContent.replace(/EventHandler/g, 'Function?').replace(/unrestricted double/g, 'double'); - - idl_array.add_untested_idls(document.getElementById('untested_idl').textContent); - idl_array.add_idls(idls); + idl_array.add_untested_idls(document.getElementById('idl').textContent); + idl_array.add_untested_idls(document.getElementById('generic-idl').textContent); + idl_array.add_idls(document.getElementById('ambient-light-idl').textContent); idl_array.add_objects({ - Window: ['window'], - DeviceLightEvent: ['new DeviceLightEvent("foo")'] + AmbientLightSensor: ['new AmbientLightSensor();'], + AmbientLightSensorReading: ['new AmbientLightSensorReading({ illuminance: 750 });'], + SensorReadingEvent: ['new SensorReadingEvent({ reading: new AmbientLightSensorReading({ illuminance: 750 }) });'] }); idl_array.test(); diff --git a/tests/wpt/web-platform-tests/compat/webkit-text-fill-color-property-002-ref.html b/tests/wpt/web-platform-tests/compat/webkit-text-fill-color-property-002-ref.html new file mode 100644 index 00000000000..00c5072f85d --- /dev/null +++ b/tests/wpt/web-platform-tests/compat/webkit-text-fill-color-property-002-ref.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<meta charset="utf-8"> +<title>webkit-text-fill-color on selected text reference</title> +<link rel="author" title="Jeremy Chen" href="jeremychen@mozilla.com"> +<link rel="author" title="Mozilla" href="https://www.mozilla.org"> +<style> +p { + color: green; +} +</style> +<body onload="onload()"> +<p>Pass if color of <span id="selectMe">selected text</span> is green or inverted (depending on the platform convention), but not red</p> +<script type="text/javascript"> +function onload() { + var elt = document.getElementById("selectMe"); + var range = document.createRange(); + range.selectNode(elt); + window.getSelection().removeAllRanges(); + window.getSelection().addRange(range); + document.documentElement.classList.remove('reftest-wait'); +} +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/compat/webkit-text-fill-color-property-002.html b/tests/wpt/web-platform-tests/compat/webkit-text-fill-color-property-002.html new file mode 100644 index 00000000000..8ed14ccc83c --- /dev/null +++ b/tests/wpt/web-platform-tests/compat/webkit-text-fill-color-property-002.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<meta charset="utf-8"> +<title>webkit-text-fill-color should take effect while rendering selected text</title> +<link rel="author" title="Jeremy Chen" href="jeremychen@mozilla.com"> +<link rel="author" title="Mozilla" href="https://www.mozilla.org"> +<link rel="help" href="https://compat.spec.whatwg.org/#the-webkit-text-fill-color"> +<meta name="assert" content="The color of selected text should be green"> +<link rel="match" href="webkit-text-fill-color-property-002-ref.html"> +<style> +p { + color: red; + -webkit-text-fill-color: green; +} +</style> +<body onload="onload()"> +<p>Pass if color of <span id="selectMe">selected text</span> is green or inverted (depending on the platform convention), but not red</p> +<script type="text/javascript"> +function onload() { + var elt = document.getElementById("selectMe"); + var range = document.createRange(); + range.selectNode(elt); + window.getSelection().removeAllRanges(); + window.getSelection().addRange(range); + document.documentElement.classList.remove('reftest-wait'); +} +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/compat/webkit-text-fill-color-property-003-ref.html b/tests/wpt/web-platform-tests/compat/webkit-text-fill-color-property-003-ref.html new file mode 100644 index 00000000000..bbfd78e37ff --- /dev/null +++ b/tests/wpt/web-platform-tests/compat/webkit-text-fill-color-property-003-ref.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<meta charset="utf-8"> +<title>webkit-text-fill-color on ::-moz-selection selected text reference</title> +<link rel="author" title="Jeremy Chen" href="jeremychen@mozilla.com"> +<link rel="author" title="Mozilla" href="https://www.mozilla.org"> +<style> +::-moz-selection { + color: green; background: skyblue; +} +::selection { + color: green; background: skyblue; +} +</style> +<body onload="onload()"> +<p>Pass if color of <span id="selectMe">selected text</span> is green!!!</p> +<script type="text/javascript"> +function onload() { + var elt = document.getElementById("selectMe"); + var range = document.createRange(); + range.selectNode(elt); + window.getSelection().removeAllRanges(); + window.getSelection().addRange(range); + document.documentElement.classList.remove('reftest-wait'); +} +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/compat/webkit-text-fill-color-property-003.html b/tests/wpt/web-platform-tests/compat/webkit-text-fill-color-property-003.html new file mode 100644 index 00000000000..dcbd70b18f5 --- /dev/null +++ b/tests/wpt/web-platform-tests/compat/webkit-text-fill-color-property-003.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<meta charset="utf-8"> +<title>webkit-text-fill-color should take effect while rendering ::-moz-selection selected text</title> +<link rel="author" title="Jeremy Chen" href="jeremychen@mozilla.com"> +<link rel="author" title="Mozilla" href="https://www.mozilla.org"> +<link rel="help" href="https://compat.spec.whatwg.org/#the-webkit-text-fill-color"> +<meta name="assert" content="The color of selected text should be green"> +<link rel="match" href="webkit-text-fill-color-property-003-ref.html"> +<style> +::-moz-selection { + background: skyblue; + color: red; + -webkit-text-fill-color: green; +} +::selection { + background: skyblue; + color: red; + -webkit-text-fill-color: green; +} +</style> +<body onload="onload()"> +<p>Pass if color of <span id="selectMe">selected text</span> is green!!!</p> +<script type="text/javascript"> +function onload() { + var elt = document.getElementById("selectMe"); + var range = document.createRange(); + range.selectNode(elt); + window.getSelection().removeAllRanges(); + window.getSelection().addRange(range); + document.documentElement.classList.remove('reftest-wait'); +} +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/compat/webkit-text-fill-color-property-004-ref.html b/tests/wpt/web-platform-tests/compat/webkit-text-fill-color-property-004-ref.html new file mode 100644 index 00000000000..583cf9a358d --- /dev/null +++ b/tests/wpt/web-platform-tests/compat/webkit-text-fill-color-property-004-ref.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>webkit-text-fill-color on MathML reference</title> +<link rel="author" title="Jeremy Chen" href="jeremychen@mozilla.com"> +<link rel="author" title="Mozilla" href="https://www.mozilla.org"> +<style> +math { + font-size: 50px; + color: green; +} +</style> +<body> +<p>Pass if color of operators and operands are all green!!!</p> + <math> + <mrow> + <mrow> + <msup> + <mi>a</mi> + <mn>2</mn> + </msup> + <mo>+</mo> + <msup> + <mi>b</mi> + <mn>2</mn> + </msup> + </mrow> + <mo>=</mo> + <msup> + <mi>c</mi> + <mn>2</mn> + </msup> + </mrow> + </math> +</body> diff --git a/tests/wpt/web-platform-tests/compat/webkit-text-fill-color-property-004.html b/tests/wpt/web-platform-tests/compat/webkit-text-fill-color-property-004.html new file mode 100644 index 00000000000..739418d98e5 --- /dev/null +++ b/tests/wpt/web-platform-tests/compat/webkit-text-fill-color-property-004.html @@ -0,0 +1,38 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>webkit-text-fill-color should take effect while rendering MathML</title> +<link rel="author" title="Jeremy Chen" href="jeremychen@mozilla.com"> +<link rel="author" title="Mozilla" href="https://www.mozilla.org"> +<link rel="help" href="https://compat.spec.whatwg.org/#the-webkit-text-fill-color"> +<meta name="assert" content="The color of MathML should be green"> +<link rel="match" href="webkit-text-fill-color-property-004-ref.html"> +<style> +math { + font-size: 50px; + color: red; + -webkit-text-fill-color: green; +} +</style> +<body> +<p>Pass if color of operators and operands are all green!!!</p> + <math> + <mrow> + <mrow> + <msup> + <mi>a</mi> + <mn>2</mn> + </msup> + <mo>+</mo> + <msup> + <mi>b</mi> + <mn>2</mn> + </msup> + </mrow> + <mo>=</mo> + <msup> + <mi>c</mi> + <mn>2</mn> + </msup> + </mrow> + </math> +</body> diff --git a/tests/wpt/web-platform-tests/compat/webkit-text-fill-color-property-005-ref.html b/tests/wpt/web-platform-tests/compat/webkit-text-fill-color-property-005-ref.html new file mode 100644 index 00000000000..f173137fabf --- /dev/null +++ b/tests/wpt/web-platform-tests/compat/webkit-text-fill-color-property-005-ref.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>webkit-text-fill-color on text-decoration underline reference</title> +<link rel="author" title="Jeremy Chen" href="jeremychen@mozilla.com"> +<link rel="author" title="Mozilla" href="https://www.mozilla.org"> +<style type="text/css"> +p { + font-size: 50px; + text-decoration: underline; + color: green; +} +</style> +<div><p>Pass if text underline is green!!!</p></div> diff --git a/tests/wpt/web-platform-tests/compat/webkit-text-fill-color-property-005.html b/tests/wpt/web-platform-tests/compat/webkit-text-fill-color-property-005.html new file mode 100644 index 00000000000..b3549d68b17 --- /dev/null +++ b/tests/wpt/web-platform-tests/compat/webkit-text-fill-color-property-005.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>webkit-text-fill-color should take effect while rendering text-decoration underline</title> +<link rel="author" title="Jeremy Chen" href="jeremychen@mozilla.com"> +<link rel="author" title="Mozilla" href="https://www.mozilla.org"> +<link rel="help" href="https://compat.spec.whatwg.org/#the-webkit-text-fill-color"> +<meta name="assert" content="The color of text-decoration underline should be green"> +<link rel="match" href="webkit-text-fill-color-property-005-ref.html"> +<style type="text/css"> +p { + font-size: 50px; + text-decoration: underline; + color: red; + -webkit-text-fill-color: green; +} +</style> +<div><p>Pass if text underline is green!!!</p></div> diff --git a/tests/wpt/web-platform-tests/compat/webkit-text-fill-color-property-006-ref.html b/tests/wpt/web-platform-tests/compat/webkit-text-fill-color-property-006-ref.html new file mode 100644 index 00000000000..602d296bdb4 --- /dev/null +++ b/tests/wpt/web-platform-tests/compat/webkit-text-fill-color-property-006-ref.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>webkit-text-fill-color on text-overflow ellipsis reference</title> +<link rel="author" title="Jeremy Chen" href="jeremychen@mozilla.com"> +<link rel="author" title="Mozilla" href="https://www.mozilla.org"> +<style> +div { + font-size: 10px; + overflow: hidden; + text-overflow: ellipsis; + width: 150px; + color: green; +} +span { + font-family: Ahem; + font-size: 30px; +} +</style> +<body> +<p>Test passes if there is a <strong>green ellipsis</strong> after "TestChecks".</p> +<div> + <span>TestChecksThatTextColorAndEllipsisColorShouldBeTheSame</span> +</div> +</body> diff --git a/tests/wpt/web-platform-tests/compat/webkit-text-fill-color-property-006.html b/tests/wpt/web-platform-tests/compat/webkit-text-fill-color-property-006.html new file mode 100644 index 00000000000..4eb37e9e951 --- /dev/null +++ b/tests/wpt/web-platform-tests/compat/webkit-text-fill-color-property-006.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>webkit-text-fill-color should take effect while rendering text-overflow ellipsis</title> +<link rel="author" title="Jeremy Chen" href="jeremychen@mozilla.com"> +<link rel="author" title="Mozilla" href="https://www.mozilla.org"> +<link rel="help" href="https://compat.spec.whatwg.org/#the-webkit-text-fill-color"> +<meta name="assert" content="The color of text-overflow ellipsis should be green"> +<link rel="match" href="webkit-text-fill-color-property-006-ref.html"> +<style> +div { + font-size: 10px; + overflow: hidden; + text-overflow: ellipsis; + width: 150px; + color: red; + -webkit-text-fill-color: green; +} +span { + font-family: Ahem; + font-size: 30px; +} +</style> +<body> +<p>Test passes if there is a <strong>green ellipsis</strong> after "TestChecks".</p> +<div> + <span>TestChecksThatTextColorAndEllipsisColorShouldBeTheSame</span> +</div> +</body> diff --git a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/form-action-src-allowed.sub.html b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/form-action-src-allowed.sub.html index 57889e5966c..19cf6811c57 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/form-action-src-allowed.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/form-action-src-allowed.sub.html @@ -32,7 +32,7 @@ form-action 'self'; script-src 'self' 'unsafe-inline'; connect-src 'self'; <input type="text" name="fieldname" value="fieldvalue"> <input type="submit" id="submit" value="submit"> </form> - <p>Tests that allowed form actions work correctly. If this test passes, you will see a page indicating a form was POSTed.</p> + <p>Tests that allowed form actions work correctly.</p> <div id="log"></div> <script async defer src="../support/checkReport.sub.js?reportExists=false"></script> </body> diff --git a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/form-action-src-blocked.sub.html b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/form-action-src-blocked.sub.html index 33ce163af24..0960a8a02f2 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/form-action-src-blocked.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/form-action-src-blocked.sub.html @@ -31,7 +31,7 @@ form-action 'none'; script-src 'self' 'unsafe-inline'; connect-src 'self'; <input type="text" name="fieldname" value="fieldvalue"> <input type="submit" id="submit" value="submit"> </form> - <p>Tests that blocking form actions works correctly. If this test passes, a CSP violation will be generated, and will not see a page indicating a form was POSTed.</p> + <p>Tests that blocking form actions works correctly.</p> <div id="log"></div> <script async defer src="../support/checkReport.sub.js?reportExists=true&reportField=violated-directive&reportValue=form-action%20'none'"></script> diff --git a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/form-action-src-get-allowed.sub.html b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/form-action-src-get-allowed.sub.html index 2f2804b64bb..a7d3e584b83 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/form-action-src-get-allowed.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/form-action-src-get-allowed.sub.html @@ -33,7 +33,8 @@ form-action 'self'; script-src 'self' 'unsafe-inline'; connect-src 'self'; <input type="text" name="fieldname" value="fieldvalue"> <input type="submit" id="submit" value="submit"> </form> - <p>Tests that allowed form actions work correctly. If this test passes, you will see a page indicating a form was POSTed.</p> + <p>Tests that allowed form actions work correctly + with GET and a redirect.</p> <div id="log"></div> <script async defer src="../support/checkReport.sub.js?reportExists=false"></script> </body> diff --git a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/form-action-src-get-blocked.sub.html b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/form-action-src-get-blocked.sub.html index 559e159f057..0910eb41964 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/form-action-src-get-blocked.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/form-action-src-get-blocked.sub.html @@ -33,7 +33,8 @@ form-action 'none'; script-src 'self' 'unsafe-inline'; connect-src 'self'; <input type="text" name="fieldname" value="fieldvalue"> <input type="submit" id="submit" value="submit"> </form> - <p>Tests that allowed form actions work correctly. If this test passes, you will see a page indicating a form was POSTed.</p> + <p>Tests that disallowed form actions are blocked + with GET and redirects.</p> <div id="log"></div> <script async defer src="../support/checkReport.sub.js?reportExists=true&reportField=violated-directive&reportValue=form-action%20'none' "></script> diff --git a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/form-action-src-redirect-blocked.sub.html b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/form-action-src-redirect-blocked.sub.html index 1d9d5693ac1..e311817eb59 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/form-action-src-redirect-blocked.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/form-action-src-redirect-blocked.sub.html @@ -33,7 +33,7 @@ form-action 'self'; script-src 'self' 'unsafe-inline'; connect-src 'self'; <input type="text" name="fieldname" value="fieldvalue"> <input type="submit" id="submit" value="submit"> </form> - <p>Tests that blocking form redirect works correctly. If this test passes, a CSP violation will be generated, and will not see a page indicating a form was POSTed.</p> + <p>Tests that blocking a POST form with a redirect works correctly. If this test passes, a CSP violation will be generated.</p> <div id="log"></div> <script async defer src="../support/checkReport.sub.js?reportExists=true&reportField=violated-directive&reportValue=form-action%20'self'"></script> </body> diff --git a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/meta-outside-head.sub.html b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/meta-outside-head.sub.html index ac103981c3c..41618d4ef77 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/meta-outside-head.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/meta-outside-head.sub.html @@ -14,14 +14,14 @@ script-src 'self' 'unsafe-inline' 'none'; connect-src 'self'; </head> <body> - <meta http-equiv="Content-Security-Policy" content="script-src 'none'"> + <meta http-equiv="Content-Security-Policy" content="script-src 'self'"> <p>This test checks that Content Security Policy delivered via a meta element is not enforced if the element is outside the document's head.</p> <script> - alert_assert("PASS (1/1)"); - + var aa = "PASS (1/1)"; </script> + <script src="metaHelper.js"></script> <div id="log"></div> - <script async defer src="../support/checkReport.sub.js?reportExists=false"></script> + <script src="../support/checkReport.sub.js?reportExists=false"></script> </body> </html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/metaHelper.js b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/metaHelper.js new file mode 100644 index 00000000000..9191a39c73b --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/metaHelper.js @@ -0,0 +1,5 @@ +if (typeof aa != 'undefined') { + alert_assert(aa); +} else { + alert_assert("Failed - allowed inline script blocked by meta policy outside head."); +} diff --git a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/plugintypes-notype-data.sub.html b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/plugintypes-notype-data.sub.html index 59179c71615..eb60d5d4cff 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/plugintypes-notype-data.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/plugintypes-notype-data.sub.html @@ -6,7 +6,7 @@ <title>plugintypes-notype-data</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> - <script src='../support/logTest.sub.js?logs=["PASS"]'></script> + <script src='../support/logTest.sub.js?logs=["PASS: object tag onerror handler fired"]'></script> <script src="../support/alertAssert.sub.js?alerts=[]"></script> <!-- enforcing policy: plugin-types application/x-invalid-type; script-src 'self' 'unsafe-inline'; connect-src 'self'; @@ -15,7 +15,7 @@ plugin-types application/x-invalid-type; script-src 'self' 'unsafe-inline'; conn <body> Given a `plugin-types` directive, plugins have to declare a type explicitly. No declared type, no load. This test passes if there's a CSP report and "FAIL!" isn't logged. - <object data="data:application/x-webkit-test-netscape" onload="log('FAIL');" onerror="log('PASS');"></object> + <object data="data:application/x-webkit-test-netscape" onload="log('FAIL');" onerror="log('PASS: object tag onerror handler fired');"></object> <div id="log"></div> <script async defer src="../support/checkReport.sub.js?reportExists=true&reportField=violated-directive&reportValue=plugin-types+application/x-invalid-type"></script> </body> diff --git a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/scripthash-unicode-normalization.sub.html b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/scripthash-unicode-normalization.sub.html index 8a064c70172..bd1e0365c2e 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/scripthash-unicode-normalization.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/scripthash-unicode-normalization.sub.html @@ -7,7 +7,6 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> - </script> <!-- enforcing policy: script-src 'self' 'nonce-nonceynonce' 'sha256-dWTP4Di8KBjaiXvQ5mRquI9OoBSo921ahYxLfYSiuT8='; connect-src 'self'; --> @@ -34,12 +33,9 @@ script-src 'self' 'nonce-nonceynonce' 'sha256-dWTP4Di8KBjaiXvQ5mRquI9OoBSo921ahY var scriptContent2 = "window.finish('" + nonMatchingContent + "');"; var script1 = document.createElement('script'); - script1.innerHTML = scriptContent1; var script2 = document.createElement('script'); - script2.innerHTML = scriptContent2; - script1.test = async_test("Inline script with hash in CSP"); - script2.test = async_test("Inline script without hash in CSP"); + script1.test = async_test("Only matching content runs even with NFC normalization."); var failure = function() { assert_unreached(); @@ -51,16 +47,18 @@ script-src 'self' 'nonce-nonceynonce' 'sha256-dWTP4Di8KBjaiXvQ5mRquI9OoBSo921ahY script1.test.done(); }); } else { - assert_unreached(); + script1.test.step(function() { + assert_unreached("nonMatchingContent script ran"); + }); } } script1.onerror = failure; - script2.onerror = script2.test.step_func(function() { - script2.test.done(); - }); - document.body.appendChild(script1); + document.body.appendChild(script2); + script2.textContent = scriptContent2; + document.body.appendChild(script1); + script1.textContent = scriptContent1; </script> <p> diff --git a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/scriptnonce-basic-blocked.sub.html b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/scriptnonce-basic-blocked.sub.html index 18ad1d4f66c..4815ca10013 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/scriptnonce-basic-blocked.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/scriptnonce-basic-blocked.sub.html @@ -6,49 +6,16 @@ <title>scriptnonce-basic-blocked</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> - <script nonce='noncynonce'> - function log(msg) { - test(function() { - assert_unreached(msg) - }); - } - - </script> - <script nonce='noncynonce'> - var t_alert = async_test('Expecting alerts: ["PASS (1/2)","PASS (2/2)"]'); - var expected_alerts = ["PASS (1/2)", "PASS (2/2)"]; - - function alert_assert(msg) { - t_alert.step(function() { - if (msg.match(/^FAIL/i)) { - assert_unreached(msg); - t_alert.done(); - } - for (var i = 0; i < expected_alerts.length; i++) { - if (expected_alerts[i] == msg) { - assert_true(expected_alerts[i] == msg); - expected_alerts.splice(i, 1); - if (expected_alerts.length == 0) { - t_alert.done(); - } - return; - } - } - assert_unreached('unexpected alert: ' + msg); - t_log.done(); - }); - } - - </script> + <script src='../support/alertAssert.sub.js?alerts=["PASS (closely-quoted nonce)","PASS (nonce w/whitespace)"]'></script> <!-- enforcing policy: script-src 'self' 'unsafe-inline' 'nonce-noncynonce'; connect-src 'self'; --> <script nonce="noncynonce"> - alert_assert('PASS (1/2)'); + alert_assert('PASS (closely-quoted nonce)'); </script> <script nonce=" noncynonce "> - alert_assert('PASS (2/2)'); + alert_assert('PASS (nonce w/whitespace)'); </script> <script nonce="noncynonce noncynonce"> diff --git a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/stylehash-allowed.sub.html b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/stylehash-allowed.sub.html index be7ef1a8198..282b1850257 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/stylehash-allowed.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/stylehash-allowed.sub.html @@ -34,7 +34,7 @@ </script> <!-- enforcing policy: -style-src 'sha1-eYyYGmKWdhpUewohaXk9o8IaLSw=' 'sha256-hndjYvzUzy2Ykuad81Cwsl1FOXX/qYs/aDVyUyNZwBw=' 'sha384-bSVm1i3sjPBRM4TwZtYTDjk9JxZMExYHWbFmP1SxDhJH4ue0Wu9OPOkY5hcqRcSt' 'sha512-440MmBLtj9Kp5Bqloogn9BqGDylY8vFsv5/zXL1zH2fJVssCoskRig4gyM+9KqwvCSapSz5CVoUGHQcxv43UQg=='; script-src 'self' 'unsafe-inline'; connect-src 'self'; +style-src 'sha256-pAKi9r4/WB7fHydbE3F3t8i8602ij2JN8zHJpL2T5BM=' 'sha256-hndjYvzUzy2Ykuad81Cwsl1FOXX/qYs/aDVyUyNZwBw=' 'sha384-bSVm1i3sjPBRM4TwZtYTDjk9JxZMExYHWbFmP1SxDhJH4ue0Wu9OPOkY5hcqRcSt' 'sha512-440MmBLtj9Kp5Bqloogn9BqGDylY8vFsv5/zXL1zH2fJVssCoskRig4gyM+9KqwvCSapSz5CVoUGHQcxv43UQg=='; script-src 'self' 'unsafe-inline'; connect-src 'self'; --> </head> diff --git a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/stylehash-allowed.sub.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/stylehash-allowed.sub.html.sub.headers index 3f0aff7db89..2b519e85ec2 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/stylehash-allowed.sub.html.sub.headers +++ b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/stylehash-allowed.sub.html.sub.headers @@ -3,4 +3,4 @@ Cache-Control: no-store, no-cache, must-revalidate Cache-Control: post-check=0, pre-check=0, false Pragma: no-cache Set-Cookie: stylehash-allowed={{$id:uuid()}}; Path=/content-security-policy/blink-contrib-2 -Content-Security-Policy: style-src 'self' 'sha1-eYyYGmKWdhpUewohaXk9o8IaLSw=' 'sha256-hndjYvzUzy2Ykuad81Cwsl1FOXX/qYs/aDVyUyNZwBw=' 'sha384-bSVm1i3sjPBRM4TwZtYTDjk9JxZMExYHWbFmP1SxDhJH4ue0Wu9OPOkY5hcqRcSt' 'sha512-440MmBLtj9Kp5Bqloogn9BqGDylY8vFsv5/zXL1zH2fJVssCoskRig4gyM+9KqwvCSapSz5CVoUGHQcxv43UQg=='; script-src 'self' 'unsafe-inline'; connect-src 'self'; report-uri /content-security-policy/support/report.py?op=put&reportID={{$id}} +Content-Security-Policy: style-src 'self' 'sha256-pAKi9r4/WB7fHydbE3F3t8i8602ij2JN8zHJpL2T5BM=' 'sha256-hndjYvzUzy2Ykuad81Cwsl1FOXX/qYs/aDVyUyNZwBw=' 'sha384-bSVm1i3sjPBRM4TwZtYTDjk9JxZMExYHWbFmP1SxDhJH4ue0Wu9OPOkY5hcqRcSt' 'sha512-440MmBLtj9Kp5Bqloogn9BqGDylY8vFsv5/zXL1zH2fJVssCoskRig4gyM+9KqwvCSapSz5CVoUGHQcxv43UQg=='; script-src 'self' 'unsafe-inline'; connect-src 'self'; report-uri /content-security-policy/support/report.py?op=put&reportID={{$id}} diff --git a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib/connect-src-beacon-allowed.sub.html b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib/connect-src-beacon-allowed.sub.html index 0562e0fd547..2beb00d020c 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib/connect-src-beacon-allowed.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib/connect-src-beacon-allowed.sub.html @@ -15,16 +15,27 @@ connect-src 'self' http://{{host}}:{{ports[http][0]}}; script-src 'self' 'unsafe <body> <script> - try { - var es = navigator.sendBeacon("http://{{host}}:{{ports[http][0]}}/cors/resources/status.py"); - log("Pass"); - } catch (e) { - log("Fail"); - } + if (typeof navigator.sendBeacon != 'function') { + t_log.set_status(t_log.NOTRUN, "No navigator.sendBeacon, cannot run test."); + t_log.phase = t_log.phases.HAS_RESULT; + t_log.done(); + } else { + try { + var es = navigator.sendBeacon("http://{{host}}:{{ports[http][0]}}/cors/resources/status.py"); + log("Pass"); + } catch (e) { + log("Fail"); + } + var report = document.createElement("script"); + report.src = "../support/checkReport.sub.js?reportExists=false"; + report.async = true; + report.defer = true; + document.body.appendChild(report); + + } </script> <div id="log"></div> - <script async defer src="../support/checkReport.sub.js?reportExists=false"></script> </body> </html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib/connect-src-beacon-blocked.sub.html b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib/connect-src-beacon-blocked.sub.html index c459790d88a..fdde9e760b2 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib/connect-src-beacon-blocked.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib/connect-src-beacon-blocked.sub.html @@ -15,16 +15,26 @@ connect-src 'self' http://{{host}}:{{ports[http][0]}}; script-src 'self' 'unsafe <body> <script> - try { - var es = navigator.sendBeacon("http://www1.{{host}}:{{ports[http][0]}}/security/contentSecurityPolicy/echo-report.php"); - log("Fail"); - } catch (e) { - log("Pass"); - } + if (typeof navigator.sendBeacon != 'function') { + t_log.set_status(t_log.NOTRUN, "No navigator.sendBeacon, cannot run test."); + t_log.phase = t_log.phases.HAS_RESULT; + t_log.done(); + } else { + try { + var es = navigator.sendBeacon("http://www1.{{host}}:{{ports[http][0]}}/security/contentSecurityPolicy/echo-report.php"); + log("Fail"); + } catch (e) { + log("Pass"); + } + var report = document.createElement("script"); + report.src = "../support/checkReport.sub.js?reportExists=true&reportField=violated-directive&reportValue=connect-src%20'self'"; + report.async = true; + report.defer = true; + document.body.appendChild(report); + } </script> <div id="log"></div> - <script async defer src="../support/checkReport.sub.js?reportExists=true&reportField=violated-directive&reportValue=connect-src%20'self'"></script> </body> </html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib/connect-src-beacon-redirect-to-blocked.sub.html b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib/connect-src-beacon-redirect-to-blocked.sub.html index b60487bcef5..3d03100e366 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib/connect-src-beacon-redirect-to-blocked.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib/connect-src-beacon-redirect-to-blocked.sub.html @@ -18,13 +18,24 @@ connect-src 'self'; script-src 'self' 'unsafe-inline'; <p>The beacon should not follow the redirect to http://www1.{{host}}:{{ports[http][0]}}/content-security-policy/support/fail.png and send a CSP violation report.</p> <p>Verify that a CSP connect-src directive blocks redirects.</p> <script> - navigator.sendBeacon( - "/common/redirect.py?location=http://www1.{{host}}:{{ports[http][0]}}/content-security-policy/support/fail.png", - "ping"); + if (typeof navigator.sendBeacon != 'function') { + var t = async_test(); + t.set_status(t.NOTRUN, "No navigator.sendBeacon, cannot run test."); + t.phase = t.phases.HAS_RESULT; + t.done(); + } else { + navigator.sendBeacon( + "/common/redirect.py?location=http://www1.{{host}}:{{ports[http][0]}}/content-security-policy/support/fail.png", + "ping"); + var report = document.createElement("script"); + report.src = "../support/checkReport.sub.js?reportExists=true&reportField=violated-directive&reportValue=connect-src%20'self'"; + report.async = true; + report.defer = true; + document.body.appendChild(report); + } </script> <div id="log"></div> - <script async defer src="../support/checkReport.sub.js?reportExists=true&reportField=violated-directive&reportValue=connect-src%20'self'"></script> </body> </html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib/resources/worker-importscripts.js b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib/resources/worker-importscripts.js index ca9f2eca48e..65ec6f44624 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib/resources/worker-importscripts.js +++ b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib/resources/worker-importscripts.js @@ -2,5 +2,5 @@ try { importScripts("/content-security-policy/blink-contrib/resources/post-message.js"); postMessage("importScripts allowed"); } catch (e) { - postMessage("importScripts blocked: " + e); + postMessage("importScripts blocked"); } diff --git a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib/shared-worker-connect-src-allowed.sub.html b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib/shared-worker-connect-src-allowed.sub.html index 007d66c1fcb..17da111a84c 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib/shared-worker-connect-src-allowed.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib/shared-worker-connect-src-allowed.sub.html @@ -16,6 +16,11 @@ connect-src 'self' http://{{host}}:{{ports[http][0]}}; script-src 'self' 'unsafe <body> <script> + if(typeof SharedWorker != 'function') { + t_alert.set_status(t_alert.NOTRUN, "No SharedWorker, cannot run test."); + t_alert.phase = t_alert.phases.HAS_RESULT; + t_alert.done(); + } else { try { var worker = new SharedWorker('http://{{host}}:{{ports[http][0]}}/content-security-policy/blink-contrib/resources/shared-worker-make-xhr-allowed.sub.js'); worker.port.onmessage = function(event) { @@ -24,10 +29,15 @@ connect-src 'self' http://{{host}}:{{ports[http][0]}}; script-src 'self' 'unsafe } catch (e) { alert_assert(e); } + var report = document.createElement("script"); + report.src = "../support/checkReport.sub.js?reportExists=false"; + report.async = true; + report.defer = true; + document.body.appendChild(report); + } </script> <div id="log"></div> - <script async defer src="../support/checkReport.sub.js?reportExists=false"></script> </body> </html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib/shared-worker-connect-src-blocked.sub.html b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib/shared-worker-connect-src-blocked.sub.html index f049b933632..63225bf275e 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib/shared-worker-connect-src-blocked.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib/shared-worker-connect-src-blocked.sub.html @@ -22,6 +22,11 @@ connect-src *; script-src 'self' 'unsafe-inline'; should be sent since the worker's policy doesn't specify a report-uri.</p> <script> + if(typeof SharedWorker != 'function') { + t_alert.set_status(t_alert.NOTRUN, "No SharedWorker, cannot run test."); + t_alert.phase = t_alert.phases.HAS_RESULT; + t_alert.done(); + } else { try { var worker = new SharedWorker('http://{{host}}:{{ports[http][0]}}/content-security-policy/blink-contrib/resources/shared-worker-make-xhr-blocked.sub.js'); worker.port.onmessage = function(event) { @@ -30,10 +35,16 @@ connect-src *; script-src 'self' 'unsafe-inline'; } catch (e) { alert_assert(e); } + var report = document.createElement("script"); + report.src = "../support/checkReport.sub.js?reportExists=false"; + report.async = true; + report.defer = true; + document.body.appendChild(report); + } + </script> <div id="log"></div> - <script async defer src="../support/checkReport.sub.js?reportExists=false"></script> </body> </html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib/worker-importscripts-blocked.sub.html b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib/worker-importscripts-blocked.sub.html index d3240e385de..9ec49c03025 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib/worker-importscripts-blocked.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib/worker-importscripts-blocked.sub.html @@ -23,7 +23,7 @@ script-src 'self' 'unsafe-inline' 'unsafe-eval' 'unsafe-inline' 127.0.0.1:8000; worker.onmessage = function(event) { result = event.data; test(function() { - assert_equals(result, 'importScripts blocked: NetworkError: Failed to execute \'importScripts\' on \'WorkerGlobalScope\': The script at \'http://{{host}}:{{ports[http][0]}}/content-security-policy/blink-contrib/resources/post-message.js\' failed to load.') + assert_equals(result, 'importScripts blocked') }); log("TEST COMPLETE"); }; diff --git a/tests/wpt/web-platform-tests/content-security-policy/child-src/child-src-worker-blocked.sub.html b/tests/wpt/web-platform-tests/content-security-policy/child-src/child-src-worker-blocked.sub.html index d8908b17b3d..8ed6b157a81 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/child-src/child-src-worker-blocked.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/child-src/child-src-worker-blocked.sub.html @@ -17,6 +17,10 @@ child-src 'none'; script-src 'self' 'unsafe-inline' 'unsafe-inline'; connect-src <script> try { var foo = new Worker('http://{{host}}:{{ports[http][0]}}/content-security-policy/blink-contrib/resources/post-message.js'); + foo.onerror = function(event) { + event.preventDefault(); + alert_assert("PASS"); + } foo.onmessage = function(event) { alert_assert("FAIL"); }; diff --git a/tests/wpt/web-platform-tests/content-security-policy/media-src/media-src-7_3_2.html b/tests/wpt/web-platform-tests/content-security-policy/media-src/media-src-7_3_2.html index c93af3b80c1..597ac7f8fa7 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/media-src/media-src-7_3_2.html +++ b/tests/wpt/web-platform-tests/content-security-policy/media-src/media-src-7_3_2.html @@ -52,10 +52,17 @@ source_test.step(function() { source_test.set_status(source_test.FAIL); }); + + setTimeout(function() { + if(source_test.phase != source_test.phases.COMPLETE) { + source_test.step( function () { assert_unreached("Onerror event never fired for track element."); }); + source_test.done(); + } + }, 2 * 1000); </script> <script async defer src="../support/checkReport.sub.js?reportField=violated-directive&reportValue=media-src%20%27self%27"> </script> </body> -</html>
\ No newline at end of file +</html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/media-src/media-src-redir-bug.sub.html b/tests/wpt/web-platform-tests/content-security-policy/media-src/media-src-redir-bug.sub.html index f12f8ffc56f..b8351193041 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/media-src/media-src-redir-bug.sub.html +++ b/tests/wpt/web-platform-tests/content-security-policy/media-src/media-src-redir-bug.sub.html @@ -55,8 +55,8 @@ </video> <video id="videoObject2" width="320" height="240" controls - onerror="media_error_handler(src_test)" - onloadeddata="media_loaded(src_test)" + onerror="media_error_handler(src_redir_test)" + onloadeddata="media_loaded(src_redir_test)" src="/common/redirect.py?location=http://www2.{{host}}:{{ports[http][0]}}/media/white.mp4"> <script async defer src="../support/checkReport.sub.js?reportExists=false"> diff --git a/tests/wpt/web-platform-tests/content-security-policy/support/alertAssert.sub.js b/tests/wpt/web-platform-tests/content-security-policy/support/alertAssert.sub.js index 6ca2849ca31..607d0d4212c 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/support/alertAssert.sub.js +++ b/tests/wpt/web-platform-tests/content-security-policy/support/alertAssert.sub.js @@ -1,5 +1,9 @@ // note, this template substitution is XSS, but no way to avoid it in this framework var expected_alerts = {{GET[alerts]}}; +var timeout= "{{GET[timeout]}}"; +if (timeout == "") { + timeout = 2; +} if(expected_alerts.length == 0) { function alert_assert(msg) { @@ -7,7 +11,13 @@ if(expected_alerts.length == 0) { } } else { var t_alert = async_test('Expecting alerts: {{GET[alerts]}}'); - function alert_assert(msg) { + setTimeout(function() { + if(t_alert.phase != t_alert.phases.COMPLETE) { + t_alert.step(function() { assert_unreached('Alert timeout, expected alerts ' + expected_alerts + ' not fired.') }); + t_alert.done(); + } + }, timeout * 100); + var alert_assert = function (msg) { t_alert.step(function () { if(msg && msg instanceof Error) { msg = msg.message; @@ -29,5 +39,5 @@ if(expected_alerts.length == 0) { assert_unreached('unexpected alert: ' + msg); t_log.done(); }); - } + }.bind(this); } diff --git a/tests/wpt/web-platform-tests/content-security-policy/support/logTest.sub.js b/tests/wpt/web-platform-tests/content-security-policy/support/logTest.sub.js index d797475d2a6..6bbdb43f72d 100644 --- a/tests/wpt/web-platform-tests/content-security-policy/support/logTest.sub.js +++ b/tests/wpt/web-platform-tests/content-security-policy/support/logTest.sub.js @@ -1,5 +1,9 @@ // note, this template substitution is XSS, but no way to avoid it in this framework var expected_logs = {{GET[logs]}}; +var timeout = "{{GET[timeout]}}"; +if (timeout == "") { + timeout = 2; +} if (expected_logs.length == 0) { function log_assert(msg) { @@ -7,6 +11,12 @@ if (expected_logs.length == 0) { } } else { var t_log = async_test('Expecting logs: {{GET[logs]}}'); + setTimeout(function() { + if(t_log.phase != t_log.phases.COMPLETE){ + t_log.step(function () { assert_unreached('Logging timeout, expected logs ' + expected_logs + ' not sent.') }); + t_log.done(); + } + }, timeout * 1000); function log(msg) { //cons/**/ole.log(msg); t_log.step(function () { diff --git a/tests/wpt/web-platform-tests/cors/credentials-flag.htm b/tests/wpt/web-platform-tests/cors/credentials-flag.htm index e37234e318e..42b37953ca4 100644 --- a/tests/wpt/web-platform-tests/cors/credentials-flag.htm +++ b/tests/wpt/web-platform-tests/cors/credentials-flag.htm @@ -17,12 +17,6 @@ var url = CROSSDOMAIN + 'resources/cors-cookie.py?ident=' * widthCredentials */ // XXX Do some https tests here as well -test(function () { - var client = new XMLHttpRequest() - client.open('GET', CROSSDOMAIN, false) - assert_throws(null, function() { client.withCredentials = true; }, 'setting withCredentials') -}, 'Setting withCredentials on a sync XHR object should throw') - async_test(function () { var id = new Date().getTime() + '_1', client = new XMLHttpRequest() diff --git a/tests/wpt/web-platform-tests/cssom-view/elementScroll.html b/tests/wpt/web-platform-tests/cssom-view/elementScroll.html new file mode 100644 index 00000000000..6227d665457 --- /dev/null +++ b/tests/wpt/web-platform-tests/cssom-view/elementScroll.html @@ -0,0 +1,89 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>cssom-view - elementScroll</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> + section { + width: 300px; + height: 300px; + /*position: absolute;*/ + top: 16px; + left: 16px; + border: inset gray 3px; + overflow: scroll; + background: white; + } + + div { + width: 400px; + } + +</style> + +<section id="section"> + <div> + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc ultricies tortor eu augue eleifend malesuada. Duis id condimentum urna. Duis vulputate urna a dignissim sodales. Aenean et magna id dui rutrum suscipit. Etiam metus mauris, congue ac suscipit dapibus, mattis non neque. Donec porttitor eros sed mauris tristique, non condimentum augue feugiat. Suspendisse iaculis faucibus nunc at porttitor. Integer convallis enim in feugiat molestie. Ut eget tincidunt mi, vel malesuada lectus. Quisque fermentum neque a sapien interdum consectetur. Nam tincidunt leo sit amet tortor ornare, sit amet ultrices ante semper. Fusce malesuada mi vitae venenatis sagittis. Duis eget urna quam. + + Sed lacinia aliquam tortor quis elementum. Cras vitae mauris erat. Vestibulum posuere justo et dolor condimentum feugiat. Sed at magna nunc. Suspendisse est nunc, ultrices sed enim lobortis, vulputate rutrum mauris. Fusce ultrices eget erat blandit porta. Sed eros nulla, tristique eget porta a, viverra vel velit. Praesent sit amet odio eleifend, tempor arcu ut, elementum tellus. Suspendisse lorem tortor, sodales eget nulla a, rhoncus lobortis magna. Phasellus purus ante, rhoncus a ipsum nec, condimentum lacinia purus. Cras lobortis posuere nisi, vitae dapibus ante feugiat et. Quisque ornare nisi quis erat congue viverra. Vestibulum a nunc odio. + + Sed id venenatis tortor. Curabitur sit amet mauris eget mi semper rutrum vel et odio. Phasellus eu sapien in sem ultricies pretium eu sit amet magna. Nulla finibus nec lorem ac semper. Nulla eleifend eros id fringilla pellentesque. Proin eleifend, sem vel lobortis viverra, massa augue viverra felis, quis ultricies sapien ipsum at magna. Duis rutrum tempus lobortis. Aliquam quis nulla eget velit viverra pretium. Maecenas venenatis nec nisl at pulvinar. Duis in sodales lectus, ac porta augue. + + Sed sed ante aliquam, rutrum nisl quis, fermentum tellus. Proin ac leo molestie, euismod mauris sed, consequat nunc. Vivamus ut leo a nunc pharetra accumsan a non lorem. Aliquam iaculis mattis augue, in eleifend est accumsan vel. Pellentesque efficitur pulvinar leo vel ornare. Pellentesque non fermentum enim, ut efficitur elit. Duis risus quam, congue vel nulla a, blandit egestas erat. Suspendisse at sodales dolor. Vivamus auctor, lorem et ultrices venenatis, erat ex mollis nisi, quis maximus libero quam a libero. + + Curabitur elit lacus, bibendum non tempus a, bibendum sit amet ante. Mauris eget nibh quis leo rhoncus consequat. Integer iaculis sed sapien eu pellentesque. In aliquet elementum lorem, ut consequat elit ultrices id. Phasellus vestibulum ex ex, ac sagittis tortor convallis et. Curabitur placerat id lectus at aliquam. Morbi sed nisl sem. Nam sit amet arcu maximus, volutpat nisl ac, dignissim neque. Etiam nec efficitur libero. Quisque tristique pulvinar est, eget dictum ex vehicula non. Nam dignissim non felis a iaculis. Nullam vel dolor vitae libero aliquet congue. Donec mi eros, semper non lectus at, commodo ullamcorper ligula. Donec commodo, sem vel lacinia porttitor, elit orci maximus felis, eget eleifend est velit id lorem. + </div> +</section> + +<script> + setup({explicit_done:true}); + window.onload = function () { + var section = document.getElementById("section"); + + test(function () { + assert_equals(section.scrollTop, 0, "initial scrollTop should be 0"); + assert_equals(section.scrollLeft, 0, "initial scrollLeft should be 0"); + + section.scrollTop = 30; + section.scrollLeft = 40; + + assert_equals(section.scrollTop, 30, "changed scrollTop should be 40"); + assert_equals(section.scrollLeft, 40, "changed scrollLeft should be 40"); + }, "Element scrollTop/Left getter/setter test"); + + test(function () { + section.scroll(50, 60); + + assert_equals(section.scrollLeft, 50, "changed scrollLeft should be 60"); + assert_equals(section.scrollTop, 60, "changed scrollTop should be 50"); + }, "Element scroll test"); + + test(function () { + section.scrollTo(80, 70); + + assert_equals(section.scrollLeft, 80, "changed scrollLeft should be 70"); + assert_equals(section.scrollTop, 70, "changed scrollTop should be 80"); + }, "Element scrollTo test"); + + test(function () { + var left = section.scrollLeft; + var top = section.scrollTop; + + section.scrollBy(10, 20); + + assert_equals(section.scrollLeft, left + 10, "increment of scrollLeft should be 10") + assert_equals(section.scrollTop, top + 20, "increment of scrollTop should be 20") + }) + + test(function () { + section.scrollTop = 1000; + section.scrollLeft = 1000; + + assert_equals(section.scrollTop, 636, "changed scrollTop should be 636"); + assert_equals(section.scrollLeft, 100, "changed scrollLeft should be 100"); + + }, "Element scroll maximum test"); + + done(); + }; +</script> diff --git a/tests/wpt/web-platform-tests/dom/events/Event-constructors.html b/tests/wpt/web-platform-tests/dom/events/Event-constructors.html index 25cbdc4aeaf..a3cd3f80cb8 100644 --- a/tests/wpt/web-platform-tests/dom/events/Event-constructors.html +++ b/tests/wpt/web-platform-tests/dom/events/Event-constructors.html @@ -42,17 +42,8 @@ test(function() { assert_true("initEvent" in ev) }) test(function() { - var ev = Event("test") - assert_equals(ev.type, "test") - assert_equals(ev.target, null) - assert_equals(ev.currentTarget, null) - assert_equals(ev.eventPhase, Event.NONE) - assert_equals(ev.bubbles, false) - assert_equals(ev.cancelable, false) - assert_equals(ev.defaultPrevented, false) - assert_equals(ev.isTrusted, false) - assert_true(ev.timeStamp > 0) - assert_true("initEvent" in ev) + assert_throws(new TypeError(), function() { Event("test") }, + 'Calling Event constructor without "new" must throw'); }) test(function() { var ev = new Event("I am an event", { bubbles: true, cancelable: false}) diff --git a/tests/wpt/web-platform-tests/dom/events/Event-defaultPrevented-after-dispatch.html b/tests/wpt/web-platform-tests/dom/events/Event-defaultPrevented-after-dispatch.html new file mode 100644 index 00000000000..decf7e9927f --- /dev/null +++ b/tests/wpt/web-platform-tests/dom/events/Event-defaultPrevented-after-dispatch.html @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Event.defaultPrevented is not reset after dipatchEvent()</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +</head> +<body> +<div id=log></div> +<input id="target" type="hidden" value=""/> +<script> +test(function() { + var EVENT = "foo"; + var TARGET = document.getElementById("target"); + var evt = document.createEvent("Event"); + evt.initEvent(EVENT, true, true); + + TARGET.addEventListener(EVENT, this.step_func(function(e) { + e.preventDefault(); + assert_true(e.defaultPrevented, "during dispatch"); + }), true); + TARGET.dispatchEvent(evt); + + assert_true(evt.defaultPrevented, "after dispatch"); + assert_equals(evt.target, TARGET); +}); +</script> diff --git a/tests/wpt/web-platform-tests/dom/events/ProgressEvent.html b/tests/wpt/web-platform-tests/dom/events/ProgressEvent.html index 2b2f7bc51b7..aa947e3f2ce 100644 --- a/tests/wpt/web-platform-tests/dom/events/ProgressEvent.html +++ b/tests/wpt/web-platform-tests/dom/events/ProgressEvent.html @@ -18,8 +18,8 @@ test(function() { assert_true("initEvent" in ev) }, "Default event values.") test(function() { - assert_throws("NotSupportedError", function() { - document.createEvent("ProgressEvent") - }) -}, "document.createEvent() should not work with ProgressEvent.") + var e = document.createEvent("ProgressEvent"); + var eProto = Object.getPrototypeOf(e); + assert_equals(eProto, ProgressEvent.prototype); +}, "document.createEvent() should work with ProgressEvent."); </script> diff --git a/tests/wpt/web-platform-tests/dom/interfaces.html b/tests/wpt/web-platform-tests/dom/interfaces.html index 45dd97e2f50..63546b83c0b 100644 --- a/tests/wpt/web-platform-tests/dom/interfaces.html +++ b/tests/wpt/web-platform-tests/dom/interfaces.html @@ -42,6 +42,7 @@ dictionary EventInit { boolean cancelable = false; }; + [Constructor(DOMString type, optional CustomEventInit eventInitDict)/*, Exposed=(Window,Worker)*/] interface CustomEvent : Event { @@ -54,10 +55,11 @@ dictionary CustomEventInit : EventInit { any detail = null; }; + //[Exposed=(Window,Worker)] interface EventTarget { - void addEventListener(DOMString type, EventListener? callback, optional boolean capture = false); - void removeEventListener(DOMString type, EventListener? callback, optional boolean capture = false); + void addEventListener(DOMString type, EventListener? callback, optional (EventListenerOptions or boolean) options); + void removeEventListener(DOMString type, EventListener? callback, optional (EventListenerOptions or boolean) options); boolean dispatchEvent(Event event); }; @@ -65,25 +67,40 @@ callback interface EventListener { void handleEvent(Event event); }; -[NoInterfaceObject] +dictionary EventListenerOptions { + boolean capture; + boolean passive; +}; + + +[NoInterfaceObject, + Exposed=Window] interface NonElementParentNode { Element? getElementById(DOMString elementId); }; Document implements NonElementParentNode; DocumentFragment implements NonElementParentNode; -[NoInterfaceObject] + +[NoInterfaceObject, + Exposed=Window] +interface DocumentOrShadowRoot { +}; +Document implements DocumentOrShadowRoot; +ShadowRoot implements DocumentOrShadowRoot; + + +[NoInterfaceObject, + Exposed=Window] interface ParentNode { [SameObject] readonly attribute HTMLCollection children; readonly attribute Element? firstElementChild; readonly attribute Element? lastElementChild; readonly attribute unsigned long childElementCount; - [Unscopeable] void prepend((Node or DOMString)... nodes); - [Unscopeable] void append((Node or DOMString)... nodes); + [Unscopable] void prepend((Node or DOMString)... nodes); + [Unscopable] void append((Node or DOMString)... nodes); - [Unscopeable] Element? query(DOMString relativeSelectors); - [NewObject, Unscopeable] Elements queryAll(DOMString relativeSelectors); Element? querySelector(DOMString selectors); [NewObject] NodeList querySelectorAll(DOMString selectors); }; @@ -91,7 +108,9 @@ Document implements ParentNode; DocumentFragment implements ParentNode; Element implements ParentNode; -[NoInterfaceObject] + +[NoInterfaceObject, + Exposed=Window] interface NonDocumentTypeChildNode { readonly attribute Element? previousElementSibling; readonly attribute Element? nextElementSibling; @@ -99,37 +118,45 @@ interface NonDocumentTypeChildNode { Element implements NonDocumentTypeChildNode; CharacterData implements NonDocumentTypeChildNode; -[NoInterfaceObject] + +[NoInterfaceObject, + Exposed=Window] interface ChildNode { - [Unscopeable] void before((Node or DOMString)... nodes); - [Unscopeable] void after((Node or DOMString)... nodes); - [Unscopeable] void replaceWith((Node or DOMString)... nodes); - [Unscopeable] void remove(); + [Unscopable] void before((Node or DOMString)... nodes); + [Unscopable] void after((Node or DOMString)... nodes); + [Unscopable] void replaceWith((Node or DOMString)... nodes); + [Unscopable] void remove(); }; DocumentType implements ChildNode; Element implements ChildNode; CharacterData implements ChildNode; -// XXX unrecognized tokens "class", "extends" -// https://www.w3.org/Bugs/Public/show_bug.cgi?id=20020 -// https://www.w3.org/Bugs/Public/show_bug.cgi?id=23225 -//class Elements extends Array { -// Element? query(DOMString relativeSelectors); -// Elements queryAll(DOMString relativeSelectors); -//}; +[NoInterfaceObject, + Exposed=Window] +interface Slotable { + readonly attribute HTMLSlotElement? assignedSlot; +}; +Element implements Slotable; +Text implements Slotable; + + +[Exposed=Window] interface NodeList { getter Node? item(unsigned long index); readonly attribute unsigned long length; // iterable<Node>; }; + +[Exposed=Window, LegacyUnenumerableNamedProperties] interface HTMLCollection { readonly attribute unsigned long length; getter Element? item(unsigned long index); getter Element? namedItem(DOMString name); }; + [Constructor(MutationCallback callback)] interface MutationObserver { void observe(Node target, MutationObserverInit options); @@ -149,9 +176,11 @@ dictionary MutationObserverInit { sequence<DOMString> attributeFilter; }; + +[Exposed=Window] interface MutationRecord { readonly attribute DOMString type; - readonly attribute Node target; + [SameObject] readonly attribute Node target; [SameObject] readonly attribute NodeList addedNodes; [SameObject] readonly attribute NodeList removedNodes; readonly attribute Node? previousSibling; @@ -161,6 +190,8 @@ interface MutationRecord { readonly attribute DOMString? oldValue; }; + +[Exposed=Window] interface Node : EventTarget { const unsigned short ELEMENT_NODE = 1; const unsigned short ATTRIBUTE_NODE = 2; // historical @@ -177,8 +208,9 @@ interface Node : EventTarget { readonly attribute unsigned short nodeType; readonly attribute DOMString nodeName; - readonly attribute DOMString? baseURI; + readonly attribute DOMString baseURI; + readonly attribute boolean isConnected; readonly attribute Document? ownerDocument; readonly attribute Node rootNode; readonly attribute Node? parentNode; @@ -195,7 +227,8 @@ interface Node : EventTarget { void normalize(); [NewObject] Node cloneNode(optional boolean deep = false); - boolean isEqualNode(Node? node); + boolean isEqualNode(Node? otherNode); + boolean isSameNode(Node? otherNode); // historical alias of === const unsigned short DOCUMENT_POSITION_DISCONNECTED = 0x01; const unsigned short DOCUMENT_POSITION_PRECEDING = 0x02; @@ -216,7 +249,9 @@ interface Node : EventTarget { Node removeChild(Node child); }; -[Constructor] + +[Constructor, + Exposed=Window] interface Document : Node { [SameObject] readonly attribute DOMImplementation implementation; readonly attribute DOMString URL; @@ -224,18 +259,18 @@ interface Document : Node { readonly attribute DOMString origin; readonly attribute DOMString compatMode; readonly attribute DOMString characterSet; - readonly attribute DOMString charset; // legacy alias of .characterSet - readonly attribute DOMString inputEncoding; // legacy alias of .characterSet + readonly attribute DOMString charset; // historical alias of .characterSet + readonly attribute DOMString inputEncoding; // historical alias of .characterSet readonly attribute DOMString contentType; readonly attribute DocumentType? doctype; readonly attribute Element? documentElement; - HTMLCollection getElementsByTagName(DOMString localName); + HTMLCollection getElementsByTagName(DOMString qualifiedName); HTMLCollection getElementsByTagNameNS(DOMString? namespace, DOMString localName); HTMLCollection getElementsByClassName(DOMString classNames); - [NewObject] Element createElement(DOMString localName); - [NewObject] Element createElementNS(DOMString? namespace, DOMString qualifiedName); + [NewObject] Element createElement(DOMString localName, optional ElementCreationOptions options); + [NewObject] Element createElementNS(DOMString? namespace, DOMString qualifiedName, optional ElementCreationOptions options); [NewObject] DocumentFragment createDocumentFragment(); [NewObject] Text createTextNode(DOMString data); [NewObject] Comment createComment(DOMString data); @@ -245,7 +280,7 @@ interface Document : Node { Node adoptNode(Node node); [NewObject] Attr createAttribute(DOMString localName); - [NewObject] Attr createAttributeNS(DOMString? namespace, DOMString name); + [NewObject] Attr createAttributeNS(DOMString? namespace, DOMString qualifiedName); [NewObject] Event createEvent(DOMString interface); @@ -256,8 +291,15 @@ interface Document : Node { [NewObject] TreeWalker createTreeWalker(Node root, optional unsigned long whatToShow = 0xFFFFFFFF, optional NodeFilter? filter = null); }; +[Exposed=Window] interface XMLDocument : Document {}; +dictionary ElementCreationOptions { + DOMString is; +}; + + +[Exposed=Window] interface DOMImplementation { [NewObject] DocumentType createDocumentType(DOMString qualifiedName, DOMString publicId, DOMString systemId); [NewObject] XMLDocument createDocument(DOMString? namespace, [TreatNullAs=EmptyString] DOMString qualifiedName, optional DocumentType? doctype = null); @@ -266,16 +308,31 @@ interface DOMImplementation { boolean hasFeature(); // useless; always returns true }; -[Constructor] -interface DocumentFragment : Node { -}; +[Exposed=Window] interface DocumentType : Node { readonly attribute DOMString name; readonly attribute DOMString publicId; readonly attribute DOMString systemId; }; + +[Constructor, + Exposed=Window] +interface DocumentFragment : Node { +}; + + +[Exposed=Window] +interface ShadowRoot : DocumentFragment { + readonly attribute ShadowRootMode mode; + readonly attribute Element host; +}; + +enum ShadowRootMode { "open", "closed" }; + + +[Exposed=Window] interface Element : Node { readonly attribute DOMString? namespaceURI; readonly attribute DOMString? prefix; @@ -285,29 +342,34 @@ interface Element : Node { attribute DOMString id; attribute DOMString className; [SameObject, PutForwards=value] readonly attribute DOMTokenList classList; + attribute DOMString slot; boolean hasAttributes(); [SameObject] readonly attribute NamedNodeMap attributes; sequence<DOMString> getAttributeNames(); - DOMString? getAttribute(DOMString name); + DOMString? getAttribute(DOMString qualifiedName); DOMString? getAttributeNS(DOMString? namespace, DOMString localName); - void setAttribute(DOMString name, DOMString value); - void setAttributeNS(DOMString? namespace, DOMString name, DOMString value); - void removeAttribute(DOMString name); + void setAttribute(DOMString qualifiedName, DOMString value); + void setAttributeNS(DOMString? namespace, DOMString qualifiedName, DOMString value); + void removeAttribute(DOMString qualifiedName); void removeAttributeNS(DOMString? namespace, DOMString localName); - boolean hasAttribute(DOMString name); + boolean hasAttribute(DOMString qualifiedName); boolean hasAttributeNS(DOMString? namespace, DOMString localName); - Attr? getAttributeNode(DOMString name); + Attr? getAttributeNode(DOMString qualifiedName); Attr? getAttributeNodeNS(DOMString? namespace, DOMString localName); Attr? setAttributeNode(Attr attr); Attr? setAttributeNodeNS(Attr attr); Attr removeAttributeNode(Attr attr); + ShadowRoot attachShadow(ShadowRootInit init); + readonly attribute ShadowRoot? shadowRoot; + Element? closest(DOMString selectors); boolean matches(DOMString selectors); + boolean webkitMatchesSelector(DOMString selectors); // historical alias of .matches - HTMLCollection getElementsByTagName(DOMString localName); + HTMLCollection getElementsByTagName(DOMString qualifiedName); HTMLCollection getElementsByTagNameNS(DOMString? namespace, DOMString localName); HTMLCollection getElementsByClassName(DOMString classNames); @@ -315,31 +377,41 @@ interface Element : Node { void insertAdjacentText(DOMString where, DOMString data); // historical }; +dictionary ShadowRootInit { +// required ShadowRootMode mode; +}; + + +[Exposed=Window, LegacyUnenumerableNamedProperties] interface NamedNodeMap { readonly attribute unsigned long length; getter Attr? item(unsigned long index); - getter Attr? getNamedItem(DOMString name); + getter Attr? getNamedItem(DOMString qualifiedName); Attr? getNamedItemNS(DOMString? namespace, DOMString localName); Attr? setNamedItem(Attr attr); Attr? setNamedItemNS(Attr attr); - Attr removeNamedItem(DOMString name); + Attr removeNamedItem(DOMString qualifiedName); Attr removeNamedItemNS(DOMString? namespace, DOMString localName); }; + +[Exposed=Window] interface Attr { readonly attribute DOMString? namespaceURI; readonly attribute DOMString? prefix; readonly attribute DOMString localName; readonly attribute DOMString name; + readonly attribute DOMString nodeName; // historical alias of .name attribute DOMString value; - attribute DOMString nodeValue; // legacy alias of .value - attribute DOMString textContent; // legacy alias of .value + [TreatNullAs=EmptyString] attribute DOMString nodeValue; // historical alias of .value + [TreatNullAs=EmptyString] attribute DOMString textContent; // historical alias of .value readonly attribute Element? ownerElement; readonly attribute boolean specified; // useless; always returns true }; +[Exposed=Window] interface CharacterData : Node { [TreatNullAs=EmptyString] attribute DOMString data; readonly attribute unsigned long length; @@ -350,21 +422,27 @@ interface CharacterData : Node { void replaceData(unsigned long offset, unsigned long count, DOMString data); }; -[Constructor(optional DOMString data = "")] + +[Constructor(optional DOMString data = ""), + Exposed=Window] interface Text : CharacterData { [NewObject] Text splitText(unsigned long offset); readonly attribute DOMString wholeText; }; +[Exposed=Window] interface ProcessingInstruction : CharacterData { readonly attribute DOMString target; }; -[Constructor(optional DOMString data = "")] +[Constructor(optional DOMString data = ""), + Exposed=Window] interface Comment : CharacterData { }; -[Constructor] + +[Constructor, + Exposed=Window] interface Range { readonly attribute Node startContainer; readonly attribute unsigned long startOffset; @@ -406,6 +484,8 @@ interface Range { stringifier; }; + +[Exposed=Window] interface NodeIterator { [SameObject] readonly attribute Node root; readonly attribute Node referenceNode; @@ -419,6 +499,8 @@ interface NodeIterator { void detach(); }; + +[Exposed=Window] interface TreeWalker { [SameObject] readonly attribute Node root; readonly attribute unsigned long whatToShow; @@ -434,6 +516,7 @@ interface TreeWalker { Node? nextNode(); }; +[Exposed=Window] callback interface NodeFilter { // Constants for acceptNode() const unsigned short FILTER_ACCEPT = 1; @@ -458,6 +541,7 @@ callback interface NodeFilter { unsigned short acceptNode(Node node); }; + interface DOMTokenList { readonly attribute unsigned long length; getter DOMString? item(unsigned long index); diff --git a/tests/wpt/web-platform-tests/dom/nodes/DOMImplementation-createDocument.html b/tests/wpt/web-platform-tests/dom/nodes/DOMImplementation-createDocument.html index 31a31c8a2a2..a982f23d861 100644 --- a/tests/wpt/web-platform-tests/dom/nodes/DOMImplementation-createDocument.html +++ b/tests/wpt/web-platform-tests/dom/nodes/DOMImplementation-createDocument.html @@ -11,6 +11,10 @@ <script src="Document-createElementNS.js"></script> <div id="log"></div> <script> +var htmlNamespace = "http://www.w3.org/1999/xhtml" +var svgNamespace = "http://www.w3.org/2000/svg" +var mathMLNamespace = "http://www.w3.org/1998/Math/MathML" + test(function() { var tests = createElementNS_tests.map(function(t) { return [t[0], t[1], null, t[2]] @@ -57,6 +61,21 @@ test(function() { [null, "foo", document.implementation.createDocumentType("foo", "", ""), null], ["foo", null, document.implementation.createDocumentType("foo", "", ""), null], ["foo", "bar", document.implementation.createDocumentType("foo", "", ""), null], + [htmlNamespace, "", null, null], + [svgNamespace, "", null, null], + [mathMLNamespace, "", null, null], + [null, "html", null, null], + [null, "svg", null, null], + [null, "math", null, null], + [null, "", document.implementation.createDocumentType("html", + "-//W3C//DTD XHTML 1.0 Transitional//EN", + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd")], + [null, "", document.implementation.createDocumentType("svg", + "-//W3C//DTD SVG 1.1//EN", + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd")], + [null, "", document.implementation.createDocumentType("math", + "-//W3C//DTD MathML 2.0//EN", + "http://www.w3.org/Math/DTD/mathml2/mathml2.dtd")], ]) tests.forEach(function(t, i) { @@ -70,6 +89,7 @@ test(function() { assert_equals(doc.nodeType, doc.DOCUMENT_NODE) assert_equals(doc.nodeName, "#document") assert_equals(doc.nodeValue, null) + assert_equals(Object.getPrototypeOf(doc), XMLDocument.prototype) var omitRootElement = qualifiedName === null || String(qualifiedName) === "" if (omitRootElement) { assert_equals(doc.documentElement, null) @@ -103,7 +123,9 @@ test(function() { var doc = document.implementation.createDocument(namespace, qualifiedName, doctype) assert_equals(doc.compatMode, "CSS1Compat") assert_equals(doc.characterSet, "UTF-8") - assert_equals(doc.contentType, "application/xml") + assert_equals(doc.contentType, namespace == htmlNamespace ? "text/html" + : namespace == svgNamespace ? "image/svg+xml" + : "application/xml") assert_equals(doc.URL, "about:blank") assert_equals(doc.documentURI, "about:blank") assert_equals(doc.createElement("DIV").localName, "DIV"); diff --git a/tests/wpt/web-platform-tests/dom/nodes/Document-createElement-namespace.html b/tests/wpt/web-platform-tests/dom/nodes/Document-createElement-namespace.html index d0f68b2bbfc..4b407a9b856 100644 --- a/tests/wpt/web-platform-tests/dom/nodes/Document-createElement-namespace.html +++ b/tests/wpt/web-platform-tests/dom/nodes/Document-createElement-namespace.html @@ -13,8 +13,8 @@ */ /** - * Test that an element created using the Document object doc has the HTML - * namespace. + * Test that an element created using the Document object doc has the namespace + * that would be expected for the given contentType. */ function testDoc(doc, contentType) { if (doc.contentType !== undefined) { @@ -23,7 +23,11 @@ function testDoc(doc, contentType) { "Wrong MIME type -- incorrect server config?"); } - assert_equals(doc.createElement("x").namespaceURI, "http://www.w3.org/1999/xhtml"); + var expectedNamespace = contentType == "text/html" || + contentType == "application/xhtml+xml" + ? "http://www.w3.org/1999/xhtml" : null; + + assert_equals(doc.createElement("x").namespaceURI, expectedNamespace); } // First test various objects we create in JS @@ -39,11 +43,11 @@ test(function() { }, "Created element's namespace in created XML document"); test(function() { testDoc(document.implementation.createDocument("http://www.w3.org/1999/xhtml", "html", null), - "application/xml"); + "application/xhtml+xml"); }, "Created element's namespace in created XHTML document"); test(function() { testDoc(document.implementation.createDocument("http://www.w3.org/2000/svg", "svg", null), - "application/xml"); + "image/svg+xml"); }, "Created element's namespace in created SVG document"); test(function() { testDoc(document.implementation.createDocument("http://www.w3.org/1998/Math/MathML", "math", null), diff --git a/tests/wpt/web-platform-tests/dom/nodes/Document-createEvent.html b/tests/wpt/web-platform-tests/dom/nodes/Document-createEvent.html index 37e05808e43..805e1fea9a8 100644 --- a/tests/wpt/web-platform-tests/dom/nodes/Document-createEvent.html +++ b/tests/wpt/web-platform-tests/dom/nodes/Document-createEvent.html @@ -39,7 +39,7 @@ for (var alias in aliases) { testAlias(alias.toLowerCase(), iface); testAlias(alias.toUpperCase(), iface); - if (!alias.endsWith("s")) { + if (alias[alias.length - 1] != "s") { var plural = alias + "s"; if (!(plural in aliases)) { test(function () { @@ -66,37 +66,28 @@ test(function() { }, "Should throw NOT_SUPPORTED_ERR for unrecognized arguments"); /* -The following are event interfaces which do actually exist, but must still -throw since they're absent from the table in the spec -for document.createEvent(). -This list is not exhaustive. -*/ + * The following are event interfaces which do actually exist, but must still + * throw since they're absent from the table in the spec for + * document.createEvent(). This list is not exhaustive, but includes all + * interfaces that it is known some UA does or did not throw for. + */ var someNonCreateableEvents = [ - "AnimationEvent", "AnimationPlayerEvent", "ApplicationCacheErrorEvent", "AudioProcessingEvent", "AutocompleteErrorEvent", "BeforeInstallPromptEvent", - "BeforeUnloadEvent", "BlobEvent", "ClipboardEvent", - "CloseEvent", - "CompositionEvent", + "CommandEvent", + "DataContainerEvent", "DeviceLightEvent", - "DeviceMotionEvent", - "DeviceOrientationEvent", - "DragEvent", - "ErrorEvent", "ExtendableEvent", "ExtendableMessageEvent", "FetchEvent", - "FocusEvent", "FontFaceSetLoadEvent", "GamepadEvent", "GeofencingEvent", - "HashChangeEvent", - "IDBVersionChangeEvent", "InstallEvent", "KeyEvent", "MIDIConnectionEvent", @@ -107,16 +98,17 @@ var someNonCreateableEvents = [ "MediaQueryListEvent", "MediaStreamEvent", "MediaStreamTrackEvent", + "MouseScrollEvent", "MutationEvent", "NotificationEvent", + "NotifyPaintEvent", "OfflineAudioCompletionEvent", "OrientationEvent", - "PageTransitionEvent", + "PageTransition", // Yes, with no "Event" "PointerEvent", - "PopStateEvent", + "PopUpEvent", "PresentationConnectionAvailableEvent", "PresentationConnectionCloseEvent", - "ProgressEvent", "PromiseRejectionEvent", "PushEvent", "RTCDTMFToneChangeEvent", @@ -125,34 +117,37 @@ var someNonCreateableEvents = [ "RelatedEvent", "ResourceProgressEvent", "SVGEvent", - "SVGZoomEvent", + "ScrollAreaEvent", "SecurityPolicyViolationEvent", "ServicePortConnectEvent", "ServiceWorkerMessageEvent", + "SimpleGestureEvent", "SpeechRecognitionError", "SpeechRecognitionEvent", "SpeechSynthesisEvent", - "StorageEvent", "SyncEvent", - "TextEvent", - "TrackEvent", - "TransitionEvent", - "WebGLContextEvent", + "TimeEvent", "WebKitAnimationEvent", "WebKitTransitionEvent", - "WheelEvent" + "XULCommandEvent", ]; someNonCreateableEvents.forEach(function (eventInterface) { - test(function () { - assert_throws("NOT_SUPPORTED_ERR", function () { - var evt = document.createEvent(eventInterface); - }); - }, 'Should throw NOT_SUPPORTED_ERR for non-legacy event interface "' + eventInterface + '"'); + // SVGEvents is allowed, but not SVGEvent. Make sure we only test if it's + // not whitelisted. + if (!(eventInterface in aliases)) { + test(function () { + assert_throws("NOT_SUPPORTED_ERR", function () { + var evt = document.createEvent(eventInterface); + }); + }, 'Should throw NOT_SUPPORTED_ERR for non-legacy event interface "' + eventInterface + '"'); + } - test(function () { - assert_throws("NOT_SUPPORTED_ERR", function () { - var evt = document.createEvent(eventInterface + "s"); - }); - }, 'Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "' + eventInterface + '"'); + if (!(eventInterface + "s" in aliases)) { + test(function () { + assert_throws("NOT_SUPPORTED_ERR", function () { + var evt = document.createEvent(eventInterface + "s"); + }); + }, 'Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "' + eventInterface + 's"'); + } }); </script> diff --git a/tests/wpt/web-platform-tests/dom/nodes/Document-createEvent.js b/tests/wpt/web-platform-tests/dom/nodes/Document-createEvent.js index 86b4b678ccb..e55487ada13 100644 --- a/tests/wpt/web-platform-tests/dom/nodes/Document-createEvent.js +++ b/tests/wpt/web-platform-tests/dom/nodes/Document-createEvent.js @@ -1,13 +1,36 @@ var aliases = { + "AnimationEvent": "AnimationEvent", + "BeforeUnloadEvent": "BeforeUnloadEvent", + "CloseEvent": "CloseEvent", + "CompositionEvent": "CompositionEvent", "CustomEvent": "CustomEvent", + "DeviceMotionEvent": "DeviceMotionEvent", + "DeviceOrientationEvent": "DeviceOrientationEvent", + "DragEvent": "DragEvent", + "ErrorEvent": "ErrorEvent", "Event": "Event", "Events": "Event", + "FocusEvent": "FocusEvent", + "HashChangeEvent": "HashChangeEvent", "HTMLEvents": "Event", + "IDBVersionChangeEvent": "IDBVersionChangeEvent", "KeyboardEvent": "KeyboardEvent", "MessageEvent": "MessageEvent", "MouseEvent": "MouseEvent", "MouseEvents": "MouseEvent", + "PageTransitionEvent": "PageTransitionEvent", + "PopStateEvent": "PopStateEvent", + "ProgressEvent": "ProgressEvent", + "StorageEvent": "StorageEvent", + "SVGEvents": "Event", + "SVGZoomEvent": "SVGZoomEvent", + "SVGZoomEvents": "SVGZoomEvent", + "TextEvent": "CompositionEvent", "TouchEvent": "TouchEvent", + "TrackEvent": "TrackEvent", + "TransitionEvent": "TransitionEvent", "UIEvent": "UIEvent", - "UIEvents": "UIEvent" + "UIEvents": "UIEvent", + "WebGLContextEvent": "WebGLContextEvent", + "WheelEvent": "WheelEvent", }; diff --git a/tests/wpt/web-platform-tests/dom/nodes/Element-hasAttributes.html b/tests/wpt/web-platform-tests/dom/nodes/Element-hasAttributes.html new file mode 100644 index 00000000000..fbb9c233b70 --- /dev/null +++ b/tests/wpt/web-platform-tests/dom/nodes/Element-hasAttributes.html @@ -0,0 +1,40 @@ +<!doctype html> +<meta charset="utf-8"> +<title></title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> + +<button></button> +<div id="foo"></div> +<p data-foo=""></p> + +<script> +test(function() { + var buttonElement = document.getElementsByTagName('button')[0]; + assert_equals(buttonElement.hasAttributes(), false, 'hasAttributes() on empty element must return false.'); + + var emptyDiv = document.createElement('div'); + assert_equals(emptyDiv.hasAttributes(), false, 'hasAttributes() on dynamically created empty element must return false.'); + +}, 'element.hasAttributes() must return false when the element does not have attribute.'); + +test(function() { + var divWithId = document.getElementById('foo'); + assert_equals(divWithId.hasAttributes(), true, 'hasAttributes() on element with id attribute must return true.'); + + var divWithClass = document.createElement('div'); + divWithClass.setAttribute('class', 'foo'); + assert_equals(divWithClass.hasAttributes(), true, 'hasAttributes() on dynamically created element with class attribute must return true.'); + + var pWithCustomAttr = document.getElementsByTagName('p')[0]; + assert_equals(pWithCustomAttr.hasAttributes(), true, 'hasAttributes() on element with custom attribute must return true.'); + + var divWithCustomAttr = document.createElement('div'); + divWithCustomAttr.setAttribute('data-custom', 'foo'); + assert_equals(divWithCustomAttr.hasAttributes(), true, 'hasAttributes() on dynamically created element with custom attribute must return true.'); + +}, 'element.hasAttributes() must return true when the element has attribute.'); + +</script> +</body> diff --git a/tests/wpt/web-platform-tests/dom/nodes/Node-isSameNode.html b/tests/wpt/web-platform-tests/dom/nodes/Node-isSameNode.html new file mode 100644 index 00000000000..884fdd50490 --- /dev/null +++ b/tests/wpt/web-platform-tests/dom/nodes/Node-isSameNode.html @@ -0,0 +1,100 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Node.prototype.isSameNode</title> +<link rel=help href="https://dom.spec.whatwg.org/#dom-node-issamenode"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +"use strict"; + +test(function() { + + var doctype1 = document.implementation.createDocumentType("qualifiedName", "publicId", "systemId"); + var doctype2 = document.implementation.createDocumentType("qualifiedName", "publicId", "systemId"); + + assert_true(doctype1.isSameNode(doctype1), "self-comparison"); + assert_false(doctype1.isSameNode(doctype2), "same properties"); + assert_false(doctype1.isSameNode(null), "with null other node"); +}, "doctypes should be comapred on reference"); + +test(function() { + + var element1 = document.createElementNS("namespace", "prefix:localName"); + var element2 = document.createElementNS("namespace", "prefix:localName"); + + assert_true(element1.isSameNode(element1), "self-comparison"); + assert_false(element1.isSameNode(element2), "same properties"); + assert_false(element1.isSameNode(null), "with null other node"); + +}, "elements should be compared on reference"); + +test(function() { + + var element1 = document.createElement("element"); + element1.setAttributeNS("namespace", "prefix:localName", "value"); + + var element2 = document.createElement("element"); + element2.setAttributeNS("namespace", "prefix:localName", "value"); + + assert_true(element1.isSameNode(element1), "self-comparison"); + assert_false(element1.isSameNode(element2), "same properties"); + assert_false(element1.isSameNode(null), "with null other node"); + +}, "elements should be compared on reference"); + +test(function() { + + var pi1 = document.createProcessingInstruction("target", "data"); + var pi2 = document.createProcessingInstruction("target", "data"); + + assert_true(pi1.isSameNode(pi1), "self-comparison"); + assert_false(pi1.isSameNode(pi2), "different target"); + assert_false(pi1.isSameNode(null), "with null other node"); + +}, "processing instructions should be compared on reference"); + +test(function() { + + var text1 = document.createTextNode("data"); + var text2 = document.createTextNode("data"); + + assert_true(text1.isSameNode(text1), "self-comparison"); + assert_false(text1.isSameNode(text2), "same properties"); + assert_false(text1.isSameNode(null), "with null other node"); + +}, "text nodes should be compared on reference"); + +test(function() { + + var comment1 = document.createComment("data"); + var comment2 = document.createComment("data"); + + assert_true(comment1.isSameNode(comment1), "self-comparison"); + assert_false(comment1.isSameNode(comment2), "same properties"); + assert_false(comment1.isSameNode(null), "with null other node"); + +}, "comments should be compared on reference"); + +test(function() { + + var documentFragment1 = document.createDocumentFragment(); + var documentFragment2 = document.createDocumentFragment(); + + assert_true(documentFragment1.isSameNode(documentFragment1), "self-comparison"); + assert_false(documentFragment1.isSameNode(documentFragment2), "same properties"); + assert_false(documentFragment1.isSameNode(null), "with null other node"); + +}, "document fragments should be compared on reference"); + +test(function() { + + var document1 = document.implementation.createDocument("", ""); + var document2 = document.implementation.createDocument("", ""); + + assert_true(document1.isSameNode(document1), "self-comparison"); + assert_false(document1.isSameNode(document2), "another empty XML document"); + assert_false(document1.isSameNode(null), "with null other node"); + +}, "documents should not be compared on reference"); + +</script> diff --git a/tests/wpt/web-platform-tests/eventsource/dedicated-worker/eventsource-eventtarget.htm b/tests/wpt/web-platform-tests/eventsource/dedicated-worker/eventsource-eventtarget.htm deleted file mode 100644 index ff40c59d513..00000000000 --- a/tests/wpt/web-platform-tests/eventsource/dedicated-worker/eventsource-eventtarget.htm +++ /dev/null @@ -1,37 +0,0 @@ -<!-- -try { - var source = new EventSource("../resources/message.py") - source.addEventListener("message", listener, false) - function listener(e) { - postMessage([true, e.data]) - this.close() - } -} catch(e) { - postMessage([false, String(e)]) -} -/*--> -<!DOCTYPE html> -<html> - <head> - <title>dedicated worker - EventSource: addEventListener()</title> - <script src="/resources/testharness.js"></script> - <script src="/resources/testharnessreport.js"></script> - </head> - <body> - <div id="log"></div> - <script> - var test = async_test() - test.step(function() { - var worker = new Worker('#') - worker.onmessage = function(e) { - test.step(function() { - assert_true(e.data[0], e.data[1]) - assert_equals(e.data[1], 'data', 'e.data') - }) - test.done() - } - }) - </script> - </body> -</html> -<!--*/ //--> diff --git a/tests/wpt/web-platform-tests/eventsource/dedicated-worker/eventsource-eventtarget.worker.js b/tests/wpt/web-platform-tests/eventsource/dedicated-worker/eventsource-eventtarget.worker.js new file mode 100644 index 00000000000..73b30556c49 --- /dev/null +++ b/tests/wpt/web-platform-tests/eventsource/dedicated-worker/eventsource-eventtarget.worker.js @@ -0,0 +1,11 @@ +importScripts("/resources/testharness.js"); + +async_test(function() { + var source = new EventSource("../resources/message.py") + source.addEventListener("message", this.step_func_done(function(e) { + assert_equals(e.data, 'data'); + source.close(); + }), false) +}, "dedicated worker - EventSource: addEventListener()"); + +done(); diff --git a/tests/wpt/web-platform-tests/generic-sensor/OWNERS b/tests/wpt/web-platform-tests/generic-sensor/OWNERS new file mode 100644 index 00000000000..387490fd173 --- /dev/null +++ b/tests/wpt/web-platform-tests/generic-sensor/OWNERS @@ -0,0 +1,4 @@ +@zqzhang +@dontcallmedom +@tobie +@riju diff --git a/tests/wpt/web-platform-tests/generic-sensor/idlharness.html b/tests/wpt/web-platform-tests/generic-sensor/idlharness.html new file mode 100644 index 00000000000..07a43cf1cf8 --- /dev/null +++ b/tests/wpt/web-platform-tests/generic-sensor/idlharness.html @@ -0,0 +1,86 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Generic Sensor IDL tests</title> +<link rel="author" title="Tobie Langel" href="http://www.codespeaks.com"> +<link rel="help" href="http://www.w3.org/TR/generic-sensor/"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/WebIDLParser.js"></script> +<script src="/resources/idlharness.js"></script> +<style> + pre { + display: none; + } +</style> +<div id="log"></div> + +<pre id="idl"> +interface Event { +}; + +interface Error { +}; + +dictionary EventInit { +}; + +interface Sensor : EventTarget { + readonly attribute SensorState state; + readonly attribute SensorReading? reading; + void start(); + void stop(); + attribute EventHandler onchange; + attribute EventHandler onstatechange; + attribute EventHandler onerror; +}; + +dictionary SensorOptions { + double? frequency; +}; + +enum SensorState { + "idle", + "activating", + "active", + "errored" +}; + +interface SensorReading { + readonly attribute DOMHighResTimeStamp timeStamp; +}; + +[Constructor(DOMString type, SensorReadingEventInit eventInitDict)] +interface SensorReadingEvent : Event { + readonly attribute SensorReading reading; +}; + +dictionary SensorReadingEventInit : EventInit { + SensorReading reading; +}; +</pre> + +<pre id="generic-idl"> +[Constructor(DOMString type, SensorErrorEventInit errorEventInitDict)] +interface SensorErrorEvent : Event { + readonly attribute Error error; +}; + +dictionary SensorErrorEventInit : EventInit { + Error error; +}; +</pre> + +<script> +(function() { + "use strict"; + var idl_array = new IdlArray(); + idl_array.add_untested_idls(document.getElementById('idl').textContent); + idl_array.add_idls(document.getElementById('generic-idl').textContent); + + idl_array.add_objects({ + SensorErrorEvent: ['new SensorErrorEvent({ error: new TypeError("Boom!") });'] + }); + + idl_array.test(); +})(); +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/OWNERS b/tests/wpt/web-platform-tests/html/OWNERS index 1419ab7b547..6503090a56f 100644 --- a/tests/wpt/web-platform-tests/html/OWNERS +++ b/tests/wpt/web-platform-tests/html/OWNERS @@ -1,3 +1,4 @@ +@ayg @Ms2ger @foolip @gsnedders diff --git a/tests/wpt/web-platform-tests/html/rendering/replaced-elements/embedded-content-rendering-rules/canvas-fallback-ref.html b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/embedded-content-rendering-rules/canvas-fallback-ref.html new file mode 100644 index 00000000000..9077591f466 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/embedded-content-rendering-rules/canvas-fallback-ref.html @@ -0,0 +1,4 @@ +<!doctype html> +<meta charset=utf-8> +<title>Canvas fallback content</title> +<p>The word "FAIL" should not be visible below this line. diff --git a/tests/wpt/web-platform-tests/html/rendering/replaced-elements/embedded-content-rendering-rules/canvas-fallback.html b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/embedded-content-rendering-rules/canvas-fallback.html new file mode 100644 index 00000000000..142024e67b7 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/embedded-content-rendering-rules/canvas-fallback.html @@ -0,0 +1,22 @@ +<!doctype html> +<meta charset=utf-8> +<title>Canvas fallback content</title> +<link rel=match href=canvas-fallback-ref.html> +<style> +#canvas2 { + display: inline; +} + +#canvas3 { + display: block; +} + +#canvas4 { + display: table; +} +</style> +<p>The word "FAIL" should not be visible below this line. +<p><canvas id=canvas1>FAIL</canvas> +<p><canvas id=canvas2>FAIL</canvas> +<p><canvas id=canvas3>FAIL</canvas> +<p><canvas id=canvas4>FAIL</canvas> diff --git a/tests/wpt/web-platform-tests/html/rendering/replaced-elements/embedded-content-rendering-rules/canvas_scale.html b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/embedded-content-rendering-rules/canvas_scale.html new file mode 100644 index 00000000000..cdc4647534a --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/embedded-content-rendering-rules/canvas_scale.html @@ -0,0 +1,23 @@ +<!doctype html> +<meta charset="utf-8"> +<title>Verify that canvases are scaled up to their computed size</title> +<link rel="match" href="canvas_scale_ref.html"> +<style> +canvas { + width: 20px; + height: 20px; +} +div { + line-height: 0; +} +</style> +<div><canvas width="16" height="16" data-color="#FF00FF"></canvas><canvas width="16" height="16" data-color="#00FF00"></canvas></div> +<div><canvas width="16" height="16" data-color="#0000FF"></canvas><canvas width="16" height="16" data-color="#FF00FF"></canvas></div> +<script> +var canvases = document.getElementsByTagName('canvas'); +for (var i = 0; i < canvases.length; i++) { + var ctx = canvases[i].getContext('2d'); + ctx.fillStyle = canvases[i].getAttribute('data-color'); + ctx.fillRect(0, 0, 16, 16); +} +</script> diff --git a/tests/wpt/web-platform-tests/html/rendering/replaced-elements/embedded-content-rendering-rules/canvas_scale_ref.html b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/embedded-content-rendering-rules/canvas_scale_ref.html new file mode 100644 index 00000000000..2d1756f856a --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/embedded-content-rendering-rules/canvas_scale_ref.html @@ -0,0 +1,14 @@ +<!doctype html> +<meta charset="utf-8"> +<style> +span { + display: inline-block; + width: 20px; + height: 20px; +} +div { + line-height: 0; +} +</style> +<div><span style="background-color: #FF00FF"></span><span style="background-color: #00FF00"></span></div> +<div><span style="background-color: #0000FF"></span><span style="background-color: #FF00FF"></span></div> diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-embed-element/embed-ignored-in-media-element.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-embed-element/embed-ignored-in-media-element.html new file mode 100644 index 00000000000..d29d520f0e5 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-embed-element/embed-ignored-in-media-element.html @@ -0,0 +1,22 @@ +<!doctype html> +<meta charset="utf-8"> +<title>HTML Test: The embed element represents a document</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta name="assert" content="Check if the embed element is ignored when used inside a media element"> +<script type="application/javascript"> + window.childLoaded = false; + async_test(function() { + addEventListener("load", this.step_func_done(function() { + assert_false(window.childLoaded); + })); + }, "Test embed being ignored inside media element"); +</script> +<body> + <video> + <embed type="text/html" src="embed-iframe.html" /> + </video> + <audio> + <embed type="text/html" src="embed-iframe.html" /> + </audio> +</body> diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/checkbox.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/checkbox.html index d9d3ec9cf93..0c07fdd4a40 100644 --- a/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/checkbox.html +++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/checkbox.html @@ -40,7 +40,7 @@ assert_true(c1_click_fired, "input event should fire after click event"); assert_false(c1_change_fired, "input event should fire before change event"); assert_true(e.bubbles, "event should bubble"); - assert_false(e.isTrusted, "click()-initiated event should be trusted"); + assert_false(e.isTrusted, "click()-initiated event should not be trusted"); assert_false(e.cancelable, "event should not be cancelable"); assert_true(checkbox1.checked, "checkbox is checked"); assert_false(checkbox1.indeterminate, "checkbox is not indeterminate"); @@ -51,7 +51,7 @@ assert_true(c1_click_fired, "change event should fire after click event"); assert_true(c1_input_fired, "change event should fire after input event"); assert_true(e.bubbles, "event should bubble") - assert_false(e.isTrusted, "click()-initiated event should be trusted"); + assert_false(e.isTrusted, "click()-initiated event should not be trusted"); assert_false(e.cancelable, "event should not be cancelable"); assert_true(checkbox1.checked, "checkbox is checked"); assert_false(checkbox1.indeterminate, "checkbox is not indeterminate"); diff --git a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/default.html b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/default.html index a6564f03de2..fbc23028c55 100644 --- a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/default.html +++ b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/default.html @@ -34,10 +34,13 @@ <input type=checkbox id=checkbox1 checked> <input type=checkbox id=checkbox2> <input type=checkbox id=checkbox3 default> +<input type=radio name=radios id=radio1 checked> +<input type=radio name=radios id=radio2> +<input type=radio name=radios id=radio3 default> <select id=select1> <optgroup label="options" id=optgroup1> - <option value="option1" id=option1 selected>option1 <option value="option1" id=option1>option1 + <option value="option2" id=option2 selected>option2 </select> <dialog id="dialog"> <input type=submit id=input8> @@ -53,9 +56,9 @@ <script> - testSelector(":default", ["button2", "button4", "input3", "input5", "input7", "checkbox1", "option1", "button6", "button8"], "':default' matches <button>s that are their form's default button, <input>s of type submit/image that are their form's default button, checked <input>s and selected <option>s"); + testSelector(":default", ["button2", "button4", "input3", "input5", "input7", "checkbox1", "radio1", "option2", "button6", "button8"], "':default' matches <button>s that are their form's default button, <input>s of type submit/image that are their form's default button, checked <input>s and selected <option>s"); document.getElementById("button1").type = "submit"; // change the form's default button - testSelector(":default", ["button1", "button4", "input3", "input5", "input7", "checkbox1", "option1", "button6", "button8"], "':default' matches dynamically changed form's default buttons"); + testSelector(":default", ["button1", "button4", "input3", "input5", "input7", "checkbox1", "radio1", "option2", "button6", "button8"], "':default' matches dynamically changed form's default buttons"); </script> diff --git a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/inrange-outofrange.html b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/inrange-outofrange.html index 92b16837631..d3b23ebbc37 100644 --- a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/inrange-outofrange.html +++ b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/inrange-outofrange.html @@ -1,8 +1,10 @@ <!DOCTYPE html> <meta charset=utf-8> <title>Selector: pseudo-classes (:in-range, :out-of-range)</title> -<link rel="author" title="Denis Ah-Kang" href="mailto:denis@w3.org" id=link1> -<link rel=help href="https://html.spec.whatwg.org/multipage/#pseudo-classes" id=link2> +<link rel="author" title="Denis Ah-Kang" href="mailto:denis@w3.org" id="link1"> +<link rel="author" title="Chris Rebert" href="http://chrisrebert.com" id="link2"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/#selector-in-range" id="link3"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/#selector-out-of-range" id="link4"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="utils.js"></script> @@ -11,17 +13,72 @@ <input type=number value=0 min=0 max=10 id=number2 disabled> <input type=number value=0 min=1 max=10 id=number3> <input type=number value=11 min=0 max=10 id=number4> +<input type=number value=0 min=0 max=10 id=number5 readonly> + +<input type="date" min="2005-10-10" max="2020-10-10" value="2010-10-10" id="datein"> +<input type="date" min="2010-10-10" max="2020-10-10" value="2005-10-10" id="dateunder"> +<input type="date" min="2010-10-10" max="2020-10-10" value="2030-10-10" id="dateover"> + +<input type="time" min="01:00:00" max="05:00:00" value="02:00:00" id="timein"> +<input type="time" min="02:00:00" max="05:00:00" value="01:00:00" id="timeunder"> +<input type="time" min="02:00:00" max="05:00:00" value="07:00:00" id="timeover"> + +<input type="week" min="2016-W05" max="2016-W10" value="2016-W07" id="weekin"> +<input type="week" min="2016-W05" max="2016-W10" value="2016-W02" id="weekunder"> +<input type="week" min="2016-W05" max="2016-W10" value="2016-W26" id="weekover"> + +<input type="month" min="2000-04" max="2000-09" value="2000-06" id="monthin"> +<input type="month" min="2000-04" max="2000-09" value="2000-02" id="monthunder"> +<input type="month" min="2000-04" max="2000-09" value="2000-11" id="monthover"> + +<input type="datetime-local" min="2008-03-12T23:59:59" max="2015-02-13T23:59:59" value="2012-11-28T23:59:59" id="datetimelocalin"> +<input type="datetime-local" min="2008-03-12T23:59:59" max="2015-02-13T23:59:59" value="2008-03-01T23:59:59" id="datetimelocalunder"> +<input type="datetime-local" min="2008-03-12T23:59:59" max="2015-02-13T23:59:59" value="2016-01-01T23:59:59" id="datetimelocalover"> + +<!-- None of the following have range limitations since they have neither min nor max attributes --> +<input type="number" value="0" id="numbernolimit"> +<input type="date" value="2010-10-10" id="datenolimit"> +<input type="time" value="02:00:00" id="timenolimit"> +<input type="week" value="2016-W07" id="weeknolimit"> +<input type="month" value="2000-06" id="monthnolimit"> +<input type="datetime-local" value="2012-11-28T23:59:59" id="datetimelocalnolimit"> + +<!-- range inputs have default minimum of 0 and default maximum of 100 --> +<input type="range" value="50" id="range0"> + +<!-- range input's value gets immediately clamped to the nearest boundary point --> +<input type="range" min="2" max="7" value="5" id="range1"> +<input type="range" min="2" max="7" value="1" id="range2"> +<input type="range" min="2" max="7" value="9" id="range3"> + +<!-- None of the following input types can have range limitations --> +<input min="1" value="0" type="text"> +<input min="1" value="0" type="search"> +<input min="1" value="0" type="url"> +<input min="1" value="0" type="tel"> +<input min="1" value="0" type="email"> +<input min="1" value="0" type="password"> +<input min="1" value="#000000" type="color"> +<input min="1" value="0" type="checkbox"> +<input min="1" value="0" type="radio"> +<input min="1" value="0" type="file"> +<input min="1" value="0" type="submit"> +<input min="1" value="0" type="image"> +<!-- The following types are also barred from constraint validation --> +<input min="1" value="0" type="hidden"> +<input min="1" value="0" type="button"> +<input min="1" value="0" type="reset"> <script> - testSelector(":in-range", ["number1"], "':in-range' matches all elements that are candidates for constraint validation, have range limitations, and that are neither suffering from an underflow nor suffering from an overflow"); + testSelector(":in-range", ["number1", "datein", "timein", "weekin", "monthin", "datetimelocalin", "range0", "range1", "range2", "range3"], "':in-range' matches all elements that are candidates for constraint validation, have range limitations, and that are neither suffering from an underflow nor suffering from an overflow"); - testSelector(":out-of-range", ["number3", "number4"], "':out-of-range' matches all elements that are candidates for constraint validation, have range limitations, and that are either suffering from an underflow or suffering from an overflow"); + testSelector(":out-of-range", ["number3", "number4", "dateunder", "dateover", "timeunder", "timeover", "weekunder", "weekover", "monthunder", "monthover", "datetimelocalunder", "datetimelocalover"], "':out-of-range' matches all elements that are candidates for constraint validation, have range limitations, and that are either suffering from an underflow or suffering from an overflow"); document.getElementById("number1").value = -10; - testSelector(":in-range", [], "':in-range' update number1's value < min"); - testSelector(":out-of-range", ["number1", "number3", "number4"], "':out-of-range' update number1's value < min"); + testSelector(":in-range", ["datein", "timein", "weekin", "monthin", "datetimelocalin", "range0", "range1", "range2", "range3"], "':in-range' update number1's value < min"); + testSelector(":out-of-range", ["number1", "number3", "number4", "dateunder", "dateover", "timeunder", "timeover", "weekunder", "weekover", "monthunder", "monthover", "datetimelocalunder", "datetimelocalover"], "':out-of-range' update number1's value < min"); document.getElementById("number3").min = 0; - testSelector(":in-range", ["number3"], "':in-range' update number3's min < value"); - testSelector(":out-of-range", ["number1", "number4"], "':out-of-range' update number3's min < value"); + testSelector(":in-range", ["number3", "datein", "timein", "weekin", "monthin", "datetimelocalin", "range0", "range1", "range2", "range3"], "':in-range' update number3's min < value"); + testSelector(":out-of-range", ["number1", "number4", "dateunder", "dateover", "timeunder", "timeover", "weekunder", "weekover", "monthunder", "monthover", "datetimelocalunder", "datetimelocalover"], "':out-of-range' update number3's min < value"); </script> diff --git a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/readwrite-readonly.html b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/readwrite-readonly.html index a23dc8e1b6e..66fb952e37a 100644 --- a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/readwrite-readonly.html +++ b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/readwrite-readonly.html @@ -7,6 +7,20 @@ <script src="utils.js"></script> <div id="log"></div> +<div id=set0> +<!-- The readonly attribute does not apply to the following input types --> +<input id=checkbox1 type=checkbox> +<input id=hidden1 type=hidden value=abc> +<input id=range1 type=range> +<input id=color1 type=color> +<input id=radio1 type=radio> +<input id=file1 type=file> +<input id=submit1 type=submit> +<input id=image1 type=image> +<input id=button1 type=button value="Button"> +<input id=reset1 type=reset> +</div> + <div id=set1> <input id=input1> <input id=input2 readonly> @@ -31,6 +45,10 @@ </div> <script> + testSelector("#set0 :read-write", [], "The :read-write pseudo-class must not match input elements to which the readonly attribute does not apply"); + + testSelector("#set0 :read-only", ["checkbox1", "hidden1", "range1", "color1", "radio1", "file1", "submit1", "image1", "button1", "reset1"], "The :read-only pseudo-class must match input elements to which the readonly attribute does not apply"); + testSelector("#set1 :read-write", ["input1"], "The :read-write pseudo-class must match input elements to which the readonly attribute applies, and that are mutable"); testSelector("#set1 :read-only", ["input2"], "The :read-only pseudo-class must not match input elements to which the readonly attribute applies, and that are mutable"); diff --git a/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-1.html b/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-1.html new file mode 100644 index 00000000000..65a1a02b11e --- /dev/null +++ b/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-1.html @@ -0,0 +1,33 @@ +<!doctype html> +<meta charset=utf-8> +<title> + When a listener from window A is added to an event target in window B via the + addEventListener function from window B, errors in that listener should be + reported to window A. +</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<iframe></iframe> +<iframe></iframe> +<script> +test(function() { + var f = new frames[0].Function("thereIsNoSuchCallable()"); + frames[1].document.addEventListener("myevent", f); + var frame0ErrorFired = false; + var frame1ErrorFired = false; + var ourErrorFired = false; + frames[0].addEventListener("error", function() { + frame0ErrorFired = true; + }); + frames[1].addEventListener("error", function() { + frame1ErrorFired = true; + }); + addEventListener("error", function() { + ourErrorFired = true; + }); + frames[1].document.dispatchEvent(new Event("myevent")); + assert_true(frame0ErrorFired); + assert_false(frame1ErrorFired); + assert_false(ourErrorFired); +}, "The error event from an event listener should fire on that listener's global"); +</script> diff --git a/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-2.html b/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-2.html new file mode 100644 index 00000000000..6c5476542b8 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-2.html @@ -0,0 +1,33 @@ +<!doctype html> +<meta charset=utf-8> +<title> + When a listener from window A is added to an event target in window B via the + addEventListener function from window A, errors in that listener should be + reported to window A. +</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<iframe></iframe> +<iframe></iframe> +<script> +test(function() { + var f = new frames[0].Function("thereIsNoSuchCallable()"); + frames[0].document.addEventListener.call(frames[1].document, "myevent", f); + var frame0ErrorFired = false; + var frame1ErrorFired = false; + var ourErrorFired = false; + frames[0].addEventListener("error", function() { + frame0ErrorFired = true; + }); + frames[1].addEventListener("error", function() { + frame1ErrorFired = true; + }); + addEventListener("error", function() { + ourErrorFired = true; + }); + frames[1].document.dispatchEvent(new Event("myevent")); + assert_true(frame0ErrorFired); + assert_false(frame1ErrorFired); + assert_false(ourErrorFired); +}, "The error event from an event listener should fire on that listener's global"); +</script> diff --git a/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-3.html b/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-3.html new file mode 100644 index 00000000000..5e78baa8de0 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-3.html @@ -0,0 +1,33 @@ +<!doctype html> +<meta charset=utf-8> +<title> + When a listener from window A is added to an event target in window A via the + addEventListener function from window A, errors in that listener should be + reported to window A. +</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<iframe></iframe> +<iframe></iframe> +<script> +test(function() { + var f = new frames[1].Function("thereIsNoSuchCallable()"); + frames[1].document.addEventListener("myevent", f); + var frame0ErrorFired = false; + var frame1ErrorFired = false; + var ourErrorFired = false; + frames[0].addEventListener("error", function() { + frame0ErrorFired = true; + }); + frames[1].addEventListener("error", function() { + frame1ErrorFired = true; + }); + addEventListener("error", function() { + ourErrorFired = true; + }); + frames[1].document.dispatchEvent(new Event("myevent")); + assert_false(frame0ErrorFired); + assert_true(frame1ErrorFired); + assert_false(ourErrorFired); +}, "The error event from an event listener should fire on that listener's global"); +</script> diff --git a/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-4.html b/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-4.html new file mode 100644 index 00000000000..a5f35d613f7 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-4.html @@ -0,0 +1,33 @@ +<!doctype html> +<meta charset=utf-8> +<title> + When a listener from window A is added to an event target in window A via the + addEventListener function from window B, errors in that listener should be + reported to window A. +</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<iframe></iframe> +<iframe></iframe> +<script> +test(function() { + var f = new frames[1].Function("thereIsNoSuchCallable()"); + frames[0].document.addEventListener.call(frames[1].document, "myevent", f); + var frame0ErrorFired = false; + var frame1ErrorFired = false; + var ourErrorFired = false; + frames[0].addEventListener("error", function() { + frame0ErrorFired = true; + }); + frames[1].addEventListener("error", function() { + frame1ErrorFired = true; + }); + addEventListener("error", function() { + ourErrorFired = true; + }); + frames[1].document.dispatchEvent(new Event("myevent")); + assert_false(frame0ErrorFired); + assert_true(frame1ErrorFired); + assert_false(ourErrorFired); +}, "The error event from an event listener should fire on that listener's global"); +</script> diff --git a/tests/wpt/web-platform-tests/media-source/OWNERS b/tests/wpt/web-platform-tests/media-source/OWNERS index fa70c6cc1d2..aefaf66dab0 100644 --- a/tests/wpt/web-platform-tests/media-source/OWNERS +++ b/tests/wpt/web-platform-tests/media-source/OWNERS @@ -3,3 +3,4 @@ @foolip @shishimaru @sideshowbarker +@wolenetz diff --git a/tests/wpt/web-platform-tests/performance-timeline/idlharness.html b/tests/wpt/web-platform-tests/performance-timeline/idlharness.html index db93932025f..0500b3eee5f 100644 --- a/tests/wpt/web-platform-tests/performance-timeline/idlharness.html +++ b/tests/wpt/web-platform-tests/performance-timeline/idlharness.html @@ -22,20 +22,51 @@ interface Performance { </pre> <pre id='idl'> +[Exposed=(Window,Worker)] interface PerformanceEntry { - readonly attribute DOMString name; - readonly attribute DOMString entryType; - readonly attribute DOMHighResTimeStamp startTime; - readonly attribute DOMHighResTimeStamp duration; + readonly attribute DOMString name; + readonly attribute DOMString entryType; + readonly attribute DOMHighResTimeStamp startTime; + readonly attribute DOMHighResTimeStamp duration; + serializer = {attribute}; +}; + +dictionary PerformanceEntryFilterOptions { + DOMString name; + DOMString entryType; + DOMString initiatorType; }; partial interface Performance { - PerformanceEntryList getEntries(); - PerformanceEntryList getEntriesByType(DOMString entryType); - PerformanceEntryList getEntriesByName(DOMString name, optional DOMString entryType); + PerformanceEntryList getEntries(optional PerformanceEntryFilterOptions filter); + PerformanceEntryList getEntriesByType(DOMString type); + PerformanceEntryList getEntriesByName(DOMString name, + optional DOMString type); }; typedef sequence <PerformanceEntry> PerformanceEntryList; + +dictionary PerformanceObserverInit { + required sequence<DOMString> entryTypes; +}; + +[Exposed=(Window,Worker)] +interface PerformanceObserverEntryList { + PerformanceEntryList getEntries(optional PerformanceEntryFilterOptions filter); + PerformanceEntryList getEntriesByType(DOMString type); + PerformanceEntryList getEntriesByName(DOMString name, + optional DOMString type); +}; + +callback PerformanceObserverCallback = void (PerformanceObserverEntryList entries, + PerformanceObserver observer); + +[Constructor(PerformanceObserverCallback callback), + Exposed=(Window,Worker)] +interface PerformanceObserver { + void observe(PerformanceObserverInit options); + void disconnect(); +}; </pre> <script> diff --git a/tests/wpt/web-platform-tests/resource-timing/test_resource_timing.js b/tests/wpt/web-platform-tests/resource-timing/test_resource_timing.js index 2862e16d100..60c8c88f548 100644 --- a/tests/wpt/web-platform-tests/resource-timing/test_resource_timing.js +++ b/tests/wpt/web-platform-tests/resource-timing/test_resource_timing.js @@ -161,6 +161,13 @@ function resource_load(expected) t["timing_attrs"].step(function test() { var actual = window.performance.getEntriesByName(expected.name)[0]; + + // Debugging bug 1263428 + // Feel free to remove/overwrite this piece of code + if (actual.connectStart < actual.domainLookupEnd) { + assert_true(false, "actual: "+JSON.stringify(actual)); + } + assert_equals(actual.redirectStart, 0, "redirectStart time"); assert_equals(actual.redirectEnd, 0, "redirectEnd time"); assert_true(actual.secureConnectionStart == undefined || diff --git a/tests/wpt/web-platform-tests/resources/idlharness.js b/tests/wpt/web-platform-tests/resources/idlharness.js index 75ec97e771c..b6a16af4150 100644 --- a/tests/wpt/web-platform-tests/resources/idlharness.js +++ b/tests/wpt/web-platform-tests/resources/idlharness.js @@ -97,6 +97,16 @@ function awaitNCallbacks(n, cb, ctx) { }; } +var fround = (function(){ + if (Math.fround) return Math.fround; + + var arr = new Float32Array(1); + return function fround(n) { + arr[0] = n; + return arr[0]; + }; +})(); + /// IdlArray /// // Entry point self.IdlArray = function() @@ -457,19 +467,42 @@ IdlArray.prototype.assert_type_is = function(value, type) return; case "float": - case "double": + assert_equals(typeof value, "number"); + assert_equals(value, fround(value), "float rounded to 32-bit float should be itself"); + assert_not_equals(value, Infinity); + assert_not_equals(value, -Infinity); + assert_not_equals(value, NaN); + return; + case "DOMHighResTimeStamp": + case "double": + assert_equals(typeof value, "number"); + assert_not_equals(value, Infinity); + assert_not_equals(value, -Infinity); + assert_not_equals(value, NaN); + return; + case "unrestricted float": + assert_equals(typeof value, "number"); + assert_equals(value, fround(value), "unrestricted float rounded to 32-bit float should be itself"); + return; + case "unrestricted double": - // TODO: distinguish these cases assert_equals(typeof value, "number"); return; case "DOMString": + assert_equals(typeof value, "string"); + return; + case "ByteString": + assert_equals(typeof value, "string"); + assert_regexp_match(value, /^[\x00-\x7F]*$/); + return; + case "USVString": - // TODO: https://github.com/w3c/testharness.js/issues/92 assert_equals(typeof value, "string"); + assert_regexp_match(value, /^([\x00-\ud7ff\ue000-\uffff]|[\ud800-\udbff][\udc00-\udfff])*$/); return; case "object": diff --git a/tests/wpt/web-platform-tests/resources/readme.md b/tests/wpt/web-platform-tests/resources/readme.md index 5c5b36c2869..eed90906423 100644 --- a/tests/wpt/web-platform-tests/resources/readme.md +++ b/tests/wpt/web-platform-tests/resources/readme.md @@ -1,4 +1,4 @@ -## Introdution ## +## Introduction ## testharness.js provides a framework for writing low-level tests of browser functionality in javascript. It provides a convenient API for diff --git a/tests/wpt/web-platform-tests/resources/testharness.js b/tests/wpt/web-platform-tests/resources/testharness.js index 7920ccd4e80..b2198b0f1b2 100644 --- a/tests/wpt/web-platform-tests/resources/testharness.js +++ b/tests/wpt/web-platform-tests/resources/testharness.js @@ -697,10 +697,17 @@ policies and contribution forms [3]. // instanceof doesn't work if the node is from another window (like an // iframe's contentWindow): // http://www.w3.org/Bugs/Public/show_bug.cgi?id=12295 - if ("nodeType" in object && - "nodeName" in object && - "nodeValue" in object && - "childNodes" in object) { + try { + var has_node_properties = ("nodeType" in object && + "nodeName" in object && + "nodeValue" in object && + "childNodes" in object); + } catch (e) { + // We're probably cross-origin, which means we aren't a node + return false; + } + + if (has_node_properties) { try { object.nodeType; } catch (e) { @@ -713,6 +720,44 @@ policies and contribution forms [3]. return false; } + var replacements = { + "0": "0", + "1": "x01", + "2": "x02", + "3": "x03", + "4": "x04", + "5": "x05", + "6": "x06", + "7": "x07", + "8": "b", + "9": "t", + "10": "n", + "11": "v", + "12": "f", + "13": "r", + "14": "x0e", + "15": "x0f", + "16": "x10", + "17": "x11", + "18": "x12", + "19": "x13", + "20": "x14", + "21": "x15", + "22": "x16", + "23": "x17", + "24": "x18", + "25": "x19", + "26": "x1a", + "27": "x1b", + "28": "x1c", + "29": "x1d", + "30": "x1e", + "31": "x1f", + "0xfffd": "ufffd", + "0xfffe": "ufffe", + "0xffff": "uffff", + }; + /* * Convert a value to a nice, human-readable string */ @@ -734,43 +779,9 @@ policies and contribution forms [3]. switch (typeof val) { case "string": val = val.replace("\\", "\\\\"); - for (var i = 0; i < 32; i++) { - var replace = "\\"; - switch (i) { - case 0: replace += "0"; break; - case 1: replace += "x01"; break; - case 2: replace += "x02"; break; - case 3: replace += "x03"; break; - case 4: replace += "x04"; break; - case 5: replace += "x05"; break; - case 6: replace += "x06"; break; - case 7: replace += "x07"; break; - case 8: replace += "b"; break; - case 9: replace += "t"; break; - case 10: replace += "n"; break; - case 11: replace += "v"; break; - case 12: replace += "f"; break; - case 13: replace += "r"; break; - case 14: replace += "x0e"; break; - case 15: replace += "x0f"; break; - case 16: replace += "x10"; break; - case 17: replace += "x11"; break; - case 18: replace += "x12"; break; - case 19: replace += "x13"; break; - case 20: replace += "x14"; break; - case 21: replace += "x15"; break; - case 22: replace += "x16"; break; - case 23: replace += "x17"; break; - case 24: replace += "x18"; break; - case 25: replace += "x19"; break; - case 26: replace += "x1a"; break; - case 27: replace += "x1b"; break; - case 28: replace += "x1c"; break; - case 29: replace += "x1d"; break; - case 30: replace += "x1e"; break; - case 31: replace += "x1f"; break; - } - val = val.replace(RegExp(String.fromCharCode(i), "g"), replace); + for (var p in replacements) { + var replace = "\\" + replacements[p]; + val = val.replace(RegExp(String.fromCharCode(p), "g"), replace); } return '"' + val.replace(/"/g, '\\"') + '"'; case "boolean": @@ -818,7 +829,12 @@ policies and contribution forms [3]. /* falls through */ default: - return typeof val + ' "' + truncate(String(val), 60) + '"'; + try { + return typeof val + ' "' + truncate(String(val), 60) + '"'; + } catch(e) { + return ("[stringifying object threw " + String(e) + + " with type " + String(typeof e) + "]"); + } } } expose(format_value, "format_value"); @@ -1438,7 +1454,7 @@ policies and contribution forms [3]. var args = Array.prototype.slice.call(arguments, 2); return setTimeout(this.step_func(function() { return f.apply(test_this, args); - }, timeout * tests.timeout_multiplier)); + }), timeout * tests.timeout_multiplier); } Test.prototype.add_cleanup = function(callback) { diff --git a/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/cache-add.https.html b/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/cache-add.https.html index 57e74b750f7..b353ae02269 100644 --- a/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/cache-add.https.html +++ b/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/cache-add.https.html @@ -4,7 +4,7 @@ <meta name="timeout" content="long"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> -<script src="../../service-workers/resources/test-helpers.js"></script> +<script src="../../service-worker/resources/test-helpers.sub.js"></script> <script> service_worker_test('../script-tests/cache-add.js'); </script> diff --git a/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/cache-delete.https.html b/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/cache-delete.https.html index 7a5a43fd9e4..81da300020c 100644 --- a/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/cache-delete.https.html +++ b/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/cache-delete.https.html @@ -4,7 +4,7 @@ <meta name="timeout" content="long"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> -<script src="../../service-workers/resources/test-helpers.js"></script> +<script src="../../service-worker/resources/test-helpers.sub.js"></script> <script> service_worker_test('../script-tests/cache-delete.js'); </script> diff --git a/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/cache-match.https.html b/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/cache-match.https.html index 6126568fb46..59ef34bb7b9 100644 --- a/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/cache-match.https.html +++ b/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/cache-match.https.html @@ -4,7 +4,7 @@ <meta name="timeout" content="long"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> -<script src="../../service-workers/resources/test-helpers.js"></script> +<script src="../../service-worker/resources/test-helpers.sub.js"></script> <script> service_worker_test('../script-tests/cache-match.js'); </script> diff --git a/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/cache-matchAll.https.html b/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/cache-matchAll.https.html index 878fe1209f3..a2aa1f242e7 100644 --- a/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/cache-matchAll.https.html +++ b/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/cache-matchAll.https.html @@ -4,7 +4,7 @@ <meta name="timeout" content="long"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> -<script src="../../service-workers/resources/test-helpers.js"></script> +<script src="../../service-worker/resources/test-helpers.sub.js"></script> <script> service_worker_test('../script-tests/cache-matchAll.js'); </script> diff --git a/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/cache-put.https.html b/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/cache-put.https.html index d67f9391a75..9602e3bfcb4 100644 --- a/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/cache-put.https.html +++ b/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/cache-put.https.html @@ -4,7 +4,7 @@ <meta name="timeout" content="long"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> -<script src="../../service-workers/resources/test-helpers.js"></script> +<script src="../../service-worker/resources/test-helpers.sub.js"></script> <script> service_worker_test('../script-tests/cache-put.js'); </script> diff --git a/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage-keys.https.html b/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage-keys.https.html index ec7e14b7af3..1d1005dccc7 100644 --- a/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage-keys.https.html +++ b/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage-keys.https.html @@ -4,7 +4,7 @@ <meta name="timeout" content="long"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> -<script src="../../service-workers/resources/test-helpers.js"></script> +<script src="../../service-worker/resources/test-helpers.sub.js"></script> <script> service_worker_test('../script-tests/cache-storage-keys.js'); </script> diff --git a/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage-match.https.html b/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage-match.https.html index 937f143ebb0..6c4b72885fd 100644 --- a/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage-match.https.html +++ b/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage-match.https.html @@ -4,7 +4,7 @@ <meta name="timeout" content="long"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> -<script src="../../service-workers/resources/test-helpers.js"></script> +<script src="../../service-worker/resources/test-helpers.sub.js"></script> <script> service_worker_test('../script-tests/cache-storage-match.js'); </script> diff --git a/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage.https.html b/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage.https.html index 62c6b63572c..5e240a3b699 100644 --- a/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage.https.html +++ b/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage.https.html @@ -4,7 +4,7 @@ <meta name="timeout" content="long"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> -<script src="../../service-workers/resources/test-helpers.js"></script> +<script src="../../service-worker/resources/test-helpers.sub.js"></script> <script> service_worker_test('../script-tests/cache-storage.js'); </script> diff --git a/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/credentials.html b/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/credentials.html index f2d8838f2a6..116fd9ca904 100644 --- a/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/credentials.html +++ b/tests/wpt/web-platform-tests/service-workers/cache-storage/serviceworker/credentials.html @@ -4,7 +4,7 @@ <link rel="help" href="https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#cache-storage"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> -<script src="../../service-workers/resources/test-helpers.js"></script> +<script src="../../service-worker/resources/test-helpers.sub.js"></script> <style>iframe { display: none; }</style> <script> diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event.https.html index 9869f3b2799..4d7e9a4da1b 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event.https.html @@ -440,8 +440,9 @@ async_test(function(t) { .then(function() { return with_iframe(scope); }) .then(function(f) { frame = f; + assert_equals(frame.contentWindow.document.body.textContent, 'default'); var tests = cacheTypes.map(function(type) { - return new Promise(function(resolve) { + return new Promise(function(resolve, reject) { return frame.contentWindow.fetch(scope + '=' + type, {cache: type}) .then(function(response) { return response.text(); }) @@ -450,10 +451,25 @@ async_test(function(t) { assert_equals(response_text, expected, 'Service Worker should respond to fetch with the correct type'); }) - .then(resolve); + .then(resolve) + .catch(reject); }); }); - return Promise.all(tests); + }) + .then(function() { + return new Promise(function(resolve, reject) { + frame.addEventListener('load', function onLoad() { + frame.removeEventListener('load', onLoad); + try { + assert_equals(frame.contentWindow.document.body.textContent, + 'no-cache'); + resolve(); + } catch (e) { + reject(e); + } + }); + frame.contentWindow.location.reload(); + }); }) .then(function() { frame.remove(); @@ -462,5 +478,55 @@ async_test(function(t) { .catch(unreached_rejection(t)); }, 'Service Worker responds to fetch event with the correct cache types'); +async_test(function(t) { + var scope = 'resources/simple.html?eventsource'; + var frame; + + function test_eventsource(opts) { + return new Promise(function(resolve, reject) { + var eventSource = new frame.contentWindow.EventSource(scope, opts); + eventSource.addEventListener('message', function(msg) { + eventSource.close(); + try { + var data = JSON.parse(msg.data); + assert_equals(data.mode, 'cors', + 'EventSource should make CORS requests.'); + assert_equals(data.cache, 'no-store', + 'EventSource should bypass the http cache.'); + var expectedCredentials = opts.withCredentials ? 'include' + : 'same-origin'; + assert_equals(data.credentials, expectedCredentials, + 'EventSource should pass correct credentials mode.'); + resolve(); + } catch (e) { + reject(e); + } + }); + eventSource.addEventListener('error', function(e) { + eventSource.close(); + reject('The EventSource fired an error event.'); + }); + }); + } + + service_worker_unregister_and_register(t, worker, scope) + .then(function(reg) { + return wait_for_state(t, reg.installing, 'activated'); + }) + .then(function() { return with_iframe(scope); }) + .then(function(f) { + frame = f; + return test_eventsource({ withCredentials: false }); + }) + .then(function() { + return test_eventsource({ withCredentials: true }); + }) + .then(function() { + frame.remove(); + return service_worker_unregister_and_done(t, scope); + }) + .catch(unreached_rejection(t)); + }, 'Service Worker should intercept EventSource'); + </script> </body> diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-test-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-test-worker.js index 5180c30f7d4..44ea828c686 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-test-worker.js +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-test-worker.js @@ -95,6 +95,22 @@ function handleCache(event) { event.respondWith(new Response(event.request.cache)); } +function handleEventSource(event) { + if (event.request.mode === 'navigate') { + return; + } + var data = { + mode: event.request.mode, + cache: event.request.cache, + credentials: event.request.credentials + }; + var body = 'data:' + JSON.stringify(data) + '\n\n'; + event.respondWith(new Response(body, { + headers: { 'Content-Type': 'text/event-stream' } + } + )); +} + self.addEventListener('fetch', function(event) { var url = event.request.url; var handlers = [ @@ -112,6 +128,7 @@ self.addEventListener('fetch', function(event) { { pattern: '?used-check', fn: handleUsedCheck }, { pattern: '?fragment-check', fn: handleFragmentCheck }, { pattern: '?cache', fn: handleCache }, + { pattern: '?eventsource', fn: handleEventSource }, ]; var handler = null; diff --git a/tests/wpt/web-platform-tests/service-workers/service-workers/resources/test-helpers.js b/tests/wpt/web-platform-tests/service-workers/service-workers/resources/test-helpers.js deleted file mode 100644 index 147ea612c2f..00000000000 --- a/tests/wpt/web-platform-tests/service-workers/service-workers/resources/test-helpers.js +++ /dev/null @@ -1,222 +0,0 @@ -// Adapter for testharness.js-style tests with Service Workers - -function service_worker_unregister_and_register(test, url, scope) { - if (!scope || scope.length == 0) - return Promise.reject(new Error('tests must define a scope')); - - var options = { scope: scope }; - return service_worker_unregister(test, scope) - .then(function() { - return navigator.serviceWorker.register(url, options); - }) - .catch(unreached_rejection(test, - 'unregister and register should not fail')); -} - -function service_worker_unregister(test, documentUrl) { - return navigator.serviceWorker.getRegistration(documentUrl) - .then(function(registration) { - if (registration) - return registration.unregister(); - }) - .catch(unreached_rejection(test, 'unregister should not fail')); -} - -function service_worker_unregister_and_done(test, scope) { - return service_worker_unregister(test, scope) - .then(test.done.bind(test)); -} - -function unreached_fulfillment(test, prefix) { - return test.step_func(function(result) { - var error_prefix = prefix || 'unexpected fulfillment'; - assert_unreached(error_prefix + ': ' + result); - }); -} - -// Rejection-specific helper that provides more details -function unreached_rejection(test, prefix) { - return test.step_func(function(error) { - var reason = error.message || error.name || error; - var error_prefix = prefix || 'unexpected rejection'; - assert_unreached(error_prefix + ': ' + reason); - }); -} - -// Adds an iframe to the document and returns a promise that resolves to the -// iframe when it finishes loading. The caller is responsible for removing the -// iframe later if needed. -function with_iframe(url) { - return new Promise(function(resolve) { - var frame = document.createElement('iframe'); - frame.src = url; - frame.onload = function() { resolve(frame); }; - document.body.appendChild(frame); - }); -} - -function normalizeURL(url) { - return new URL(url, self.location).toString().replace(/#.*$/, ''); -} - -function wait_for_update(test, registration) { - if (!registration || registration.unregister == undefined) { - return Promise.reject(new Error( - 'wait_for_update must be passed a ServiceWorkerRegistration')); - } - - return new Promise(test.step_func(function(resolve) { - registration.addEventListener('updatefound', test.step_func(function() { - resolve(registration.installing); - })); - })); -} - -function wait_for_state(test, worker, state) { - if (!worker || worker.state == undefined) { - return Promise.reject(new Error( - 'wait_for_state must be passed a ServiceWorker')); - } - if (worker.state === state) - return Promise.resolve(state); - - if (state === 'installing') { - switch (worker.state) { - case 'installed': - case 'activating': - case 'activated': - case 'redundant': - return Promise.reject(new Error( - 'worker is ' + worker.state + ' but waiting for ' + state)); - } - } - - if (state === 'installed') { - switch (worker.state) { - case 'activating': - case 'activated': - case 'redundant': - return Promise.reject(new Error( - 'worker is ' + worker.state + ' but waiting for ' + state)); - } - } - - if (state === 'activating') { - switch (worker.state) { - case 'activated': - case 'redundant': - return Promise.reject(new Error( - 'worker is ' + worker.state + ' but waiting for ' + state)); - } - } - - if (state === 'activated') { - switch (worker.state) { - case 'redundant': - return Promise.reject(new Error( - 'worker is ' + worker.state + ' but waiting for ' + state)); - } - } - - return new Promise(test.step_func(function(resolve) { - worker.addEventListener('statechange', test.step_func(function() { - if (worker.state === state) - resolve(state); - })); - })); -} - -// Declare a test that runs entirely in the ServiceWorkerGlobalScope. The |url| -// is the service worker script URL. This function: -// - Instantiates a new test with the description specified in |description|. -// The test will succeed if the specified service worker can be successfully -// registered and installed. -// - Creates a new ServiceWorker registration with a scope unique to the current -// document URL. Note that this doesn't allow more than one -// service_worker_test() to be run from the same document. -// - Waits for the new worker to begin installing. -// - Imports tests results from tests running inside the ServiceWorker. -function service_worker_test(url, description) { - // If the document URL is https://example.com/document and the script URL is - // https://example.com/script/worker.js, then the scope would be - // https://example.com/script/scope/document. - var scope = new URL('scope' + window.location.pathname, - new URL(url, window.location)).toString(); - promise_test(function(test) { - return service_worker_unregister_and_register(test, url, scope) - .then(function(registration) { - add_completion_callback(function() { - registration.unregister(); - }); - return wait_for_update(test, registration) - .then(function(worker) { - return fetch_tests_from_worker(worker); - }); - }); - }, description); -} - -function get_host_info() { - var ORIGINAL_HOST = '127.0.0.1'; - var REMOTE_HOST = 'localhost'; - var UNAUTHENTICATED_HOST = 'example.test'; - var HTTP_PORT = 8000; - var HTTPS_PORT = 8443; - try { - // In W3C test, we can get the hostname and port number in config.json - // using wptserve's built-in pipe. - // http://wptserve.readthedocs.org/en/latest/pipes.html#built-in-pipes - HTTP_PORT = eval('{{ports[http][0]}}'); - HTTPS_PORT = eval('{{ports[https][0]}}'); - ORIGINAL_HOST = eval('\'{{host}}\''); - REMOTE_HOST = 'www1.' + ORIGINAL_HOST; - } catch (e) { - } - return { - HTTP_ORIGIN: 'http://' + ORIGINAL_HOST + ':' + HTTP_PORT, - HTTPS_ORIGIN: 'https://' + ORIGINAL_HOST + ':' + HTTPS_PORT, - HTTP_REMOTE_ORIGIN: 'http://' + REMOTE_HOST + ':' + HTTP_PORT, - HTTPS_REMOTE_ORIGIN: 'https://' + REMOTE_HOST + ':' + HTTPS_PORT, - UNAUTHENTICATED_ORIGIN: 'http://' + UNAUTHENTICATED_HOST + ':' + HTTP_PORT - }; -} - -function base_path() { - return location.pathname.replace(/\/[^\/]*$/, '/'); -} - -function test_login(test, origin, username, password, cookie) { - return new Promise(function(resolve, reject) { - with_iframe( - origin + - '/serviceworker/resources/fetch-access-control-login.html') - .then(test.step_func(function(frame) { - var channel = new MessageChannel(); - channel.port1.onmessage = test.step_func(function() { - frame.remove(); - resolve(); - }); - frame.contentWindow.postMessage( - {username: username, password: password, cookie: cookie}, - origin, [channel.port2]); - })); - }); -} - -function login(test) { - return test_login(test, 'http://127.0.0.1:8000', - 'username1', 'password1', 'cookie1') - .then(function() { - return test_login(test, 'http://localhost:8000', - 'username2', 'password2', 'cookie2'); - }); -} - -function login_https(test) { - return test_login(test, 'https://127.0.0.1:8443', - 'username1s', 'password1s', 'cookie1') - .then(function() { - return test_login(test, 'https://localhost:8443', - 'username2s', 'password2s', 'cookie2'); - }); -} diff --git a/tests/wpt/web-platform-tests/shadow-dom/leaktests/html-collection.html b/tests/wpt/web-platform-tests/shadow-dom/leaktests/html-collection.html new file mode 100644 index 00000000000..4cda6601339 --- /dev/null +++ b/tests/wpt/web-platform-tests/shadow-dom/leaktests/html-collection.html @@ -0,0 +1,72 @@ +<!DOCTYPE html> +<html> +<head> +<meta name='author' title='Google' href='http://www.google.com'> +<meta name='assert' content='document attributes that returns HTMLCollection should not expose nodes in shadow tree.'> +<link rel='help' href='https://w3c.github.io/webcomponents/spec/shadow/'> +<script src='/resources/testharness.js'></script> +<script src='/resources/testharnessreport.js'></script> +</head> +<body> +<template id='collection-template'> + <img> + <embed></embed> + <plugin></plugin> + <applet></applet> + <object type='application/x-java-applet'></object> + <a href='http://example.com'></a> + <a name='test'></a> + <form name='test'></form> + <script></script> +</template> +<div id='doc'></div> +<div id='host'></div> +</body> +<script> +'use strict'; + +function fillTemplate(root, prefix) { + var tmpl = document.getElementById('collection-template'); + root.appendChild(document.importNode(tmpl.content, true)); + for (var i = 0; i < root.childNodes.length; ++i) { + var el = root.childNodes[i]; + if (el.nodeType != 1) + continue; + el.id = prefix + el.tagName.toLowerCase(); + } +} + +// Construct subtree with 'doc-*' ids. +var doc = document.getElementById('doc'); +fillTemplate(doc, 'doc-'); + +// Construct shadow subtree with 'shadow-*' ids. +var host = document.getElementById('host'); +var shadow = host.attachShadow({mode: 'open'}); +fillTemplate(shadow, 'shadow-'); + +function testCollection(collection) { + var elements = document[collection]; + assert_greater_than(elements.length, 0, 'document.' + collection + ' should have at least 1 element.'); + for (var i = 0; i < elements.length; ++i) { + if (elements[i].id) { + assert_equals(elements[i].id.indexOf('shadow-'), -1, 'document.' + collection + ' should not contain elements in shadow tree.'); + } + } +} + +var testParams = [ + ['document.scripts should not contain shadow nodes', 'scripts'], + ['document.all should not contain shadow nodes', 'all'], + ['document.forms should not contain shadow nodes', 'forms'], + ['document.images should not contain shadow nodes', 'images'], + ['document.links should not contain shadow nodes', 'links'], + ['document.anchors should not contain shadow nodes', 'anchors'], + ['document.embeds should not contain shadow nodes', 'embeds'], + ['document.plugins should not contain shadow nodes', 'plugins'], + ['document.applets should not contain shadow nodes', 'applets']]; + +generate_tests(testCollection, testParams); + +</script> +</html> diff --git a/tests/wpt/web-platform-tests/shadow-dom/resources/shadow-dom-utils.js b/tests/wpt/web-platform-tests/shadow-dom/resources/shadow-dom-utils.js index e00d4d14675..07db343365e 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/resources/shadow-dom-utils.js +++ b/tests/wpt/web-platform-tests/shadow-dom/resources/shadow-dom-utils.js @@ -115,7 +115,7 @@ function createTestMediaPlayer(d) { '</div>' + '</div>'; - var playerShadowRoot = d.querySelector('#player-shadow-host').createShadowRoot(); + var playerShadowRoot = d.querySelector('#player-shadow-host').attachShadow({mode: 'open'}); playerShadowRoot.innerHTML = '' + '<div id="controls">' + '<button class="play-button">PLAY</button>' + @@ -131,10 +131,10 @@ function createTestMediaPlayer(d) { '</div>' + '</div>'; - var timeLineShadowRoot = playerShadowRoot.querySelector('#timeline-shadow-host').createShadowRoot(); + var timeLineShadowRoot = playerShadowRoot.querySelector('#timeline-shadow-host').attachShadow({mode: 'open'}); timeLineShadowRoot.innerHTML = '<div class="slider-thumb" id="timeline-slider-thumb"></div>'; - var volumeShadowRoot = playerShadowRoot.querySelector('#volume-shadow-host').createShadowRoot(); + var volumeShadowRoot = playerShadowRoot.querySelector('#volume-shadow-host').attachShadow({mode: 'open'}); volumeShadowRoot.innerHTML = '<div class="slider-thumb" id="volume-slider-thumb"></div>'; return { diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/extensions-to-element-interface/methods/test-001.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/extensions-to-element-interface/methods/test-001.html index d6077da9302..d226c5918a2 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/extensions-to-element-interface/methods/test-001.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/extensions-to-element-interface/methods/test-001.html @@ -13,7 +13,7 @@ policies and contribution forms [3]. <title>Shadow DOM Test: A_10_02_02_01</title> <link rel="author" title="Sergey G. Grekhov" href="mailto:sgrekhov@unipro.ru"> <link rel="help" href="http://www.w3.org/TR/2013/WD-shadow-dom-20130514/#shadow-aware-methods"> -<meta name="assert" content="Extensions to Element Interface: createShadowRoot method creates new instance of Shadow root object"> +<meta name="assert" content="Extensions to Element Interface: attachShadow method creates new instance of Shadow root object"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="../../../../../html/resources/common.js"></script> @@ -28,9 +28,9 @@ test(function () { var host = d.createElement('div'); d.body.appendChild(host); - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); - assert_true(s instanceof ShadowRoot, 'createShadowRoot() method should create new instance ' + + assert_true(s instanceof ShadowRoot, 'attachShadow() method should create new instance ' + 'of ShadowRoot object'); }, 'A_10_02_02_01_T01'); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/extensions-to-element-interface/methods/test-002.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/extensions-to-element-interface/methods/test-002.html index 3a2e69165d8..40e527c8f4a 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/extensions-to-element-interface/methods/test-002.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/extensions-to-element-interface/methods/test-002.html @@ -13,7 +13,7 @@ policies and contribution forms [3]. <title>Shadow DOM Test: A_10_02_02_02</title> <link rel="author" title="Sergey G. Grekhov" href="mailto:sgrekhov@unipro.ru"> <link rel="help" href="http://www.w3.org/TR/2013/WD-shadow-dom-20130514/#shadow-aware-methods"> -<meta name="assert" content="Extensions to Element Interface: createShadowRoot method"> +<meta name="assert" content="Extensions to Element Interface: attachShadow method"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="../../../../../html/resources/common.js"></script> @@ -33,10 +33,10 @@ test(unit(function (ctx) { span.innerHTML = 'Some text'; host.appendChild(span); - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); // span should become invisible as shadow root content - assert_equals(span.offsetTop, 0, 'createShadowRoot() method should establish ' + + assert_equals(span.offsetTop, 0, 'attachShadow() method should establish ' + 'the context object as the shadow host of the ShadowRoot object'); }), 'A_10_02_02_02_T01'); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/extensions-to-event-interface/event-path-001.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/extensions-to-event-interface/event-path-001.html index e859a847b34..9faab3c642e 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/extensions-to-event-interface/event-path-001.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/extensions-to-event-interface/event-path-001.html @@ -28,7 +28,7 @@ t.step(unit(function(ctx) { var doc = newRenderedHTMLDocument(ctx); var host = doc.createElement('div'); - var shadowRoot = host.createShadowRoot(); + var shadowRoot = host.attachShadow({mode: 'open'}); var child = doc.createElement('div'); doc.body.appendChild(host); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/activeElement-confirm-return-null.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/activeElement-confirm-return-null.html index d305d9b1894..f0c55ff0156 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/activeElement-confirm-return-null.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/activeElement-confirm-return-null.html @@ -29,7 +29,7 @@ test(unit(function (ctx) { var host = d.createElement('div'); d.body.appendChild(host); - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); assert_equals(s.activeElement, null, 'activeElement attribute of the ShadowRoot must return null if there\'s no focused element'); @@ -42,7 +42,7 @@ test(unit(function (ctx) { var host = d.createElement('div'); d.body.appendChild(host); - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var inp = d.createElement('input'); d.body.appendChild(inp); @@ -60,7 +60,7 @@ test(unit(function (ctx) { var host = d.createElement('div'); d.body.appendChild(host); - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var inp = d.createElement('input'); d.body.appendChild(inp); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-007.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-007.html index 22052c343a3..b7f1f5c2d8f 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-007.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-007.html @@ -29,7 +29,7 @@ test(unit(function (ctx) { var host = d.createElement('div'); host.setAttribute('id', 'shRoot'); d.body.appendChild(host); - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var inp = d.createElement('input'); inp.setAttribute('type', 'text'); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-009.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-009.html index ab3b314bcc3..db02a42c3f6 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-009.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-009.html @@ -28,7 +28,7 @@ test(unit(function (ctx) { var host = d.createElement('div'); d.body.appendChild(host); - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var span = d.createElement('span'); span.innerHTML = 'Some text'; diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-010.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-010.html index 7ea514ec7c4..2248d689886 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-010.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-010.html @@ -28,7 +28,7 @@ test(unit(function (ctx) { var host = d.createElement('div'); d.body.appendChild(host); - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var span = d.createElement('span'); span.innerHTML = 'Some text'; @@ -48,7 +48,7 @@ test(unit(function (ctx) { var host = d.createElement('div'); d.body.appendChild(host); - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var span = d.createElement('span'); span.setAttribute('id', 'spanId'); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-011.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-011.html index 5b6ced6d1dc..48d22926cda 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-011.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-011.html @@ -28,7 +28,7 @@ test(unit(function (ctx) { var host = d.createElement('div'); d.body.appendChild(host); - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); assert_true(s.styleSheets != null, 'ShadowRoot styleSheets attribute shouldn\'t be null'); assert_equals(s.styleSheets.length, 0, 'attribute must return the shadow root style sheets only'); @@ -42,7 +42,7 @@ test(unit(function (ctx) { var host = d.createElement('div'); d.body.appendChild(host); - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var style = d.createElement('style'); s.appendChild(style); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-012.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-012.html index 43f024cc78d..e87443cb54e 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-012.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-012.html @@ -28,7 +28,7 @@ test(unit(function (ctx) { var host = d.createElement('div'); d.body.appendChild(host); - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); assert_equals(s.nodeType, 11, 'The nodeType attribute of a ShadowRoot ' + 'instance must return DOCUMENT_FRAGMENT_NODE'); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-013.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-013.html index 55f4d94d9ae..6086ed1794a 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-013.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-013.html @@ -28,7 +28,7 @@ test(unit(function (ctx) { var host = d.createElement('div'); d.body.appendChild(host); - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); assert_equals(s.nodeName, '#document-fragment', 'The nodeName attribute of a ShadowRoot instance ' + 'must return "#document-fragment".'); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-001.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-001.html index 892558af536..56f89dd3d45 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-001.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-001.html @@ -28,7 +28,7 @@ test(function () { var el = d.createElement('div'); d.body.appendChild(el); - var s = el.createShadowRoot(); + var s = el.attachShadow({mode: 'open'}); var child = d.createElement('span'); child.setAttribute('id', 'span_id'); @@ -50,7 +50,7 @@ test(function () { var el = d.createElement('div'); d.body.appendChild(el); - var s = el.createShadowRoot(); + var s = el.attachShadow({mode: 'open'}); assert_true(s.getElementById('span_id') == null, ' ShadowRoot getElementById() ' + 'method should return null if matching element not found'); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-004.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-004.html index 70971553b8a..1cd62c4a5ac 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-004.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-004.html @@ -27,7 +27,7 @@ test(unit(function (ctx) { var host = d.createElement('div'); d.body.appendChild(host); - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var span = d.createElement('span'); span.innerHTML = 'Some text'; diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-006.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-006.html index 46ab47faf17..38229ebbade 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-006.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-006.html @@ -44,7 +44,7 @@ test(function () { var el = d.createElement('div'); - var s = el.createShadowRoot(); + var s = el.attachShadow({mode: 'open'}); d.body.appendChild(el); if (typeof(s) == 'undefined' || typeof (s.elementFromPoint(1, 1)) != 'object') { diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-007.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-007.html index 4bf5afb250a..fc29b256f96 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-007.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-007.html @@ -28,7 +28,7 @@ test(function () { var el = d.createElement('div'); d.body.appendChild(el); - var s = el.createShadowRoot(); + var s = el.attachShadow({mode: 'open'}); var span = d.createElement('span'); span.innerHTML = 'Some text'; @@ -47,7 +47,7 @@ test(function () { var el = d.createElement('div'); d.body.appendChild(el); - var s = el.createShadowRoot(); + var s = el.attachShadow({mode: 'open'}); var span = d.createElement('span'); span.innerHTML = 'Some text'; diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-010.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-010.html index 129f316708f..c183962d718 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-010.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-010.html @@ -12,8 +12,8 @@ policies and contribution forms [3]. <head> <title>Shadow DOM Test: A_10_01_02_09</title> <link rel="author" title="Sergey G. Grekhov" href="mailto:sgrekhov@unipro.ru"> -<link rel="help" href="http://www.w3.org/TR/2013/WD-shadow-dom-20130514/#shadow-root-methods"> -<meta name="assert" content="ShadowRoot Object: Invoking the cloneNode() method on a ShadowRoot instance must always throw a DATA_CLONE_ERR exception."> +<link rel="help" href="https://dom.spec.whatwg.org/#dom-node-clonenode"> +<meta name="assert" content="If context object is a shadow root, throw a NotSupportedError exception."> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="../../../../../html/resources/common.js"></script> @@ -24,17 +24,17 @@ policies and contribution forms [3]. <script> test(unit(function (ctx) { var d = newRenderedHTMLDocument(ctx); - var host = d.createElement('div'); d.body.appendChild(host); - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); try { s.cloneNode(); assert_true(false, 'Invoking the cloneNode() method on a ShadowRoot instance must always ' + - 'throw a DATA_CLONE_ERR exception.'); + 'throw a NotSupportedError (code 9) exception.'); } catch (e) { - assert_equals(e.code, 25, 'Wrong exceprion type'); + assert_equals(e.code, 9, 'Wrong exception type'); + assert_equals(e.name, 'NotSupportedError', 'Wrong exception name'); } }), 'A_10_01_02_09_T01'); </script> diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/event-dispatch/test-003.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/event-dispatch/test-003.html index b0a5a30af5b..0e5d663fe8c 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/event-dispatch/test-003.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/event-dispatch/test-003.html @@ -33,7 +33,7 @@ A_05_05_03_T01.step(unit(function (ctx) { d.body.appendChild(host); //Shadow root to play with - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); s.id = 'shadow'; var input1 = d.createElement('input'); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/event-retargeting/test-001.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/event-retargeting/test-001.html index c40b5bfb04a..227d9e18b3f 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/event-retargeting/test-001.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/event-retargeting/test-001.html @@ -35,7 +35,7 @@ A_05_01_01_T1.step(function () { var div = d.createElement('div'); d.body.appendChild(div); - var s = div.createShadowRoot(); + var s = div.attachShadow({mode: 'open'}); var div2 = d.createElement('div'); s.appendChild(div2); @@ -77,7 +77,7 @@ A_05_01_01_T2.step(function () { var div = d.createElement('div'); d.body.appendChild(div); - var s = div.createShadowRoot(); + var s = div.attachShadow({mode: 'open'}); var div2 = d.createElement('div'); s.appendChild(div2); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/event-retargeting/test-003.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/event-retargeting/test-003.html index a79b9cd3137..5e1d9bb321e 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/event-retargeting/test-003.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/event-retargeting/test-003.html @@ -37,11 +37,11 @@ A_05_01_03_T01.step(unit(function (ctx) { '</div>'; var ul = d.querySelector('#shadow-root'); - var s = ul.createShadowRoot(); + var s = ul.attachShadow({mode: 'open'}); //make shadow subtree var div = document.createElement('div'); - div.innerHTML = '<content select=".shadow"><span id="flbk">Fallback item</span></content>'; + div.innerHTML = '<slot name="shadow"><span id="flbk">Fallback item</span></slot>'; s.appendChild(div); d.body.addEventListener('click', A_05_01_03_T01.step_func(function (event) { diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-001.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-001.html index cb7efec60f1..df3935368d8 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-001.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-001.html @@ -34,7 +34,7 @@ A_05_04_01_T01.step(unit(function (ctx) { d.body.appendChild(host); //Shadow root to play with - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var inp1 = d.createElement('input'); inp1.setAttribute('id', 'inp1'); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-002.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-002.html index cea27ce7dca..f2e5ef4871f 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-002.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-002.html @@ -34,7 +34,7 @@ A_05_04_02_T01.step(unit(function (ctx) { d.body.appendChild(host); //Shadow root to play with - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var inp1 = d.createElement('input'); inp1.setAttribute('id', 'inp1'); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-003.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-003.html index edf525c5349..b18dd1ef44e 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-003.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-003.html @@ -34,7 +34,7 @@ A_05_04_03_T01.step(unit(function (ctx) { d.body.appendChild(host); //Shadow root to play with - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var inp1 = d.createElement('input'); inp1.setAttribute('id', 'inp1'); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-004.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-004.html index 7f552b28efb..3d0c78c4874 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-004.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-004.html @@ -34,7 +34,7 @@ A_05_04_04_T01.step(unit(function (ctx) { d.body.appendChild(host); //Shadow root to play with - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var inp1 = d.createElement('input'); inp1.setAttribute('id', 'inp1'); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-005.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-005.html index 883165f0bcf..aae0b20add1 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-005.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-005.html @@ -34,7 +34,7 @@ A_05_04_05_T01.step(unit(function (ctx) { d.body.appendChild(host); //Shadow root to play with - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var inp1 = d.createElement('input'); inp1.setAttribute('id', 'inp1'); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-006.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-006.html index f51f2c4e4e0..645979512a6 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-006.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-006.html @@ -34,7 +34,7 @@ A_05_04_06_T01.step(unit(function (ctx) { d.body.appendChild(host); //Shadow root to play with - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var inp1 = d.createElement('input'); inp1.setAttribute('id', 'inp1'); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-007.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-007.html index 49d3577a4e0..d73cb86e4ea 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-007.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-007.html @@ -34,7 +34,7 @@ A_05_04_07_T01.step(unit(function (ctx) { d.body.appendChild(host); //Shadow root to play with - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var inp1 = d.createElement('input'); inp1.setAttribute('id', 'inp1'); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-008.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-008.html index 430d8916fc1..9661e01c37b 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-008.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-008.html @@ -34,7 +34,7 @@ A_05_04_08_T01.step(unit(function (ctx) { d.body.appendChild(host); //Shadow root to play with - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var inp1 = d.createElement('input'); inp1.setAttribute('id', 'inp1'); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-009.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-009.html index 2d5bebbeb54..73a9623180c 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-009.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/events-created-by-users-do-not-stop/test-009.html @@ -34,7 +34,7 @@ A_05_04_09_T01.step(unit(function (ctx) { d.body.appendChild(host); //Shadow root to play with - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var inp1 = d.createElement('input'); inp1.setAttribute('id', 'inp1'); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/retargeting-focus-events/test-001.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/retargeting-focus-events/test-001.html index 506315fd92e..296346bf120 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/retargeting-focus-events/test-001.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/retargeting-focus-events/test-001.html @@ -38,7 +38,7 @@ A_05_03_01_T01.step(unit(function (ctx) { d.body.appendChild(host); //Shadow root to play with - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var inp1 = d.createElement('input'); inp1.setAttribute('id', 'inp1'); @@ -78,7 +78,7 @@ A_05_03_01_T02.step(unit(function (ctx) { d.body.appendChild(host); //Shadow root to play with - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var inp1 = d.createElement('input'); inp1.setAttribute('id', 'inp1'); @@ -121,7 +121,7 @@ A_05_03_01_T03.step(unit(function (ctx) { d.body.appendChild(host); //Shadow root to play with - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var inp1 = d.createElement('input'); inp1.setAttribute('id', 'inp1'); @@ -161,7 +161,7 @@ A_05_03_01_T04.step(unit(function (ctx) { d.body.appendChild(host); //Shadow root to play with - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var inp1 = d.createElement('input'); inp1.setAttribute('id', 'inp1'); @@ -202,34 +202,34 @@ A_05_03_01_T05.step(unit(function (ctx) { var inp1 = d.createElement('input'); inp1.setAttribute('id', 'inp1'); inp1.setAttribute('type', 'checkbox'); - inp1.setAttribute('class', 'clazz1'); + inp1.setAttribute('slot', 'slot1'); host.appendChild(inp1); var inp2 = d.createElement('input'); inp2.setAttribute('id', 'inp2'); inp2.setAttribute('type', 'checkbox'); - inp2.setAttribute('class', 'clazz2'); + inp2.setAttribute('slot', 'slot2'); host.appendChild(inp2); var inp3 = d.createElement('input'); inp3.setAttribute('id', 'inp3'); inp3.setAttribute('type', 'checkbox'); - inp3.setAttribute('class', 'clazz1'); + inp3.setAttribute('slot', 'slot1'); host.appendChild(inp3); //Shadow root to play with - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var shadowDiv = document.createElement('div'); - shadowDiv.innerHTML = '<content select=".clazz1"></content>'; + shadowDiv.innerHTML = '<slot name="slot1"></slot>'; s.appendChild(shadowDiv); //element outside the shadow tree var inp4 = d.createElement('input'); inp4.setAttribute('id', 'inp4'); inp4.setAttribute('type', 'checkbox'); - inp4.setAttribute('class', 'clazz1'); + inp4.setAttribute('slot', 'slot1'); d.body.appendChild(inp4); inp1.focus(); @@ -268,34 +268,34 @@ A_05_03_01_T06.step(unit(function (ctx) { var inp1 = d.createElement('input'); inp1.setAttribute('id', 'inp1'); inp1.setAttribute('type', 'checkbox'); - inp1.setAttribute('class', 'clazz1'); + inp1.setAttribute('slot', 'slot1'); host.appendChild(inp1); var inp2 = d.createElement('input'); inp2.setAttribute('id', 'inp2'); inp2.setAttribute('type', 'checkbox'); - inp2.setAttribute('class', 'clazz2'); + inp2.setAttribute('slot', 'slot2'); host.appendChild(inp2); var inp3 = d.createElement('input'); inp3.setAttribute('id', 'inp3'); inp3.setAttribute('type', 'checkbox'); - inp3.setAttribute('class', 'clazz1'); + inp3.setAttribute('slot', 'slot1'); host.appendChild(inp3); //Shadow root to play with - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var shadowDiv = document.createElement('div'); - shadowDiv.innerHTML = '<content select=".clazz1"></content>'; + shadowDiv.innerHTML = '<slot name="slot1"></slot>'; s.appendChild(shadowDiv); //element outside the shadow tree var inp4 = d.createElement('input'); inp4.setAttribute('id', 'inp4'); inp4.setAttribute('type', 'checkbox'); - inp4.setAttribute('class', 'clazz1'); + inp4.setAttribute('slot', 'slot1'); d.body.appendChild(inp4); inp4.focus(); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/retargeting-relatedtarget/test-001.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/retargeting-relatedtarget/test-001.html index a791b4ce046..ef9a24113f9 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/retargeting-relatedtarget/test-001.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/retargeting-relatedtarget/test-001.html @@ -34,7 +34,7 @@ A_05_02_01_T01.step(unit(function (ctx) { d.body.appendChild(host); //Shadow root to play with - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var div1 = d.createElement('div'); div1.setAttribute('style', 'height:40px; width:100%'); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/retargeting-relatedtarget/test-002.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/retargeting-relatedtarget/test-002.html index 317537d2f38..22be1371322 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/retargeting-relatedtarget/test-002.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/retargeting-relatedtarget/test-002.html @@ -34,7 +34,7 @@ A_05_02_02_T01.step(unit(function (ctx) { d.body.appendChild(host); //Shadow root to play with - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var div1 = d.createElement('div'); div1.setAttribute('style', 'height:100%; width:100%'); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/retargeting-relatedtarget/test-003.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/retargeting-relatedtarget/test-003.html index 377550239b5..3e8d6709e40 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/retargeting-relatedtarget/test-003.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/retargeting-relatedtarget/test-003.html @@ -12,8 +12,8 @@ policies and contribution forms [3]. <head> <title>Shadow DOM Test: A_05_02_03</title> <link rel="author" title="Sergey G. Grekhov" href="mailto:sgrekhov@unipro.ru"> -<link rel="help" href="http://www.w3.org/TR/2013/WD-shadow-dom-201305214#retargeting-related-target"> -<meta name="assert" content="Retargeting relatedTarget:Event listeners must not be invoked on a node for which the target and relatedTarget are the same."> +<link rel="help" href="https://w3c.github.io/webcomponents/spec/shadow/#event-relatedtarget-retargeting"> +<meta name="assert" content="The value of the Event object's relatedTarget attribute must be the result of the retargeting algorithm with the event's currentTarget and relatedTarget as input. The result is called a relative related target."> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="../../../../html/resources/common.js"></script> @@ -34,27 +34,19 @@ A_05_02_03_T01.step(unit(function (ctx) { d.body.appendChild(host); //Shadow root to play with - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var div1 = d.createElement('div'); div1.setAttribute('style', 'height:100%; width:100%'); div1.setAttribute('id', 'div1'); s.appendChild(div1); - var div2 = d.createElement('div'); - div2.setAttribute('style', 'height:100%; width:100%'); - div2.setAttribute('id', 'div2'); - s.appendChild(div2); - - s.addEventListener('mouseover', A_05_02_03_T01.step_func(function(event) { - assert_true(false, 'Event listeners shouldn\'t be invoked if target and relatedTarget are the same'); + host.addEventListener('mouseover', A_05_02_03_T01.step_func(function(event) { + assert_unreached('Event listeners shouldn\'t be invoked if relative target and relative related target are the same'); }), false); - - var evt = document.createEvent("MouseEvents"); - evt.initMouseEvent("mouseover", true, false, window, - 0, 10, 10, 10, 10, false, false, false, false, 0, div1); - + var evt = new MouseEvent("mouseover", + { relatedTarget: div1, relatedTargetScoped: true }); div1.dispatchEvent(evt); A_05_02_03_T01.done(); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/test-001.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/test-001.html index cea9294c289..4e56c405105 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/test-001.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/events/test-001.html @@ -36,7 +36,7 @@ A_05_00_01_T1.step(function () { var div = d.createElement('div'); d.body.appendChild(div); - var s = div.createShadowRoot(); + var s = div.attachShadow({mode: 'open'}); var div2 = d.createElement('div'); s.appendChild(div2); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-and-their-shadow-trees/test-001.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-and-their-shadow-trees/test-001.html deleted file mode 100644 index 126876367a4..00000000000 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-and-their-shadow-trees/test-001.html +++ /dev/null @@ -1,232 +0,0 @@ -<!DOCTYPE html> -<!-- -Distributed under both the W3C Test Suite License [1] and the W3C -3-clause BSD License [2]. To contribute to a W3C Test Suite, see the -policies and contribution forms [3]. - -[1] http://www.w3.org/Consortium/Legal/2008/04-testsuite-license -[2] http://www.w3.org/Consortium/Legal/2008/03-bsd-license -[3] http://www.w3.org/2004/10/27-testcases ---> -<html> -<head> -<title>Shadow DOM Test: A_09_00_01</title> -<link rel="author" title="Sergey G. Grekhov" href="mailto:sgrekhov@unipro.ru"> -<link rel="help" href="http://www.w3.org/TR/2013/WD-shadow-dom-20130514/#html-elements-and-their-shadow-trees"> -<meta name="assert" content="HTML Elements and Their Shadow Trees: If the element can have fallback content, UA should allow the shadow tree to contain at least one insertion point."> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="../../../html/resources/common.js"></script> -<script src="../../resources/shadow-dom-utils.js"></script> -</head> -<body> -<div id="log"></div> -<script> -//test iframe -test(unit(function (ctx) { - - var d = newRenderedHTMLDocument(ctx); - - // create element - var el = d.createElement('iframe'); - d.body.appendChild(el); - - el.innerHTML = '' + - '<span id="shadow">This is a node that should be distributed</span>' + - '<span id="flbk">This is a fallback content</span>'; - - var s = el.createShadowRoot(); - s.innerHTML = '<content select="#shadow"></content>'; - - assert_true(d.querySelector('#shadow').offsetTop > 0, 'Iframe should allow at least one insertion point'); - assert_equals(d.querySelector('#flbk').offsetTop, 0, 'Fallback content shouldn\'t be rendered'); - -}), 'A_09_00_01_T01'); - - -//test object -test(unit(function (ctx) { - - var d = newRenderedHTMLDocument(ctx); - - // create element - var el = d.createElement('object'); - d.body.appendChild(el); - - el.innerHTML = '' + - '<span id="shadow">This is a node that should be distributed</span>' + - '<span id="flbk">This is a fallback content</span>'; - - var s = el.createShadowRoot(); - s.innerHTML = '<content select="#shadow"></content>'; - - assert_true(d.querySelector('#shadow').offsetTop > 0, 'object should allow at least one insertion point'); - assert_equals(d.querySelector('#flbk').offsetTop, 0, 'Fallback content shouldn\'t be rendered'); - -}), 'A_09_00_01_T02'); - - -//test video -test(unit(function (ctx) { - - var d = newRenderedHTMLDocument(ctx); - - // create element - var el = d.createElement('video'); - d.body.appendChild(el); - - el.innerHTML = '' + - '<span id="shadow">This is a node that should be distributed</span>' + - '<span id="flbk">This is a fallback content</span>'; - - var s = el.createShadowRoot(); - s.innerHTML = '<content select="#shadow"></content>'; - - assert_true(d.querySelector('#shadow').offsetTop > 0, 'video should allow at least one insertion point'); - assert_equals(d.querySelector('#flbk').offsetTop, 0, 'Fallback content shouldn\'t be rendered'); - -}), 'A_09_00_01_T03'); - - -//test audio -test(unit(function (ctx) { - - var d = newRenderedHTMLDocument(ctx); - - // create element - var el = d.createElement('audio'); - d.body.appendChild(el); - - el.innerHTML = '' + - '<span id="shadow">This is a node that should be distributed</span>' + - '<span id="flbk">This is a fallback content</span>'; - - var s = el.createShadowRoot(); - s.innerHTML = '<content select="#shadow"></content>'; - - assert_true(d.querySelector('#shadow').offsetTop > 0, 'audio should allow at least one insertion point'); - assert_equals(d.querySelector('#flbk').offsetTop, 0, 'Fallback content shouldn\'t be rendered'); - -}), 'A_09_00_01_T04'); - - -//test canvas -test(unit(function (ctx) { - - var d = newRenderedHTMLDocument(ctx); - - // create element - var el = d.createElement('canvas'); - d.body.appendChild(el); - - el.innerHTML = '' + - '<span id="shadow">This is a node that should be distributed</span>' + - '<span id="flbk">This is a fallback content</span>'; - - var s = el.createShadowRoot(); - s.innerHTML = '<content select="#shadow"></content>'; - - assert_true(d.querySelector('#shadow').offsetTop > 0, 'canvas should allow at least one insertion point'); - assert_equals(d.querySelector('#flbk').offsetTop, 0, 'Fallback content shouldn\'t be rendered'); - -}), 'A_09_00_01_T05'); - - -//test map -test(unit(function (ctx) { - - var d = newRenderedHTMLDocument(ctx); - - var img = d.createElement('img'); - img.setAttribute('usemap', '#theMap'); - img.setAttribute('width', '20px'); - img.setAttribute('height', '20px'); - d.body.appendChild(img); - - - // create element - var el = d.createElement('map'); - el.setAttribute('name', 'theMap'); - d.body.appendChild(el); - - el.innerHTML = '' + - '<span id="shadow">This is a node that should be distributed</span>' + - '<span id="flbk">This is a fallback content</span>'; - - - var s = el.createShadowRoot(); - s.innerHTML = '<content select="#shadow"></content>'; - - assert_true(d.querySelector('#shadow').offsetTop > 0, 'map should allow at least one insertion point'); - assert_equals(d.querySelector('#flbk').offsetTop, 0, 'Fallback content shouldn\'t be rendered'); - -}), 'A_09_00_01_T06'); - - -//test textarea -test(unit(function (ctx) { - - var d = newRenderedHTMLDocument(ctx); - - // create element - var el = d.createElement('textarea'); - d.body.appendChild(el); - - el.innerHTML = '' + - '<span id="shadow">This is a node that should be distributed</span>' + - '<span id="flbk">This is a fallback content</span>'; - - var s = el.createShadowRoot(); - s.innerHTML = '<content select="#shadow"></content>'; - - assert_true(d.querySelector('#shadow').offsetTop > 0, 'textarea should allow at least one insertion point'); - assert_equals(d.querySelector('#flbk').offsetTop, 0, 'Fallback content shouldn\'t be rendered'); - -}), 'A_09_00_01_T07'); - - -//test progress -test(unit(function (ctx) { - - var d = newRenderedHTMLDocument(ctx); - - // create element - var el = d.createElement('progress'); - d.body.appendChild(el); - - el.innerHTML = '' + - '<span id="shadow">This is a node that should be distributed</span>' + - '<span id="flbk">This is a fallback content</span>'; - - var s = el.createShadowRoot(); - s.innerHTML = '<content select="#shadow"></content>'; - - assert_true(d.querySelector('#shadow').offsetTop > 0, 'progress should allow at least one insertion point'); - assert_equals(d.querySelector('#flbk').offsetTop, 0, 'Fallback content shouldn\'t be rendered'); - -}), 'A_09_00_01_T08'); - - -//test meter -test(unit(function (ctx) { - - var d = newRenderedHTMLDocument(ctx); - - // create element - var el = d.createElement('meter'); - d.body.appendChild(el); - - el.innerHTML = '' + - '<span id="shadow">This is a node that should be distributed</span>' + - '<span id="flbk">This is a fallback content</span>'; - - var s = el.createShadowRoot(); - s.innerHTML = '<content select="#shadow"></content>'; - - assert_true(d.querySelector('#shadow').offsetTop > 0, 'meter should allow at least one insertion point'); - assert_equals(d.querySelector('#flbk').offsetTop, 0, 'Fallback content shouldn\'t be rendered'); - -}), 'A_09_00_01_T09'); -</script> -</body> -</html> diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-and-their-shadow-trees/test-002.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-and-their-shadow-trees/test-002.html deleted file mode 100644 index 8c2c6575ae7..00000000000 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-and-their-shadow-trees/test-002.html +++ /dev/null @@ -1,82 +0,0 @@ -<!DOCTYPE html> -<!-- -Distributed under both the W3C Test Suite License [1] and the W3C -3-clause BSD License [2]. To contribute to a W3C Test Suite, see the -policies and contribution forms [3]. - -[1] http://www.w3.org/Consortium/Legal/2008/04-testsuite-license -[2] http://www.w3.org/Consortium/Legal/2008/03-bsd-license -[3] http://www.w3.org/2004/10/27-testcases ---> -<html> -<head> -<title>Shadow DOM Test: A_09_00_02</title> -<link rel="author" title="Sergey G. Grekhov" href="mailto:sgrekhov@unipro.ru"> -<link rel="help" href="http://www.w3.org/TR/2013/WD-shadow-dom-20130514/#html-elements-and-their-shadow-trees"> -<meta name="assert" content="HTML Elements and Their Shadow Trees: Elements that have no fallback content should allow the shadow tree to contain no insertion points or an insertion point that matches nothing"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="../../../html/resources/common.js"></script> -<script src="../../resources/shadow-dom-utils.js"></script> -</head> -<body> -<div id="log"></div> -<script> -//test img -test(unit(function (ctx) { - - var d = newRenderedHTMLDocument(ctx); - - // create element - var el = d.createElement('img'); - d.body.appendChild(el); - - var s = el.createShadowRoot(); - - s.innerHTML = '<content id="cont" select="#shadow"></content>'; - - assert_true(s.querySelector('#cont') != null, 'img should allow one insertion point ' + - 'that matches nothing'); - -}), 'A_09_00_02_T01'); - - -//test embed -test(unit(function (ctx) { - - var d = newRenderedHTMLDocument(ctx); - - // create element - var el = d.createElement('embed'); - d.body.appendChild(el); - - var s = el.createShadowRoot(); - - s.innerHTML = '<content id="cont" select="#shadow"></content>'; - - assert_true(s.querySelector('#cont') != null, 'embed should allow one insertion point ' + - 'that matches nothing'); - -}), 'A_09_00_02_T02'); - - -//test embed -test(unit(function (ctx) { - - var d = newRenderedHTMLDocument(ctx); - - // create element - var el = d.createElement('input'); - d.body.appendChild(el); - - var s = el.createShadowRoot(); - - s.innerHTML = '<content id="cont" select="#shadow"></content>'; - - assert_true(s.querySelector('#cont') != null, 'input should allow one insertion point ' + - 'that matches nothing'); - -}), 'A_09_00_02_T03'); -</script> -</body> -</html> diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-and-their-shadow-trees/test-003.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-and-their-shadow-trees/test-003.html deleted file mode 100644 index fc52026f776..00000000000 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-and-their-shadow-trees/test-003.html +++ /dev/null @@ -1,73 +0,0 @@ -<!DOCTYPE html> -<!-- -Distributed under both the W3C Test Suite License [1] and the W3C -3-clause BSD License [2]. To contribute to a W3C Test Suite, see the -policies and contribution forms [3]. - -[1] http://www.w3.org/Consortium/Legal/2008/04-testsuite-license -[2] http://www.w3.org/Consortium/Legal/2008/03-bsd-license -[3] http://www.w3.org/2004/10/27-testcases ---> -<html> -<head> -<title>Shadow DOM Test: A_09_00_03</title> -<link rel="author" title="Sergey G. Grekhov" href="mailto:sgrekhov@unipro.ru"> -<link rel="help" href="http://www.w3.org/TR/2013/WD-shadow-dom-20130514/#html-elements-and-their-shadow-trees"> -<meta name="assert" content="HTML Elements and Their Shadow Trees: Check that fieldset can contain at least two insertion points with matching criteria 'legend:first-of-type' and 'universal selector'"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="../../../html/resources/common.js"></script> -<script src="../../resources/shadow-dom-utils.js"></script> -</head> -<body> -<div id="log"></div> -<script> -//test universal selector -test(unit(function (ctx) { - - var d = newRenderedHTMLDocument(ctx); - - // create element - var el = d.createElement('fieldset'); - d.body.appendChild(el); - - el.innerHTML = '' + - '<span id="shadow">This is a node that should be distributed</span>' + - '<span id="flbk">This is a fallback content</span>'; - - var s = el.createShadowRoot(); - s.innerHTML = '<content select="#shadow"></content>'; - - assert_true(d.querySelector('#shadow').offsetTop > 0, 'fieldset should allow at least one insertion point'); - assert_equals(d.querySelector('#flbk').offsetTop, 0, 'Fallback content shouldn\'t be rendered'); - -}), 'A_09_00_03_T01'); - - - -//test legend:first-of-type -test(unit(function (ctx) { - - var d = newRenderedHTMLDocument(ctx); - - // create element - var el = d.createElement('fieldset'); - d.body.appendChild(el); - - el.innerHTML = '' + - '<legend>' - '<span id="shadow">This is a node that should be distributed</span>' + - '</legend>' + - '<span id="flbk">Unlucky content</span>'; - - var s = el.createShadowRoot(); - s.innerHTML = '<content select="legend:first-of-type"></content>'; - - assert_true(d.querySelector('#shadow').offsetTop > 0, 'fieldset should allow insertion point ' + - 'with legend:first-of-type matching criteria'); - assert_equals(d.querySelector('#flbk').offsetTop, 0, 'Fallback content shouldn\'t be rendered'); - -}), 'A_09_00_03_T02'); -</script> -</body> -</html> diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-and-their-shadow-trees/test-004.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-and-their-shadow-trees/test-004.html deleted file mode 100644 index 8ac5371c532..00000000000 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-and-their-shadow-trees/test-004.html +++ /dev/null @@ -1,48 +0,0 @@ -<!DOCTYPE html> -<!-- -Distributed under both the W3C Test Suite License [1] and the W3C -3-clause BSD License [2]. To contribute to a W3C Test Suite, see the -policies and contribution forms [3]. - -[1] http://www.w3.org/Consortium/Legal/2008/04-testsuite-license -[2] http://www.w3.org/Consortium/Legal/2008/03-bsd-license -[3] http://www.w3.org/2004/10/27-testcases ---> -<html> -<head> -<title>Shadow DOM Test: A_09_00_04</title> -<link rel="author" title="Sergey G. Grekhov" href="mailto:sgrekhov@unipro.ru"> -<link rel="help" href="http://www.w3.org/TR/2013/WD-shadow-dom-20130514/#html-elements-and-their-shadow-trees"> -<meta name="assert" content="HTML Elements and Their Shadow Trees: Check that details can contain at least two insertion points with matching criteria 'summary:first-of-type' and 'universal selector'"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="../../../html/resources/common.js"></script> -<script src="../../resources/shadow-dom-utils.js"></script> -</head> -<body> -<div id="log"></div> -<script> -//test universal selector -test(unit(function (ctx) { - - var d = newRenderedHTMLDocument(ctx); - - // create element - var el = d.createElement('details'); - el.setAttribute('open', 'open'); - d.body.appendChild(el); - - el.innerHTML = '' + - '<span id="shadow">This is a node that should be distributed</span>' + - '<span id="flbk">This is a fallback content</span>'; - - var s = el.createShadowRoot(); - s.innerHTML = '<content select="#shadow"></content>'; - - assert_true(d.querySelector('#shadow').offsetTop > 0, '\'details\' should allow at least one insertion point'); - assert_equals(d.querySelector('#flbk').offsetTop, 0, 'Fallback content shouldn\'t be rendered'); - -}), 'A_09_00_04_T01'); -</script> -</body> -</html> diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-in-shadow-trees/html-forms/test-001.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-in-shadow-trees/html-forms/test-001.html index 99a4edc2963..c8cfeceee6a 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-in-shadow-trees/html-forms/test-001.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-in-shadow-trees/html-forms/test-001.html @@ -31,7 +31,7 @@ test(function () { var div = d.createElement('div'); d.body.appendChild(div); - var s = div.createShadowRoot(); + var s = div.attachShadow({mode: 'open'}); HTML5_FORM_ASSOCIATED_ELEMENTS.forEach(function (tagName) { @@ -56,7 +56,7 @@ test(function () { var div = d.createElement('div'); form.appendChild(div); - s = div.createShadowRoot(); + s = div.attachShadow({mode: 'open'}); HTML5_FORM_ASSOCIATED_ELEMENTS.forEach(function (tagName) { diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-in-shadow-trees/html-forms/test-002.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-in-shadow-trees/html-forms/test-002.html index e39ef062659..2d063c06a14 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-in-shadow-trees/html-forms/test-002.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-in-shadow-trees/html-forms/test-002.html @@ -31,7 +31,7 @@ test(function () { var div = d.createElement('div'); d.body.appendChild(div); - var s = div.createShadowRoot(); + var s = div.attachShadow({mode: 'open'}); HTML5_FORM_ASSOCIATED_ELEMENTS.forEach(function (tagName) { @@ -58,7 +58,7 @@ test(function () { var div = d.createElement('div'); form.appendChild(div); - var s = div.createShadowRoot(); + var s = div.attachShadow({mode: 'open'}); HTML5_FORM_ASSOCIATED_ELEMENTS.forEach(function (tagName) { @@ -88,10 +88,11 @@ test(function () { var el = d.createElement(tagName); el.setAttribute('id', tagName + '_id'); + el.setAttribute('slot', tagName + '_slot'); div.appendChild(el); - var s = div.createShadowRoot(); - s.innerHTML = '<content select="' + tagName + '"></content>'; + var s = div.attachShadow({mode: 'open'}); + s.innerHTML = '<slot name="' + tagName + '_slot"></slot>'; assert_true(s.querySelector('#' + tagName + '_id') == null, 'Distributed form-associated element ' + tagName + ' in shadow tree must not be accessible shadow tree accessors'); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-in-shadow-trees/html-forms/test-003.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-in-shadow-trees/html-forms/test-003.html index c6dfbc4f08e..0bc92e11dfd 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-in-shadow-trees/html-forms/test-003.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-in-shadow-trees/html-forms/test-003.html @@ -12,8 +12,8 @@ policies and contribution forms [3]. <head> <title>Shadow DOM Test: A_08_02_03</title> <link rel="author" title="Sergey G. Grekhov" href="mailto:sgrekhov@unipro.ru"> -<link rel="help" href="http://www.w3.org/TR/2013/WD-shadow-dom-20130514/#inert-html-elements"> -<meta name="assert" content="HTML Elements in shadow trees: form should submit elements in shadow tree"> +<link rel="help" href="https://w3c.github.io/webcomponents/spec/shadow/#inertness-of-html-elements-in-a-shadow-tree"> +<meta name="assert" content="HTML Elements in shadow trees: form should not submit elements in shadow tree"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="../../../../html/resources/common.js"></script> @@ -23,17 +23,18 @@ policies and contribution forms [3]. <script> var A_08_02_03_T01 = async_test('A_08_02_03_T01', { timeout: 5000 }); -A_08_02_03_T01.checkIframeContent = A_08_02_03_T01.step_func(function () { - //remember value to check before cleaning the context (it'll destroy the iframe) +var checkIframeContent = A_08_02_03_T01.step_func(function () { + // remember value to check before cleaning the context (it'll destroy the iframe) var valueToCheck = A_08_02_03_T01.iframe.contentWindow.document.URL; cleanContext(A_08_02_03_T01.ctx); assert_true(valueToCheck.indexOf('inp1=value1') > 0, 'html form should submit all of its fields'); - // Expected behavior is not quite clear. See https://www.w3.org/Bugs/Public/show_bug.cgi?id=20320 - assert_true(valueToCheck.indexOf('inp2=value2') > 0, - 'html form should submit all of its fields including the shadow ones'); + // Form data crossing shadow boundary should not be submitted. + // https://github.com/w3c/webcomponents/issues/65 + assert_equals(valueToCheck.indexOf('inp2=value2'), -1, + 'html form should not submit fields in the shadow tree'); A_08_02_03_T01.done(); }); @@ -46,13 +47,12 @@ A_08_02_03_T01.step(function () { //create iframe var iframe = document.createElement('iframe'); + A_08_02_03_T01.iframe = iframe; iframe.src = '../../resources/blank.html'; iframe.setAttribute('name', 'targetIframe'); d.body.appendChild(iframe); - A_08_02_03_T01.iframe = iframe; - // create form var form = d.createElement('form'); form.setAttribute('target', 'targetIframe'); @@ -60,11 +60,10 @@ A_08_02_03_T01.step(function () { form.setAttribute('action', '../../resources/blank.html'); d.body.appendChild(form); - //create Shadow root + // create shadow root var root = d.createElement('div'); form.appendChild(root); - var s = root.createShadowRoot(); - + var s = root.attachShadow({mode: 'open'}); var input1 = d.createElement('input'); input1.setAttribute('type', 'text'); @@ -78,11 +77,11 @@ A_08_02_03_T01.step(function () { input2.setAttribute('value', 'value2'); s.appendChild(input2); - //submit the form + // submit the form form.submit(); // set timeout to give the iframe time to load content - setTimeout('A_08_02_03_T01.checkIframeContent()', 2000); + setTimeout(checkIframeContent, 2000); }); </script> </body> diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-in-shadow-trees/inert-html-elements/test-001.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-in-shadow-trees/inert-html-elements/test-001.html index c0c6048f729..33bdf69d11f 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-in-shadow-trees/inert-html-elements/test-001.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-in-shadow-trees/inert-html-elements/test-001.html @@ -58,7 +58,7 @@ A_08_01_01_T01.step(function () { //create Shadow root var root = d.createElement('div'); d.body.appendChild(root); - var s = root.createShadowRoot(); + var s = root.attachShadow({mode: 'open'}); // create base element, set iframe as a target var base = d.createElement('base'); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-in-shadow-trees/inert-html-elements/test-002.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-in-shadow-trees/inert-html-elements/test-002.html index 918588b6746..2263cd6125a 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-in-shadow-trees/inert-html-elements/test-002.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/html-elements-in-shadow-trees/inert-html-elements/test-002.html @@ -32,7 +32,7 @@ test(unit(function (ctx) { //create Shadow root var root = d.createElement('div'); d.body.appendChild(root); - var s = root.createShadowRoot(); + var s = root.attachShadow({mode: 'open'}); s.appendChild(link); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/lower-boundary-encapsulation/test-004.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/lower-boundary-encapsulation/test-004.html deleted file mode 100644 index 13fa063912f..00000000000 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/lower-boundary-encapsulation/test-004.html +++ /dev/null @@ -1,102 +0,0 @@ -<!DOCTYPE html> -<!-- -Distributed under both the W3C Test Suite License [1] and the W3C -3-clause BSD License [2]. To contribute to a W3C Test Suite, see the -policies and contribution forms [3]. - -[1] http://www.w3.org/Consortium/Legal/2008/04-testsuite-license -[2] http://www.w3.org/Consortium/Legal/2008/03-bsd-license -[3] http://www.w3.org/2004/10/27-testcases ---> -<html> -<head> -<title>Shadow DOM Test: A_04_02_04</title> -<link rel="author" title="Sergey G. Grekhov" href="mailto:sgrekhov@unipro.ru"> -<link rel="help" href="http://www.w3.org/TR/2013/WD-shadow-dom-20130514/#lower-boundary-encapsulation"> -<meta name="assert" content="Lower-boundary encapsulation: The distribution reoccurs whenever any variable affecting it is changed"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="../../../../html/resources/common.js"></script> -</head> -<body> -<div id="log"></div> -<script> -var A_04_02_04_T1 = async_test('A_04_02_04_T01'); - -A_04_02_04_T1.step(function () { - var iframe = document.createElement('iframe'); - iframe.src = '../../resources/bobs_page.html'; - document.body.appendChild(iframe); - - iframe.onload = A_04_02_04_T1.step_func(function () { - try { - var d = iframe.contentDocument; - var ul = d.querySelector('ul.stories'); - var s = ul.createShadowRoot(); - - //make shadow subtree - var subdiv1 = document.createElement('div'); - subdiv1.innerHTML = '<ul><content select=".shadow"></content></ul>'; - s.appendChild(subdiv1); - - - //The order of <li> elements at this point should be the following: - //li3, li6, li11, li12, 1i13, li14, li15. Other elements (li1, li2, li4, li5) invisible - assert_true(d.querySelector('#li3').offsetTop < d.querySelector('#li6').offsetTop, - 'Point 1: Elements that mach insertion point criteria don\'t participate in distribution'); - assert_true(d.querySelector('#li6').offsetTop < d.querySelector('#li11').offsetTop, - 'Point 2: Elements that mach insertion point criteria don\'t participate in distribution'); - assert_true(d.querySelector('#li11').offsetTop < d.querySelector('#li12').offsetTop, - 'Point 3: Elements that mach insertion point criteria don\'t participate in distribution'); - assert_true(d.querySelector('#li12').offsetTop < d.querySelector('#li13').offsetTop, - 'Point 4: Elements that mach insertion point criteria don\'t participate in distribution'); - assert_true(d.querySelector('#li13').offsetTop < d.querySelector('#li14').offsetTop, - 'Point 5: Elements that mach insertion point criteria don\'t participate in distribution'); - assert_true(d.querySelector('#li14').offsetTop < d.querySelector('#li15').offsetTop, - 'Point 6: Elements that mach insertion point criteria don\'t participate in distribution'); - - assert_equals(d.querySelector('#li1').offsetTop, 0, - 'Point 7: Elements that don\'t mach insertion point criteria participate in distribution'); - assert_equals(d.querySelector('#li2').offsetTop, 0, - 'Point 8: Elements that don\'t mach insertion point criteria participate in distribution'); - assert_equals(d.querySelector('#li4').offsetTop, 0, - 'Point 9: Elements that don\'t mach insertion point criteria participate in distribution'); - assert_equals(d.querySelector('#li5').offsetTop, 0, - 'Point 10: Elements that don\'t mach insertion point criteria participate in distribution'); - - var li5 = d.querySelector('#li5'); - li5.className = 'shadow'; - - // When class name changed distribution must reoccur - //The order of <li> elements should now be the following: - //li3, li6, li5, li11, li12, 1i13, li14, li15. Invisible: li1, li2, li4 - assert_true(d.querySelector('#li3').offsetTop < d.querySelector('#li6').offsetTop, - 'Point 11: Elements that mach insertion point criteria don\'t participate in distribution'); - assert_true(d.querySelector('#li6').offsetTop < d.querySelector('#li5').offsetTop, - 'Point 12: Elements that mach insertion point criteria don\'t participate in distribution'); - assert_true(d.querySelector('#li5').offsetTop < d.querySelector('#li11').offsetTop, - 'Point 13: Elements that mach insertion point criteria don\'t participate in distribution'); - assert_true(d.querySelector('#li11').offsetTop < d.querySelector('#li12').offsetTop, - 'Point 14: Elements that mach insertion point criteria don\'t participate in distribution'); - assert_true(d.querySelector('#li12').offsetTop < d.querySelector('#li13').offsetTop, - 'Point 15: Elements that mach insertion point criteria don\'t participate in distribution'); - assert_true(d.querySelector('#li13').offsetTop < d.querySelector('#li14').offsetTop, - 'Point 16: Elements that mach insertion point criteria don\'t participate in distribution'); - assert_true(d.querySelector('#li14').offsetTop < d.querySelector('#li15').offsetTop, - 'Point 17: Elements that mach insertion point criteria don\'t participate in distribution'); - - assert_equals(d.querySelector('#li1').offsetTop, 0, - 'Point 18: Elements that don\'t mach insertion point criteria participate in distribution'); - assert_equals(d.querySelector('#li2').offsetTop, 0, - 'Point 19: Elements that don\'t mach insertion point criteria participate in distribution'); - assert_equals(d.querySelector('#li4').offsetTop, 0, - 'Point 20: Elements that don\'t mach insertion point criteria participate in distribution'); - } finally { - iframe.parentNode.removeChild(iframe); - } - A_04_02_04_T1.done(); - }); -}); -</script> -</body> -</html> diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/nested-shadow-trees/nested_tree_reftest.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/nested-shadow-trees/nested_tree_reftest.html index de9100bcb38..8d02227fcf4 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/nested-shadow-trees/nested_tree_reftest.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/nested-shadow-trees/nested_tree_reftest.html @@ -21,9 +21,9 @@ <div id='host'> </div> <script> - var shadowRoot = document.getElementById('host').createShadowRoot(); + var shadowRoot = document.getElementById('host').attachShadow({mode: 'open'}); shadowRoot.innerHTML = '<div id="sub" style="width: 100%;height:100%;"></div>'; - var nestedRoot = shadowRoot.getElementById('sub').createShadowRoot(); + var nestedRoot = shadowRoot.getElementById('sub').attachShadow({mode: 'open'}); nestedRoot.innerHTML = '<div style="width:100%; height:100%;background-color: green;"></div>'; </script> </body> diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/reprojection/reprojection-001.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/reprojection/reprojection-001.html index 9d2eb43a352..8bd2bb6f6d8 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/reprojection/reprojection-001.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/reprojection/reprojection-001.html @@ -29,11 +29,11 @@ policies and contribution forms [3]. <div class="pass">Orange.</div> </div> <script> - var shadowRoot = host.createShadowRoot(host); - shadowRoot.innerHTML = '<div id="host2">Hello a Shadow Root.<content></content><div>Banana.</div></div>'; + var shadowRoot = host.attachShadow({mode: 'open'}); + shadowRoot.innerHTML = '<div id="host2">Hello a Shadow Root.<slot></slot><div>Banana.</div></div>'; var host2 = shadowRoot.getElementById("host2"); - var shadowRoot2 = host2.createShadowRoot(host2); - shadowRoot2.innerHTML = '<div>Hello a Shadow Root2.</div><div><content></content></div>'; + var shadowRoot2 = host2.attachShadow({mode: 'open'}); + shadowRoot2.innerHTML = '<div>Hello a Shadow Root2.</div><div><slot></slot></div>'; </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/shadow-root-001.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/shadow-root-001.html index fb228cda5dd..67843b06783 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/shadow-root-001.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/shadow-root-001.html @@ -26,7 +26,7 @@ p { color: black; } <p>You should see green text saying "PASS" below.</p> <div id="host">FAIL</div> <script> -var shadowRoot = window.host.createShadowRoot(); +var shadowRoot = window.host.attachShadow({mode: 'open'}); shadowRoot.innerHTML = '<style>#pass { color: green; }</style>\n' + '<div id="pass">PASS</div>'; diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/shadow-root-002.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/shadow-root-002.html index ae2d98cf8e7..24d5d016b91 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/shadow-root-002.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/shadow-root-002.html @@ -34,7 +34,7 @@ in this order. <div class="pass">C</div> </div> <script> -var shadowRoot = window.host.createShadowRoot(); +var shadowRoot = window.host.attachShadow({mode: 'open'}); shadowRoot.innerHTML = '<style>\n' + @@ -42,7 +42,7 @@ shadowRoot.innerHTML = '* { color: red; }\n' + '</style>' + '<div class="shadow-pass">A</div>\n' + - '<content>FAIL</content>' + + '<slot>FAIL</slot>' + '<div class="shadow-pass">D</div>'; </script> </body> diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/text-decoration-001.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/text-decoration-001.html index 47d5efda0e6..d8def126d64 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/text-decoration-001.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/text-decoration-001.html @@ -13,7 +13,7 @@ </span> <script> var parent = document.getElementById('parent'); - var shadow = parent.createShadowRoot(); + var shadow = parent.attachShadow({mode: 'open'}); var child = document.createElement('span'); child.textContent = "if NOT underlined, it is success."; shadow.appendChild(child); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/dom-tree-accessors-001.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/dom-tree-accessors-001.html index d22e6c49abf..71421481e07 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/dom-tree-accessors-001.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/dom-tree-accessors-001.html @@ -199,7 +199,7 @@ test(function () { body.appendChild(pHost); doc.documentElement.appendChild(body); - var shadowRoot = body.createShadowRoot(); + var shadowRoot = body.attachShadow({mode: 'open'}); var pShadow = doc.createElementNS(namespace, 'p'); pShadow.className = "shadow"; shadowRoot.appendChild(pShadow); @@ -213,7 +213,7 @@ test(function () { test(function () { var doc = document.implementation.createHTMLDocument(''); populateTestContentToHostDocument(doc); - var shadowRoot = doc.documentElement.createShadowRoot(); + var shadowRoot = doc.body.attachShadow({mode: 'open'}); populateTestContentToShadowRoot(shadowRoot); shadowRoot.querySelectorAll('p')[0].id = 'test-id'; diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/ownerdocument-001.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/ownerdocument-001.html index c643bc47605..3a184f46cb7 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/ownerdocument-001.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/ownerdocument-001.html @@ -27,11 +27,11 @@ policies and contribution forms [3]. test(function () { var doc = document.implementation.createHTMLDocument('Test'); doc.body.innerHTML = '<div>A<div>B</div>C<div><span>D</span></div>E</div>'; - var nodeIterator = doc.createNodeIterator(doc.documentElement, + var nodeIterator = doc.createNodeIterator(doc.body, NodeFilter.SHOW_ELEMENT, null); var node; while (node = nodeIterator.nextNode()) { - var shadowRoot = node.createShadowRoot(); + var shadowRoot = node.attachShadow({mode: 'open'}); assert_equals(shadowRoot.ownerDocument, doc); } }, 'ownerDocument property of a shadow root should be the document of the ' + @@ -50,7 +50,7 @@ test(function () { for (var depth = 1; depth <= MAX_DEPTH; ++depth) { var host = doc.getElementById('depth-' + depth); - var shadowRoot = host.createShadowRoot(); + var shadowRoot = host.attachShadow({mode: 'open'}); assert_equals(shadowRoot.ownerDocument, doc, 'ownerDocument mismatch for #depth-' + depth); } @@ -60,7 +60,7 @@ test(function () { test(function () { var doc = document.implementation.createHTMLDocument('Test'); - var shadowRoot = doc.body.createShadowRoot(); + var shadowRoot = doc.body.attachShadow({mode: 'open'}); var div = doc.createElement('div'); shadowRoot.appendChild(div); assert_equals(div.ownerDocument, doc); @@ -70,7 +70,7 @@ test(function () { test(function () { var doc1 = document.implementation.createHTMLDocument('Test 1'); var doc2 = document.implementation.createHTMLDocument('Test 2'); - var shadowRoot = doc1.body.createShadowRoot(); + var shadowRoot = doc1.body.attachShadow({mode: 'open'}); var div = doc2.createElement('div'); shadowRoot.appendChild(div); assert_equals(div.ownerDocument, doc1); @@ -81,7 +81,7 @@ test(function () { test(function () { var doc1 = document.implementation.createHTMLDocument('Test 1'); var doc2 = document.implementation.createHTMLDocument('Test 2'); - var shadowRoot = doc1.body.createShadowRoot(); + var shadowRoot = doc1.body.attachShadow({mode: 'open'}); doc2.body.innerHTML = '<div id="root">A<div>B</div>C<div><span>D</span></div>E</div>'; shadowRoot.appendChild(doc2.getElementById('root')); @@ -97,7 +97,7 @@ test(function () { test(function () { var doc1 = document.implementation.createHTMLDocument('Test 1'); var doc2 = document.implementation.createHTMLDocument('Test 2'); - var shadowRoot = doc1.body.createShadowRoot(); + var shadowRoot = doc1.body.attachShadow({mode: 'open'}); doc2.body.innerHTML = '<div id="parent"><div id="child"></div></div>'; shadowRoot.appendChild(doc2.getElementById('child')); assert_equals(doc2.getElementById('parent').ownerDocument, doc2); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/selectors-api-001.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/selectors-api-001.html index 853d49ca75c..1ce5c65bdf9 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/selectors-api-001.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/selectors-api-001.html @@ -35,7 +35,7 @@ function createTestDocument() { pHost.className = 'test-class'; pHost.id = 'test-id'; doc.body.appendChild(pHost); - var shadowRoot = doc.body.createShadowRoot(); + var shadowRoot = doc.body.attachShadow({mode: 'open'}); var pShadow = doc.createElement('p'); pShadow.className = 'test-class'; pShadow.id = 'test-id'; diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/selectors-api-002.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/selectors-api-002.html index 176000658a1..1737280426a 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/selectors-api-002.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/selectors-api-002.html @@ -36,7 +36,7 @@ function createTestDocument() { pHost.className = 'test-class'; pHost.id = 'test-id'; doc.body.appendChild(pHost); - var shadowRoot = doc.body.createShadowRoot(); + var shadowRoot = doc.body.attachShadow({mode: 'open'}); var pShadow = doc.createElement('p'); pShadow.className = 'test-class'; pShadow.id = 'test-id'; diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/shadow-root-001.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/shadow-root-001.html index d1f838b2e63..8e40fb23edd 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/shadow-root-001.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/shadow-root-001.html @@ -25,22 +25,22 @@ policies and contribution forms [3]. <script> test(function () { var doc = document.implementation.createHTMLDocument('Test'); - var shadowRoot = doc.body.createShadowRoot(); + var shadowRoot = doc.body.attachShadow({mode: 'open'}); assert_equals(shadowRoot.parentNode, null); }, 'The parentNode attribute of a shadow root must always return null.'); test(function () { var doc = document.implementation.createHTMLDocument('Test'); - var shadowRoot = doc.body.createShadowRoot(); + var shadowRoot = doc.body.attachShadow({mode: 'open'}); assert_equals(shadowRoot.parentElement, null); }, 'The parentElement attribute of a shadow root must always return null.'); test(function () { var doc = document.implementation.createHTMLDocument('Test'); - var outerShadowRoot = doc.body.createShadowRoot(); + var outerShadowRoot = doc.body.attachShadow({mode: 'open'}); var div = doc.createElement('div'); outerShadowRoot.appendChild(div); - var innerShadowRoot = div.createShadowRoot(); + var innerShadowRoot = div.attachShadow({mode: 'open'}); assert_equals(innerShadowRoot.parentNode, null); }, 'The parentNode attribute of a shadow root must always return null, ' + @@ -49,10 +49,10 @@ test(function () { test(function () { var doc = document.implementation.createHTMLDocument('Test'); - var outerShadowRoot = doc.body.createShadowRoot(); + var outerShadowRoot = doc.body.attachShadow({mode: 'open'}); var div = doc.createElement('div'); outerShadowRoot.appendChild(div); - var innerShadowRoot = div.createShadowRoot(); + var innerShadowRoot = div.attachShadow({mode: 'open'}); assert_equals(innerShadowRoot.parentElement, null); }, 'The parentElement attribute of a shadow root must always return null, ' + diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/test-005.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/test-005.html index 6f59de686d0..0cf978a2699 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/test-005.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/test-005.html @@ -26,7 +26,7 @@ test(function () { var d = newHTMLDocument(); var div = d.createElement('div'); d.body.appendChild(div); - var s = div.createShadowRoot(); + var s = div.attachShadow({mode: 'open'}); // node in shadow with id var input = d.createElement('input'); @@ -52,7 +52,7 @@ test(function () { var d = newHTMLDocument(); var div = d.createElement('div'); d.body.appendChild(div); - var s = div.createShadowRoot(); + var s = div.attachShadow({mode: 'open'}); var form = d.createElement('form'); form.setAttribute('id', 'form_id'); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/test-007.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/test-007.html index 97a8ab817bf..77f100d6305 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/test-007.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/test-007.html @@ -26,7 +26,7 @@ test(function () { var d = newHTMLDocument(); var div = d.createElement('div'); d.body.appendChild(div); - var s = div.createShadowRoot(); + var s = div.attachShadow({mode: 'open'}); var input = d.createElement('input'); input.setAttribute('type', 'text'); @@ -61,7 +61,7 @@ test(function () { div = d.createElement('div'); d.body.appendChild(div); - var s = div.createShadowRoot(); + var s = div.attachShadow({mode: 'open'}); s.appendChild(form); s.appendChild(el); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/test-011.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/test-011.html index 737494f3da6..14d3f8227b8 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/test-011.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/test-011.html @@ -35,7 +35,7 @@ test(unit(function (ctx) { //create Shadow root var root = d.createElement('div'); d.body.appendChild(root); - var s = root.createShadowRoot(); + var s = root.attachShadow({mode: 'open'}); s.appendChild(link); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/window-named-properties-001.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/window-named-properties-001.html index 4a83ff7e8d6..f0aefee379a 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/window-named-properties-001.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/window-named-properties-001.html @@ -28,7 +28,7 @@ test(function () { try { host.style.display = 'none'; document.body.appendChild(host); - var shadowRoot = host.createShadowRoot(); + var shadowRoot = host.attachShadow({mode: 'open'}); var iframe = document.createElement('iframe'); iframe.style.display = 'none'; iframe.name = 'test-name'; diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/window-named-properties-002.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/window-named-properties-002.html index d8c5aa48366..45c0bf6a673 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/window-named-properties-002.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/window-named-properties-002.html @@ -25,7 +25,7 @@ policies and contribution forms [3]. <script> function testNameAttribute(elementName) { var doc = document.implementation.createHTMLDocument('Title'); - var shadowRoot = doc.body.createShadowRoot(); + var shadowRoot = doc.body.attachShadow({mode: 'open'}); var element = doc.createElement(elementName); element.name = 'test-name'; shadowRoot.appendChild(element); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/window-named-properties-003.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/window-named-properties-003.html index f08db94e317..b34f766f85c 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/window-named-properties-003.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/window-named-properties-003.html @@ -26,7 +26,7 @@ policies and contribution forms [3]. <script> function testIDAttribute(elementName) { var doc = document.implementation.createHTMLDocument('Title'); - var shadowRoot = doc.body.createShadowRoot(); + var shadowRoot = doc.body.attachShadow({mode: 'open'}); var element = doc.createElement(elementName); element.id = 'test-id'; shadowRoot.appendChild(element); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/styles/css-variables/test-001.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/styles/css-variables/test-001.html deleted file mode 100644 index 44e84b56576..00000000000 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/styles/css-variables/test-001.html +++ /dev/null @@ -1,73 +0,0 @@ -<!DOCTYPE html> -<!-- -Distributed under both the W3C Test Suite License [1] and the W3C -3-clause BSD License [2]. To contribute to a W3C Test Suite, see the -policies and contribution forms [3]. - -[1] http://www.w3.org/Consortium/Legal/2008/04-testsuite-license -[2] http://www.w3.org/Consortium/Legal/2008/03-bsd-license -[3] http://www.w3.org/2004/10/27-testcases ---> -<html> -<head> -<title>Shadow DOM Test: A_06_01_01</title> -<link rel="author" title="Sergey G. Grekhov" href="mailto:sgrekhov@unipro.ru"> -<link rel="help" href="http://www.w3.org/TR/2013/WD-shadow-dom-20130514/#css-variables"> -<meta name="assert" content="CSS variables: The shadow host styles being inherited by the children of the shadow root must also apply to CSS Variables."> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="../../../../html/resources/common.js"></script> -<script src="../../../resources/shadow-dom-utils.js"></script> -</head> -<body> -<div id="log"></div> -<script> -//TODO For now (November, 2012) CSS variables support is not implemented yet -// so this test won't work. Treat it as a placeholder for now -test(unit(function (ctx) { - - var d = newRenderedHTMLDocument(ctx); - d.head.innerHtml = '' + - '<style>' + - 'body {font-size:10px;}' + - '</style>'; - - d.body.innerHTML = - '<ul id="shHost">' + - '<li id="li1" class="shadow">1</li>' + - '<li id="li2" class="shadow2">2</li>' + - '<li id="li3" class="shadow">3</li>' + - '<li id="li4">4</li>' + - '<li id="li5" class="shadow">5</li>' + - '<li id="li6" class="shadow2">6</li>' + - '</ul>'; - - - var host = d.querySelector('#shHost'); - var s = host.createShadowRoot(); - - var div = d.createElement('div'); - div.innerHTML ='<ul><content select=".shadow"></content></ul>'; - s.appendChild(div); - - var defHeight1 = d.querySelector('#li1').offsetHeight; - var defHeight3 = d.querySelector('#li3').offsetHeight; - var defHeight5 = d.querySelector('#li5').offsetHeight; - - var style = d.createElement('style'); - style.innerHTML =':root {' + - 'var-text-size: 30px;' + - '}' + - 'body {' + - 'font-size: var(text-size);' + - '}'; - s.appendChild(style); - - assert_true(d.querySelector('#li1').offsetHeight > defHeight1, 'Point 1: Element height should be changed'); - assert_true(d.querySelector('#li3').offsetHeight > defHeight3, 'Point 2: Element height should be changed'); - assert_true(d.querySelector('#li5').offsetHeight > defHeight5, 'Point 3: Element height should be changed'); - -}), 'A_06_01_01_T01'); -</script> -</body> -</html> diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/styles/not-apply-in-shadow-root-001.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/styles/not-apply-in-shadow-root-001.html index 01db057ae2e..7c27d98d4af 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/styles/not-apply-in-shadow-root-001.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/styles/not-apply-in-shadow-root-001.html @@ -29,7 +29,7 @@ div { <div id="shadow-host"></div> <script> var shadowHost = document.getElementById('shadow-host'); -var shadowRoot = shadowHost.createShadowRoot(); +var shadowRoot = shadowHost.attachShadow({mode: 'open'}); var style = document.createElement('style'); style.innerHTML = 'div { background: red }'; diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/styles/test-001.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/styles/test-001.html index 681430a1427..fd91574b657 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/styles/test-001.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/styles/test-001.html @@ -37,7 +37,7 @@ test(unit(function (ctx) { d.body.appendChild(host); //Shadow root to play with - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var div1 = d.createElement('div'); div1.innerHTML ='<span id="shd" class="invis">This is the shadow tree</span>'; @@ -67,7 +67,7 @@ test(unit(function (ctx) { d.body.appendChild(host); //Shadow root to play with - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var div1 = d.createElement('div'); div1.innerHTML ='<span id="shd" class="invis">This is the shadow tree</span>'; diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/styles/test-003.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/styles/test-003.html index bac7006a657..d5b8f48ab31 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/styles/test-003.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/styles/test-003.html @@ -28,7 +28,7 @@ test(unit(function (ctx) { d.body.appendChild(host); //Shadow root to play with - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); assert_equals(s.styleSheets.length, 0, 'There should be no style sheets'); }), 'A_06_00_03_T01'); @@ -41,7 +41,7 @@ test(unit(function (ctx) { d.body.appendChild(host); //Shadow root to play with - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); assert_equals(s.styleSheets.length, 0, 'There should be no style sheets'); }), 'A_06_00_03_T02'); @@ -54,7 +54,7 @@ test(unit(function (ctx) { var host = d.createElement('div'); //Shadow root to play with - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var style = d.createElement('style'); style.textContent = 'div {width: 50%;}'; diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/styles/test-005.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/styles/test-005.html index faba0a20a31..0debdec5fcb 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/styles/test-005.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/styles/test-005.html @@ -36,7 +36,7 @@ test(unit(function (ctx) { var host = d.querySelector('#sr'); //Shadow root to play with - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var style = d.createElement('style'); style.innerHTML ='.invis {display:none}'; diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/styles/test-008.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/styles/test-008.html index 733b80fe2aa..b84ca4df7d7 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/styles/test-008.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/styles/test-008.html @@ -32,7 +32,7 @@ test(unit(function (ctx) { var host = d.querySelector('#shHost'); - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var div = d.createElement('div'); div.innerHTML ='<span id="spn2">This is a shadow root child</span>'; diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/styles/test-010.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/styles/test-010.html deleted file mode 100644 index 69a1c7bf196..00000000000 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/styles/test-010.html +++ /dev/null @@ -1,56 +0,0 @@ -<!DOCTYPE html> -<!-- -Distributed under both the W3C Test Suite License [1] and the W3C -3-clause BSD License [2]. To contribute to a W3C Test Suite, see the -policies and contribution forms [3]. - -[1] http://www.w3.org/Consortium/Legal/2008/04-testsuite-license -[2] http://www.w3.org/Consortium/Legal/2008/03-bsd-license -[3] http://www.w3.org/2004/10/27-testcases ---> -<html> -<head> -<title>Shadow DOM Test: A_06_00_11</title> -<link rel="author" title="Sergey G. Grekhov" href="mailto:sgrekhov@unipro.ru"> -<link rel="help" href="http://www.w3.org/TR/2013/WD-shadow-dom-20130514/#styles"> -<meta name="assert" content="Styles:the styles of the shadow insertion point node are inherited by the child nodes of the shadow root of the shadow tree, distributed to this shadow insertion point"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="../../../html/resources/common.js"></script> -<script src="../../resources/shadow-dom-utils.js"></script> -</head> -<body> -<div id="log"></div> -<script> -// Test fails. See https://bugs.webkit.org/show_bug.cgi?id=103625 -test(unit(function (ctx) { - var d = newRenderedHTMLDocument(ctx); - - var host = d.createElement('div'); - d.body.appendChild(host); - - //Old tree - var s1 = host.createShadowRoot(); - - var div1 = d.createElement('div'); - div1.setAttribute('style', 'font-size: 10px'); - div1.innerHTML = '<span id="shd1">This is an old shadow tree</span>'; - s1.appendChild(div1); - - var height1 = s1.querySelector('#shd1').offsetHeight; - - assert_true(height1 > 0, 'Element height should be greater than zero'); - - //younger tree - var s2 = host.createShadowRoot(); - var div2 = d.createElement('div'); - div2.innerHTML = '<shadow style="font-size:20px"></shadow>'; - s2.appendChild(div2); - - assert_true(s1.querySelector('#shd1').offsetHeight > height1, - 'Shadow insertion point style must be aplied to the child nodes of ' + - 'the shadow host that are assigned to this insertion point'); -}), 'A_06_00_11_T01'); -</script> -</body> -</html> diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/user-interaction/active-element/test-001.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/user-interaction/active-element/test-001.html index 6d9850b3497..0c3b033da99 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/user-interaction/active-element/test-001.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/user-interaction/active-element/test-001.html @@ -27,7 +27,7 @@ test(unit(function (ctx) { var host = d.createElement('div'); d.body.appendChild(host); - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var inp = d.createElement('input'); inp.setAttribute('type', 'text'); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/user-interaction/active-element/test-002.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/user-interaction/active-element/test-002.html index 9019760b7d8..ed679ee91a3 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/user-interaction/active-element/test-002.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/user-interaction/active-element/test-002.html @@ -28,7 +28,7 @@ test(unit(function (ctx) { var host = d.createElement('div'); host.setAttribute('id', 'shRoot'); d.body.appendChild(host); - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var inp = d.createElement('input'); inp.setAttribute('type', 'text'); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/user-interaction/editing/inheritance-of-content-editable-001.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/user-interaction/editing/inheritance-of-content-editable-001.html index 52f53551c6e..28225ac4a43 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/user-interaction/editing/inheritance-of-content-editable-001.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/user-interaction/editing/inheritance-of-content-editable-001.html @@ -29,7 +29,7 @@ test(unit(function (ctx) { host.contentEditable = "true"; d.body.appendChild(host); - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); assert_equals(host.contentEditable, "true"); assert_equals(s.contentEditable, undefined); @@ -42,7 +42,7 @@ test(unit(function (ctx) { host.contentEditable = "false"; d.body.appendChild(host); - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); assert_equals(host.contentEditable, 'false'); assert_equals(s.contentEditable, undefined); @@ -55,7 +55,7 @@ test(unit(function (ctx) { d.body.appendChild(host); d.body.contentEditable = "true"; - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); assert_equals(host.contentEditable, 'inherit'); assert_equals(s.contentEditable, undefined); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/user-interaction/focus-navigation/test-001.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/user-interaction/focus-navigation/test-001.html index b19f10a9539..94f7d1b7c52 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/user-interaction/focus-navigation/test-001.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/user-interaction/focus-navigation/test-001.html @@ -40,7 +40,7 @@ A_07_02_01_T01.step(unit(function (ctx) { var host = d.createElement('div'); d.body.appendChild(host); - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var inp1 = d.createElement('input'); inp1.setAttribute('type', 'text'); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/user-interaction/focus-navigation/test-002.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/user-interaction/focus-navigation/test-002.html index e50d4f33462..14c321929fb 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/user-interaction/focus-navigation/test-002.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/user-interaction/focus-navigation/test-002.html @@ -47,7 +47,7 @@ A_07_02_02_T01.step(unit(function (ctx) { var chb2 = d.createElement('input'); chb2.setAttribute('type', 'checkbox'); chb2.setAttribute('id', 'chb2'); - chb2.setAttribute('class', 'shadow'); + chb2.setAttribute('slot', 'shadow'); chb2.addEventListener('focus', A_07_02_02_T01.step_func(function(event) { assert_equals(counter++, 0, 'Point 1: wrong focus navigation order'); expectations[1] = true; @@ -58,7 +58,7 @@ A_07_02_02_T01.step(unit(function (ctx) { var chb3 = d.createElement('input'); chb3.setAttribute('type', 'checkbox'); chb3.setAttribute('id', 'chb3'); - chb3.setAttribute('class', 'shadow'); + chb3.setAttribute('slot', 'shadow'); chb3.addEventListener('focus', A_07_02_02_T01.step_func(function(event) { assert_equals(counter++, 1, 'Point 2: wrong focus navigation order'); expectations[2] = true; @@ -66,10 +66,10 @@ A_07_02_02_T01.step(unit(function (ctx) { expectations[2] = false; host.appendChild(chb3); - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var div = d.createElement('div'); - div.innerHTML = '<content select=".shadow"></content>'; + div.innerHTML = '<slot name="shadow"></slot>'; s.appendChild(div); var inp1 = d.createElement('input'); @@ -154,7 +154,7 @@ A_07_02_02_T02.step(unit(function (ctx) { var chb2 = d.createElement('input'); chb2.setAttribute('type', 'checkbox'); chb2.setAttribute('id', 'chb2'); - chb2.setAttribute('class', 'shadow'); + chb2.setAttribute('slot', 'shadow'); chb2.addEventListener('focus', A_07_02_02_T02.step_func(function(event) { assert_equals(counter++, 2, 'Point 3: wrong focus navigation order'); expectations[1] = true; @@ -165,7 +165,7 @@ A_07_02_02_T02.step(unit(function (ctx) { var chb3 = d.createElement('input'); chb3.setAttribute('type', 'checkbox'); chb3.setAttribute('id', 'chb3'); - chb3.setAttribute('class', 'shadow'); + chb3.setAttribute('slot', 'shadow'); chb3.addEventListener('focus', A_07_02_02_T02.step_func(function(event) { assert_equals(counter++, 3, 'Point 4: wrong focus navigation order'); expectations[2] = true; @@ -173,10 +173,10 @@ A_07_02_02_T02.step(unit(function (ctx) { expectations[2] = false; host.appendChild(chb3); - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var div = d.createElement('div'); - div.innerHTML = '<content select=".shadow"></content>'; + div.innerHTML = '<slot name="shadow"></slot>'; s.appendChild(div); var inp1 = d.createElement('input'); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/user-interaction/focus-navigation/test-003.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/user-interaction/focus-navigation/test-003.html index 13ee0bdeaeb..eec76205850 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/user-interaction/focus-navigation/test-003.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/user-interaction/focus-navigation/test-003.html @@ -47,7 +47,7 @@ A_07_02_03_T01.step(unit(function (ctx) { var host = d.createElement('div'); d.body.appendChild(host); - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var inp1 = d.createElement('input'); inp1.setAttribute('type', 'text'); @@ -149,7 +149,7 @@ A_07_02_03_T02.step(unit(function (ctx) { var chb2 = d.createElement('input'); chb2.setAttribute('type', 'checkbox'); chb2.setAttribute('id', 'chb2'); - chb2.setAttribute('class', 'shadow'); + chb2.setAttribute('slot', 'shadow'); chb2.setAttribute('tabindex', '3'); chb2.addEventListener('focus', A_07_02_03_T02.step_func(function(event) { assert_equals(counter++, 2, 'Point 2: wrong focus navigation order'); @@ -161,7 +161,7 @@ A_07_02_03_T02.step(unit(function (ctx) { var chb3 = d.createElement('input'); chb3.setAttribute('type', 'checkbox'); chb3.setAttribute('id', 'chb3'); - chb3.setAttribute('class', 'shadow'); + chb3.setAttribute('slot', 'shadow'); chb3.setAttribute('tabindex', '2'); chb3.addEventListener('focus', A_07_02_03_T02.step_func(function(event) { assert_equals(counter++, 1, 'Point 3: wrong focus navigation order'); @@ -170,10 +170,10 @@ A_07_02_03_T02.step(unit(function (ctx) { invoked[3] = false; host.appendChild(chb3); - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var div = d.createElement('div'); - div.innerHTML = '<content select=".shadow"></content>'; + div.innerHTML = '<slot name="shadow"></slot>'; s.appendChild(div); var inp1 = d.createElement('input'); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/user-interaction/focus-navigation/test-004.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/user-interaction/focus-navigation/test-004.html index 30b08a314b1..29e02bd4a21 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/user-interaction/focus-navigation/test-004.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/user-interaction/focus-navigation/test-004.html @@ -49,7 +49,7 @@ A_07_02_04_T01.step(unit(function (ctx) { //make shadow host focusable host.setAttribute('tabindex', '3'); d.body.appendChild(host); - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var inp1 = d.createElement('input'); inp1.setAttribute('type', 'text'); @@ -154,7 +154,7 @@ A_07_02_04_T02.step(unit(function (ctx) { var chb2 = d.createElement('input'); chb2.setAttribute('type', 'checkbox'); chb2.setAttribute('id', 'chb2'); - chb2.setAttribute('class', 'shadow'); + chb2.setAttribute('slot', 'shadow'); chb2.setAttribute('tabindex', '3'); chb2.addEventListener('focus', A_07_02_04_T02.step_func(function(event) { assert_equals(counter++, 4, 'Point 2: wrong focus navigation order'); @@ -166,7 +166,7 @@ A_07_02_04_T02.step(unit(function (ctx) { var chb3 = d.createElement('input'); chb3.setAttribute('type', 'checkbox'); chb3.setAttribute('id', 'chb3'); - chb3.setAttribute('class', 'shadow'); + chb3.setAttribute('slot', 'shadow'); chb3.setAttribute('tabindex', '2'); chb3.addEventListener('focus', A_07_02_04_T02.step_func(function(event) { assert_equals(counter++, 1, 'Point 3: wrong focus navigation order'); @@ -175,10 +175,10 @@ A_07_02_04_T02.step(unit(function (ctx) { invoked[3] = false; host.appendChild(chb3); - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var div = d.createElement('div'); - div.innerHTML = '<content select=".shadow"></content>'; + div.innerHTML = '<slot name="shadow"></slot>'; s.appendChild(div); var inp1 = d.createElement('input'); @@ -265,7 +265,7 @@ A_07_02_04_T03.step(unit(function (ctx) { var host = d.createElement('div'); host.setAttribute('tabindex', '1'); d.body.appendChild(host); - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var inp1 = d.createElement('input'); inp1.setAttribute('type', 'text'); @@ -357,7 +357,7 @@ A_07_02_04_T04.step(unit(function (ctx) { var host = d.createElement('div'); host.setAttribute('tabindex', '3'); d.body.appendChild(host); - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var inp1 = d.createElement('input'); inp1.setAttribute('type', 'text'); diff --git a/tests/wpt/web-platform-tests/shadow-dom/untriaged/user-interaction/ranges-and-selections/test-001.html b/tests/wpt/web-platform-tests/shadow-dom/untriaged/user-interaction/ranges-and-selections/test-001.html index d156338b4c2..2df78d8a628 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/untriaged/user-interaction/ranges-and-selections/test-001.html +++ b/tests/wpt/web-platform-tests/shadow-dom/untriaged/user-interaction/ranges-and-selections/test-001.html @@ -27,7 +27,7 @@ test(unit(function (ctx) { var host = d.createElement('div'); d.body.appendChild(host); - var s = host.createShadowRoot(); + var s = host.attachShadow({mode: 'open'}); var span = d.createElement('span'); span.innerHTML = 'Some text'; @@ -57,10 +57,11 @@ test(unit(function (ctx) { var span = d.createElement('span'); span.innerHTML = 'Some text'; + span.setAttribute('slot', 'span'); host.appendChild(span); - var s = host.createShadowRoot(); - s.innerHTML = '<content select="span"></content>'; + var s = host.attachShadow({mode: 'open'}); + s.innerHTML = '<slot name="span"></slot>'; var range = d.createRange(); range.setStart(span.firstChild, 0); diff --git a/tests/wpt/web-platform-tests/streams/byte-length-queuing-strategy.js b/tests/wpt/web-platform-tests/streams/byte-length-queuing-strategy.js index d53b12bcb36..54407af9913 100644 --- a/tests/wpt/web-platform-tests/streams/byte-length-queuing-strategy.js +++ b/tests/wpt/web-platform-tests/streams/byte-length-queuing-strategy.js @@ -12,7 +12,7 @@ test(() => { test(() => { - for (let highWaterMark of [-Infinity, NaN, 'foo', {}, () => {}]) { + for (const highWaterMark of [-Infinity, NaN, 'foo', {}, () => {}]) { const strategy = new ByteLengthQueuingStrategy({ highWaterMark }); assert_equals(strategy.highWaterMark, highWaterMark, `${highWaterMark} gets set correctly`); } diff --git a/tests/wpt/web-platform-tests/streams/count-queuing-strategy.js b/tests/wpt/web-platform-tests/streams/count-queuing-strategy.js index 02ca4c45843..5ae0063f57d 100644 --- a/tests/wpt/web-platform-tests/streams/count-queuing-strategy.js +++ b/tests/wpt/web-platform-tests/streams/count-queuing-strategy.js @@ -12,7 +12,7 @@ test(() => { test(() => { - for (let highWaterMark of [-Infinity, NaN, 'foo', {}, () => {}]) { + for (const highWaterMark of [-Infinity, NaN, 'foo', {}, () => {}]) { const strategy = new CountQueuingStrategy({ highWaterMark }); assert_equals(strategy.highWaterMark, highWaterMark, `${highWaterMark} gets set correctly`); } diff --git a/tests/wpt/web-platform-tests/streams/readable-streams/bad-strategies.js b/tests/wpt/web-platform-tests/streams/readable-streams/bad-strategies.js index 8fdc83c4910..0c053ab62bc 100644 --- a/tests/wpt/web-platform-tests/streams/readable-streams/bad-strategies.js +++ b/tests/wpt/web-platform-tests/streams/readable-streams/bad-strategies.js @@ -19,9 +19,10 @@ test(() => { }, 'Readable stream: throwing strategy.size getter'); -test(() => { +promise_test(t => { - const theError = new Error('a unique string'); + const controllerError = { name: 'controller error' }; + const thrownError = { name: 'thrown error' }; let controller; const rs = new ReadableStream( @@ -32,22 +33,22 @@ test(() => { }, { size() { - controller.error(theError); - throw theError; + controller.error(controllerError); + throw thrownError; }, highWaterMark: 5 } ); - assert_throws(theError, () => { - controller.enqueue('a'); - }, 'enqueue should re-throw the error'); + assert_throws(thrownError, () => controller.enqueue('a'), 'enqueue should re-throw the error'); + + return promise_rejects(t, controllerError, rs.getReader().closed); }, 'Readable stream: strategy.size errors the stream and then throws'); -test(() => { +promise_test(t => { - const theError = new Error('a unique string'); + const theError = { name: 'my error' }; let controller; const rs = new ReadableStream( @@ -65,11 +66,9 @@ test(() => { } ); - try { - controller.enqueue('a'); - } catch (error) { - assert_equals(error.name, 'RangeError', 'enqueue should throw a RangeError'); - } + assert_throws(new RangeError(), () => controller.enqueue('a'), 'enqueue should throw a RangeError'); + + return promise_rejects(t, theError, rs.getReader().closed, 'closed should reject with the error'); }, 'Readable stream: strategy.size errors the stream and then returns Infinity'); @@ -115,7 +114,7 @@ test(() => { test(() => { - for (let highWaterMark of [-1, -Infinity]) { + for (const highWaterMark of [-1, -Infinity]) { assert_throws(new RangeError(), () => { new ReadableStream({}, { size() { @@ -126,7 +125,7 @@ test(() => { }, 'construction should throw a RangeError for ' + highWaterMark); } - for (let highWaterMark of [NaN, 'foo', {}]) { + for (const highWaterMark of [NaN, 'foo', {}]) { assert_throws(new TypeError(), () => { new ReadableStream({}, { size() { @@ -142,7 +141,7 @@ test(() => { promise_test(() => { const promises = []; - for (let size of [NaN, -Infinity, Infinity, -1]) { + for (const size of [NaN, -Infinity, Infinity, -1]) { let theError; const rs = new ReadableStream( { diff --git a/tests/wpt/web-platform-tests/streams/readable-streams/bad-underlying-sources.js b/tests/wpt/web-platform-tests/streams/readable-streams/bad-underlying-sources.js index f2fd0fdc929..b95b54bc7fc 100644 --- a/tests/wpt/web-platform-tests/streams/readable-streams/bad-underlying-sources.js +++ b/tests/wpt/web-platform-tests/streams/readable-streams/bad-underlying-sources.js @@ -153,11 +153,11 @@ promise_test(() => { }); rs.cancel(); - controller.enqueue('a'); // Calling enqueue after canceling should not throw anything. + assert_throws(new TypeError, () => controller.enqueue('a'), 'Calling enqueue after canceling should throw'); return rs.getReader().closed; -}, 'Underlying source: calling enqueue on an empty canceled stream should not throw'); +}, 'Underlying source: calling enqueue on an empty canceled stream should throw'); promise_test(() => { @@ -171,11 +171,11 @@ promise_test(() => { }); rs.cancel(); - controller.enqueue('c'); // Calling enqueue after canceling should not throw anything. + assert_throws(new TypeError, () => controller.enqueue('c'), 'Calling enqueue after canceling should throw'); return rs.getReader().closed; -}, 'Underlying source: calling enqueue on a non-empty canceled stream should not throw'); +}, 'Underlying source: calling enqueue on a non-empty canceled stream should throw'); promise_test(() => { @@ -194,7 +194,7 @@ promise_test(t => { const closed = new ReadableStream({ start(c) { c.error(theError); - assert_throws(theError, () => c.enqueue('a'), 'call to enqueue should throw the error'); + assert_throws(new TypeError(), () => c.enqueue('a'), 'call to enqueue should throw the error'); } }).getReader().closed; @@ -251,13 +251,13 @@ promise_test(() => { }); rs.cancel(); - controller.close(); // Calling close after canceling should not throw anything. + assert_throws(new TypeError(), () => controller.close(), 'Calling close after canceling should throw'); return rs.getReader().closed.then(() => { assert_true(startCalled); }); -}, 'Underlying source: calling close on an empty canceled stream should not throw'); +}, 'Underlying source: calling close on an empty canceled stream should throw'); promise_test(() => { @@ -272,13 +272,13 @@ promise_test(() => { }); rs.cancel(); - controller.close(); // Calling close after canceling should not throw anything. + assert_throws(new TypeError(), () => controller.close(), 'Calling close after canceling should throw'); return rs.getReader().closed.then(() => { assert_true(startCalled); }); -}, 'Underlying source: calling close on a non-empty canceled stream should not throw'); +}, 'Underlying source: calling close on a non-empty canceled stream should throw'); promise_test(() => { diff --git a/tests/wpt/web-platform-tests/streams/readable-streams/cancel.js b/tests/wpt/web-platform-tests/streams/readable-streams/cancel.js index f5014c2c94d..3857c8e9341 100644 --- a/tests/wpt/web-platform-tests/streams/readable-streams/cancel.js +++ b/tests/wpt/web-platform-tests/streams/readable-streams/cancel.js @@ -24,7 +24,6 @@ promise_test(() => { cancel() { randomSource.readStop(); - randomSource.onend(); return new Promise(resolve => { setTimeout(() => { diff --git a/tests/wpt/web-platform-tests/streams/readable-streams/general.js b/tests/wpt/web-platform-tests/streams/readable-streams/general.js index fe81bd54d3f..30eb7ab8160 100644 --- a/tests/wpt/web-platform-tests/streams/readable-streams/general.js +++ b/tests/wpt/web-platform-tests/streams/readable-streams/general.js @@ -10,6 +10,7 @@ test(() => { new ReadableStream(); // ReadableStream constructed with no parameters new ReadableStream({ }); // ReadableStream constructed with an empty object as parameter + new ReadableStream({ type: undefined }); // ReadableStream constructed with undefined type new ReadableStream(undefined); // ReadableStream constructed with undefined as parameter let x; @@ -25,6 +26,17 @@ test(() => { test(() => { + assert_throws(new RangeError(), () => new ReadableStream({ type: null }), + 'constructor should throw when the type is null'); + assert_throws(new RangeError(), () => new ReadableStream({ type: '' }), + 'constructor should throw when the type is empty string'); + assert_throws(new RangeError(), () => new ReadableStream({ type: 'asdf' }), + 'constructor should throw when the type is asdf'); + +}, 'ReadableStream can\'t be constructed with an invalid type'); + +test(() => { + const methods = ['cancel', 'constructor', 'getReader', 'pipeThrough', 'pipeTo', 'tee']; const properties = methods.concat(['locked']).sort(); @@ -33,7 +45,7 @@ test(() => { assert_array_equals(Object.getOwnPropertyNames(proto).sort(), properties, 'should have all the correct methods'); - for (let m of methods) { + for (const m of methods) { const propDesc = Object.getOwnPropertyDescriptor(proto, m); assert_false(propDesc.enumerable, 'method should be non-enumerable'); assert_true(propDesc.configurable, 'method should be configurable'); @@ -92,7 +104,7 @@ test(() => { assert_array_equals(Object.getOwnPropertyNames(proto).sort(), properties, 'the controller should have the right properties'); - for (let m of methods) { + for (const m of methods) { const propDesc = Object.getOwnPropertyDescriptor(proto, m); assert_equals(typeof controller[m], 'function', `should have a ${m} method`); assert_false(propDesc.enumerable, m + ' should be non-enumerable'); @@ -108,7 +120,7 @@ test(() => { assert_true(desiredSizePropDesc.configurable, 'desiredSize should be configurable'); assert_equals(controller.close.length, 0, 'close should have no parameters'); - assert_equals(controller.constructor.length, 1, 'constructor should have 1 parameter'); + assert_equals(controller.constructor.length, 4, 'constructor should have 4 parameter'); assert_equals(controller.enqueue.length, 1, 'enqueue should have 1 parameter'); assert_equals(controller.error.length, 1, 'error should have 1 parameter'); @@ -205,7 +217,7 @@ promise_test(() => { const rs = new ReadableStream({ start(c) { - for (let o of objects) { + for (const o of objects) { c.enqueue(o); } c.close(); @@ -608,23 +620,35 @@ promise_test(() => { }, 'ReadableStream pull should be able to close a stream.'); -test(() => { +promise_test(t => { - let startCalled = false; + const controllerError = { name: 'controller error' }; - new ReadableStream({ - start(c) { - assert_equals(c.enqueue('a'), undefined, 'the first enqueue should return undefined'); - c.close(); + const rs = new ReadableStream({ + pull(c) { + c.error(controllerError); + } + }); - assert_throws(new TypeError(), () => c.enqueue('b'), 'enqueue after close should throw a TypeError'); - startCalled = true; + return promise_rejects(t, controllerError, rs.getReader().closed); + +}, 'ReadableStream pull should be able to error a stream.'); + +promise_test(t => { + + const controllerError = { name: 'controller error' }; + const thrownError = { name: 'thrown error' }; + + const rs = new ReadableStream({ + pull(c) { + c.error(controllerError); + throw thrownError; } }); - assert_true(startCalled); + return promise_rejects(t, controllerError, rs.getReader().closed); -}, 'ReadableStream: enqueue should throw when the stream is readable but draining'); +}, 'ReadableStream pull should be able to error a stream and throw.'); test(() => { @@ -632,34 +656,34 @@ test(() => { new ReadableStream({ start(c) { + assert_equals(c.enqueue('a'), undefined, 'the first enqueue should return undefined'); c.close(); - assert_throws(new TypeError(), () => c.enqueue('a'), 'enqueue after close should throw a TypeError'); + assert_throws(new TypeError(), () => c.enqueue('b'), 'enqueue after close should throw a TypeError'); startCalled = true; } }); assert_true(startCalled); -}, 'ReadableStream: enqueue should throw when the stream is closed'); +}, 'ReadableStream: enqueue should throw when the stream is readable but draining'); test(() => { let startCalled = false; - const expectedError = new Error('i am sad'); new ReadableStream({ start(c) { - c.error(expectedError); + c.close(); - assert_throws(expectedError, () => c.enqueue('a'), 'enqueue after error should throw that error'); + assert_throws(new TypeError(), () => c.enqueue('a'), 'enqueue after close should throw a TypeError'); startCalled = true; } }); assert_true(startCalled); -}, 'ReadableStream: enqueue should throw the stored error when the stream is errored'); +}, 'ReadableStream: enqueue should throw when the stream is closed'); promise_test(() => { @@ -799,7 +823,7 @@ promise_test(t => { return readableStreamToArray(rs).then(chunks => { assert_equals(chunks.length, 8, '8 chunks should be read'); - for (let chunk of chunks) { + for (const chunk of chunks) { assert_equals(chunk.length, 128, 'chunk should have 128 bytes'); } }); diff --git a/tests/wpt/web-platform-tests/streams/readable-streams/readable-stream-reader.js b/tests/wpt/web-platform-tests/streams/readable-streams/readable-stream-reader.js index d7d81cf2d34..1d5bc13004f 100644 --- a/tests/wpt/web-platform-tests/streams/readable-streams/readable-stream-reader.js +++ b/tests/wpt/web-platform-tests/streams/readable-streams/readable-stream-reader.js @@ -32,7 +32,7 @@ test(() => { assert_array_equals(Object.getOwnPropertyNames(proto).sort(), properties); - for (let m of methods) { + for (const m of methods) { const propDesc = Object.getOwnPropertyDescriptor(proto, m); assert_equals(propDesc.enumerable, false, 'method should be non-enumerable'); assert_equals(propDesc.configurable, true, 'method should be configurable'); diff --git a/tests/wpt/web-platform-tests/streams/resources/rs-test-templates.js b/tests/wpt/web-platform-tests/streams/resources/rs-test-templates.js index 852b565d904..e36463ba7cf 100644 --- a/tests/wpt/web-platform-tests/streams/resources/rs-test-templates.js +++ b/tests/wpt/web-platform-tests/streams/resources/rs-test-templates.js @@ -19,6 +19,16 @@ self.templatedRSEmpty = (label, factory) => { assert_equals(typeof rs.tee, 'function', 'has a tee method'); }, 'instances have the correct methods and properties'); + + test(() => { + const rs = factory(); + + assert_throws(new RangeError(), () => rs.getReader({ mode: '' }), 'empty string mode should throw'); + assert_throws(new RangeError(), () => rs.getReader({ mode: null }), 'null mode should throw'); + assert_throws(new RangeError(), () => rs.getReader({ mode: 'asdf' }), 'asdf mode should throw'); + assert_throws(new TypeError(), () => rs.getReader(null), 'null should throw'); + + }, 'calling getReader with invalid arguments should throw appropriate errors'); }; self.templatedRSClosed = (label, factory) => { diff --git a/tests/wpt/web-platform-tests/tools/manifest/manifest.py b/tests/wpt/web-platform-tests/tools/manifest/manifest.py index 33e194df409..b154a488004 100644 --- a/tests/wpt/web-platform-tests/tools/manifest/manifest.py +++ b/tests/wpt/web-platform-tests/tools/manifest/manifest.py @@ -42,6 +42,9 @@ class Manifest(object): for path in self.local_changes.iterdeleted(): if path in paths: del paths[path] + if item_type == "reftest": + for path, items in self.local_changes.iterdeletedreftests(): + paths[path] -= items yield item_type, paths @@ -170,14 +173,37 @@ class Manifest(object): self.url_base = url_base def update_reftests(self): - reftest_nodes = self.reftest_nodes.copy() - for path, items in self.local_changes.reftest_nodes.iteritems(): - reftest_nodes[path] |= items + default_reftests = self.compute_reftests(self.reftest_nodes) + all_reftest_nodes = self.reftest_nodes.copy() + all_reftest_nodes.update(self.local_changes.reftest_nodes) - #TODO: remove locally deleted files - tests = set() - for items in reftest_nodes.values(): - tests |= set(item for item in items if not item.is_reference) + for item in self.local_changes.iterdeleted(): + if item in all_reftest_nodes: + del all_reftest_nodes[item] + + modified_reftests = self.compute_reftests(all_reftest_nodes) + + added_reftests = modified_reftests - default_reftests + # The interesting case here is not when the file is deleted, + # but when a reftest like A == B is changed to the form + # C == A == B, so that A still exists but is now a ref rather than + # a test. + removed_reftests = default_reftests - modified_reftests + + dests = [(default_reftests, self._data["reftest"]), + (added_reftests, self.local_changes._data["reftest"]), + (removed_reftests, self.local_changes._deleted_reftests)] + + #TODO: Warn if there exist unreachable reftest nodes + for source, target in dests: + for item in source: + target[item.path].add(item) + + def compute_reftests(self, reftest_nodes): + """Given a set of reftest_nodes, return a set of all the nodes that are top-level + tests i.e. don't have any incoming reference links.""" + + reftests = set() has_inbound = set() for path, items in reftest_nodes.iteritems(): @@ -185,18 +211,13 @@ class Manifest(object): for ref_url, ref_type in item.references: has_inbound.add(ref_url) - if self.local_changes.reftest_nodes: - target = self.local_changes - else: - target = self - - #TODO: Warn if there exist unreachable reftest nodes - for path, items in reftest_nodes.iteritems(): for item in items: if item.url in has_inbound: continue - target._data["reftest"][path].add(item) + reftests.add(item) + + return reftests def to_json(self): out_items = { @@ -261,6 +282,7 @@ class Manifest(object): source_files=source_files) return self + class LocalChanges(object): def __init__(self, manifest): self.manifest = manifest @@ -268,6 +290,7 @@ class LocalChanges(object): self._deleted = set() self.reftest_nodes = defaultdict(set) self.reftest_nodes_by_url = {} + self._deleted_reftests = defaultdict(set) def add(self, item): if item is None: @@ -305,6 +328,10 @@ class LocalChanges(object): for item in self._deleted: yield item + def iterdeletedreftests(self): + for item in self._deleted_reftests.iteritems(): + yield item + def __getitem__(self, item_type): return self._data[item_type] @@ -312,9 +339,13 @@ class LocalChanges(object): reftest_nodes = {from_os_path(key): [v.to_json() for v in value] for key, value in self.reftest_nodes.iteritems()} + deleted_reftests = {from_os_path(key): [v.to_json() for v in value] + for key, value in self._deleted_reftests.iteritems()} + rv = {"items": defaultdict(dict), "reftest_nodes": reftest_nodes, - "deleted": [from_os_path(path) for path in self._deleted]} + "deleted": [from_os_path(path) for path in self._deleted], + "deleted_reftests": deleted_reftests} for test_type, paths in self._data.iteritems(): for path, tests in paths.iteritems(): @@ -355,6 +386,13 @@ class LocalChanges(object): for item in obj["deleted"]: self.add_deleted(to_os_path(item)) + for path, values in obj.get("deleted_reftests", {}).iteritems(): + path = to_os_path(path) + for v in values: + item = RefTest.from_json(self.manifest, tests_root, v, + source_files=source_files) + self._deleted_reftests[path].add(item) + return self def load(tests_root, manifest): diff --git a/tests/wpt/web-platform-tests/tools/manifest/tests/__init__.py b/tests/wpt/web-platform-tests/tools/manifest/tests/__init__.py new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/manifest/tests/__init__.py diff --git a/tests/wpt/web-platform-tests/tools/manifest/tests/test_manifest.py b/tests/wpt/web-platform-tests/tools/manifest/tests/test_manifest.py new file mode 100644 index 00000000000..bdd0ede1a19 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/manifest/tests/test_manifest.py @@ -0,0 +1,55 @@ +from .. import manifest, item as manifestitem, sourcefile + + +def test_local_reftest_add(): + m = manifest.Manifest() + s = sourcefile.SourceFile("/", "test", "/") + test = manifestitem.RefTest(s, "/test", [("/ref", "==")]) + m.local_changes.add(test) + assert list(m) == [(test.path, {test})] + + +def test_local_reftest_delete_path(): + m = manifest.Manifest() + s = sourcefile.SourceFile("/", "test", "/") + test = manifestitem.RefTest(s, "/test", [("/ref", "==")]) + m.add(test) + m.local_changes.add_deleted(test.path) + assert list(m) == [] + + +def test_local_reftest_adjusted(): + m = manifest.Manifest() + s = sourcefile.SourceFile("/", "test", "/") + test = manifestitem.RefTest(s, "/test", [("/ref", "==")]) + m.add(test) + + assert list(m) == [(test.path, {test})] + + assert m.compute_reftests({test.path: {test}}) == {test} + + test_1 = manifestitem.RefTest(s, "/test-1", [("/test", "==")]) + m.local_changes.add(test_1) + + assert m.compute_reftests({test.path: {test}, test_1.path: {test_1}}) == {test_1} + + m.local_changes._deleted_reftests[test.path] = {test} + + assert list(m) == [(test_1.path, {test_1})] + + +def test_manifest_to_json(): + m = manifest.Manifest() + s = sourcefile.SourceFile("/", "test", "/") + test = manifestitem.RefTest(s, "/test", [("/ref", "==")]) + m.add(test) + test_1 = manifestitem.RefTest(s, "/test-1", [("/test", "==")]) + m.local_changes.add(test_1) + m.local_changes._deleted_reftests[test.path] = {test} + + json_str = m.to_json() + loaded = manifest.Manifest.from_json("/", json_str) + + assert list(loaded) == list(m) + + assert loaded.to_json() == json_str diff --git a/tests/wpt/web-platform-tests/uievents/order-of-events/focus-events/focus-manual.html b/tests/wpt/web-platform-tests/uievents/order-of-events/focus-events/focus-manual.html new file mode 100644 index 00000000000..c91f790e21e --- /dev/null +++ b/tests/wpt/web-platform-tests/uievents/order-of-events/focus-events/focus-manual.html @@ -0,0 +1,81 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8"> + <title>Focus-related events should fire in the correct order</title> + <link rel="author" title="Chris Rebert" href="http://chrisrebert.com"> + <link rel="help" href="https://w3c.github.io/uievents/#events-focusevent-event-order"> + <meta name="flags" content="interact"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + </head> + <body> + <ol> + <li>Click into the first text input.</li> + <li>Click into the second text input.</li> + <li>Click the "Done" button.</li> + </ol> + + <input type="text" id="a" value="First"> + <br> + <input type="text" id="b" value="Second"> + <br> + <button type="button" id="done">Done</button> + + <script> +setup({explicit_timeout: true}); +var done = false; +var events = []; +var targets = []; +function record(e) { + if (done) { + return; + } + events.push(e.type); + targets.push(e.target.id); +} +function finish() { + done = true; +} +var relevantEvents = [ + 'focus', + 'blur', + 'focusin', + 'focusout' +]; +window.onload = function () { + var a = document.getElementById('a'); + var b = document.getElementById('b'); + var inputs = [a, b]; + + b.addEventListener('blur', finish, false); + b.addEventListener('focusout', finish, false); + + for (var i = 0; i < inputs.length; i++) { + for (var k = 0; k < relevantEvents.length; k++) { + inputs[i].addEventListener(relevantEvents[k], record, false); + } + } + + async_test(function(t) { + document.getElementById('done').addEventListener('click', function () { + finish(); + t.step(function () { + assert_array_equals( + events, + ['focusin', 'focus', 'focusout', 'focusin', 'blur', 'focus'], + 'Focus-related events should fire in this order: focusin, focus, focusout, focusin, blur, focus' + ); + assert_array_equals( + targets, + [ 'a', 'a', 'a', 'b', 'a', 'b'], + 'Focus-related events should fire at the correct targets' + ); + t.done(); + }); + }, false); + }, 'Focus-related events should fire in the correct order'); +}; + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/uievents/order-of-events/focus-events/legacy-manual.html b/tests/wpt/web-platform-tests/uievents/order-of-events/focus-events/legacy-manual.html new file mode 100644 index 00000000000..e71273973e6 --- /dev/null +++ b/tests/wpt/web-platform-tests/uievents/order-of-events/focus-events/legacy-manual.html @@ -0,0 +1,84 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8"> + <title>Focus-related events (including legacy events) should fire in the correct order</title> + <link rel="author" title="Chris Rebert" href="http://chrisrebert.com"> + <link rel="help" href="https://w3c.github.io/uievents/#legacy-focusevent-event-order"> + <meta name="flags" content="interact"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + </head> + <body> + <ol> + <li>Click into the first text input.</li> + <li>Click into the second text input.</li> + <li>Click the "Done" button.</li> + </ol> + + <input type="text" id="a" value="First"> + <br> + <input type="text" id="b" value="Second"> + <br> + <button type="button" id="done">Done</button> + + <script> +setup({explicit_timeout: true}); +var done = false; +var events = []; +var targets = []; +function record(e) { + if (done) { + return; + } + events.push(e.type); + targets.push(e.target.id); +} +function finish() { + done = true; +} +var relevantEvents = [ + 'focus', + 'blur', + 'focusin', + 'focusout', + 'DOMFocusIn', + 'DOMFocusOut' +]; +window.onload = function () { + var a = document.getElementById('a'); + var b = document.getElementById('b'); + var inputs = [a, b]; + + b.addEventListener('blur', finish, false); + b.addEventListener('focusout', finish, false); + b.addEventListener('DOMFocusOut', finish, false); + + for (var i = 0; i < inputs.length; i++) { + for (var k = 0; k < relevantEvents.length; k++) { + inputs[i].addEventListener(relevantEvents[k], record, false); + } + } + + async_test(function(t) { + document.getElementById('done').addEventListener('click', function () { + finish(); + t.step(function () { + assert_array_equals( + events, + ['focusin', 'focus', 'DOMFocusIn', 'focusout', 'focusin', 'blur', 'DOMFocusOut', 'focus', 'DOMFocusIn'], + 'Focus-related events should fire in this order: focusin, focus, DOMFocusIn, focusout, focusin, blur, DOMFocusOut, focus, DOMFocusIn' + ); + assert_array_equals( + targets, + [ 'a', 'a', 'a', 'a', 'b', 'a', 'a', 'b', 'b'], + 'Focus-related events should fire at the correct targets' + ); + t.done(); + }); + }, false); + }, 'Focus-related events should fire in the correct order'); +}; + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/url/a-element.js b/tests/wpt/web-platform-tests/url/a-element.js index 1d92c9d88ab..c77df5bf2ee 100644 --- a/tests/wpt/web-platform-tests/url/a-element.js +++ b/tests/wpt/web-platform-tests/url/a-element.js @@ -38,7 +38,9 @@ function runURLTests(urltests) { } assert_equals(url.href, expected.href, "href") - assert_equals(url.origin, expected.origin, "origin") + if ("origin" in expected) { + assert_equals(url.origin, expected.origin, "origin") + } assert_equals(url.protocol, expected.protocol, "protocol") assert_equals(url.username, expected.username, "username") assert_equals(url.password, expected.password, "password") diff --git a/tests/wpt/web-platform-tests/url/url-constructor.html b/tests/wpt/web-platform-tests/url/url-constructor.html index 80eb943aa16..f47fa358a06 100644 --- a/tests/wpt/web-platform-tests/url/url-constructor.html +++ b/tests/wpt/web-platform-tests/url/url-constructor.html @@ -38,7 +38,9 @@ function runURLTests(urltests) { var url = bURL(expected.input, expected.base) assert_equals(url.href, expected.href, "href") - assert_equals(url.origin, expected.origin, "origin") + if ("origin" in expected) { + assert_equals(url.origin, expected.origin, "origin") + } assert_equals(url.protocol, expected.protocol, "protocol") assert_equals(url.username, expected.username, "username") assert_equals(url.password, expected.password, "password") diff --git a/tests/wpt/web-platform-tests/url/urltestdata.json b/tests/wpt/web-platform-tests/url/urltestdata.json index 322f69ec893..ee5416ecf23 100644 --- a/tests/wpt/web-platform-tests/url/urltestdata.json +++ b/tests/wpt/web-platform-tests/url/urltestdata.json @@ -4163,6 +4163,22 @@ "search": "", "hash": "" }, + "# unknown scheme with path looking like a password", + { + "input": "sc::a@example.net", + "base": "about:blank", + "href": "sc::a@example.net", + "origin": "null", + "protocol": "sc:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": ":a@example.net", + "search": "", + "hash": "" + }, "# tests from jsdom/whatwg-url designed for code coverage", { "input": "http://127.0.0.1:10100/relative_import.html", diff --git a/tests/wpt/web-platform-tests/web-animations/animation-effect-timing/easing.html b/tests/wpt/web-platform-tests/web-animations/animation-effect-timing/easing.html new file mode 100644 index 00000000000..d3fed91a37d --- /dev/null +++ b/tests/wpt/web-platform-tests/web-animations/animation-effect-timing/easing.html @@ -0,0 +1,84 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>easing tests</title> +<link rel="help" href="https://w3c.github.io/web-animations/#dom-animationeffecttiming-easing"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../testcommon.js"></script> +<script src="../resources/effect-easing-tests.js"></script> +<body> +<div id="log"></div> +<script> +'use strict'; + +function assert_progress(animation, currentTime, easingFunction) { + animation.currentTime = currentTime; + var portion = currentTime / animation.effect.timing.duration; + assert_approx_equals(animation.effect.getComputedTiming().progress, + easingFunction(portion), + 0.01, + 'The progress of the animation should be approximately ' + + easingFunction(portion) + ' at ' + currentTime + 'ms'); +} + +gEffectEasingTests.forEach(function(options) { + test(function(t) { + var target = createDiv(t); + var anim = target.animate([ { opacity: 0 }, { opacity: 1 } ], + { duration: 1000 * MS_PER_SEC, + fill: 'forwards' }); + anim.effect.timing.easing = options.easing; + assert_equals(anim.effect.timing.easing, options.easing); + + var easing = options.easingFunction; + assert_progress(anim, 0, easing); + assert_progress(anim, 250 * MS_PER_SEC, easing); + assert_progress(anim, 500 * MS_PER_SEC, easing); + assert_progress(anim, 750 * MS_PER_SEC, easing); + assert_progress(anim, 1000 * MS_PER_SEC, easing); + }, options.desc); +}); + +test(function(t) { + var div = createDiv(t); + var anim = div.animate({ opacity: [ 0, 1 ] }, 100 * MS_PER_SEC); + assert_throws({ name: 'TypeError' }, + function() { + anim.effect.timing.easing = ''; + }); + assert_throws({ name: 'TypeError' }, + function() { + anim.effect.timing.easing = 'test'; + }); +}, 'Test invalid easing value'); + +test(function(t) { + var delay = 1000 * MS_PER_SEC; + + var target = createDiv(t); + var anim = target.animate([ { opacity: 0 }, { opacity: 1 } ], + { duration: 1000 * MS_PER_SEC, + fill: 'both', + delay: delay, + easing: 'steps(2, start)' }); + + anim.effect.timing.easing = 'steps(2, end)'; + assert_equals(anim.effect.getComputedTiming().progress, 0, + 'easing replace to steps(2, end) at before phase'); + + anim.currentTime = delay + 750 * MS_PER_SEC; + assert_equals(anim.effect.getComputedTiming().progress, 0.5, + 'change currentTime to active phase'); + + anim.effect.timing.easing = 'steps(2, start)'; + assert_equals(anim.effect.getComputedTiming().progress, 1, + 'easing replace to steps(2, start) at active phase'); + + anim.currentTime = delay + 1500 * MS_PER_SEC; + anim.effect.timing.easing = 'steps(2, end)'; + assert_equals(anim.effect.getComputedTiming().progress, 1, + 'easing replace to steps(2, end) again at after phase'); +}, 'Change the easing while the animation is running'); + +</script> +</body> diff --git a/tests/wpt/web-platform-tests/web-animations/animation-effect-timing/fill.html b/tests/wpt/web-platform-tests/web-animations/animation-effect-timing/fill.html new file mode 100644 index 00000000000..e635bebae1c --- /dev/null +++ b/tests/wpt/web-platform-tests/web-animations/animation-effect-timing/fill.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>fill tests</title> +<link rel="help" href="https://w3c.github.io/web-animations/#dom-animationeffecttiming-fill"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../testcommon.js"></script> +<link rel="stylesheet" href="/resources/testharness.css"> +<body> +<div id="log"></div> +<script> +'use strict'; + +["none", "forwards", "backwards", "both", ].forEach(function(fill){ + test(function(t) { + var div = createDiv(t); + var anim = div.animate({ opacity: [ 0, 1 ] }, 100); + anim.effect.timing.fill = fill; + assert_equals(anim.effect.timing.fill, fill, 'set fill ' + fill); + assert_equals(anim.effect.getComputedTiming().fill, fill, 'getComputedTiming() after set fill ' + fill); + }, 'set fill ' + fill); +}); + +</script> +</body> diff --git a/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/discrete-animation.html b/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/discrete-animation.html new file mode 100644 index 00000000000..864a9e2845b --- /dev/null +++ b/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/discrete-animation.html @@ -0,0 +1,136 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Tests for discrete animation</title> +<link rel="help" href="http://w3c.github.io/web-animations/#animatable-as-string-section"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../../testcommon.js"></script> +<link rel="stylesheet" href="/resources/testharness.css"> +<body> +<div id="log"></div> +<script> +'use strict'; + +test(function(t) { + var div = createDiv(t); + + var anim = div.animate({ fontStyle: [ 'normal', 'italic' ] }, + { duration: 1000, fill: 'forwards' }); + + assert_equals(getComputedStyle(div).fontStyle, 'normal', + 'Animation produces \'from\' value at start of interval'); + anim.currentTime = anim.effect.getComputedTiming().duration / 2 - 1; + assert_equals(getComputedStyle(div).fontStyle, 'normal', + 'Animation produces \'from\' value just before the middle of' + + ' the interval'); + anim.currentTime++; + assert_equals(getComputedStyle(div).fontStyle, 'italic', + 'Animation produces \'to\' value at exact middle of' + + ' the interval'); + anim.finish(); + assert_equals(getComputedStyle(div).fontStyle, 'italic', + 'Animation produces \'to\' value during forwards fill'); +}, 'Test animating discrete values'); + +test(function(t) { + var div = createDiv(t); + var originalHeight = getComputedStyle(div).height; + + var anim = div.animate({ height: [ 'auto', '200px' ] }, + { duration: 1000, fill: 'forwards' }); + + assert_equals(getComputedStyle(div).height, originalHeight, + 'Animation produces \'from\' value at start of interval'); + anim.currentTime = anim.effect.getComputedTiming().duration / 2 - 1; + assert_equals(getComputedStyle(div).height, originalHeight, + 'Animation produces \'from\' value just before the middle of' + + ' the interval'); + anim.currentTime++; + assert_equals(getComputedStyle(div).height, '200px', + 'Animation produces \'to\' value at exact middle of' + + ' the interval'); + anim.finish(); + assert_equals(getComputedStyle(div).height, '200px', + 'Animation produces \'to\' value during forwards fill'); +}, 'Test discrete animation is used when interpolation fails'); + +test(function(t) { + var div = createDiv(t); + var originalHeight = getComputedStyle(div).height; + + var anim = div.animate({ height: [ 'auto', + '200px', + '300px', + 'auto', + '400px' ] }, + { duration: 1000, fill: 'forwards' }); + + // There are five values, so there are four pairs to try to interpolate. + // We test at the middle of each pair. + assert_equals(getComputedStyle(div).height, originalHeight, + 'Animation produces \'from\' value at start of interval'); + anim.currentTime = 125; + assert_equals(getComputedStyle(div).height, '200px', + 'First non-interpolable pair uses discrete interpolation'); + anim.currentTime += 250; + assert_equals(getComputedStyle(div).height, '250px', + 'Second interpolable pair uses linear interpolation'); + anim.currentTime += 250; + assert_equals(getComputedStyle(div).height, originalHeight, + 'Third non-interpolable pair uses discrete interpolation'); + anim.currentTime += 250; + assert_equals(getComputedStyle(div).height, '400px', + 'Fourth non-interpolable pair uses discrete interpolation'); +}, 'Test discrete animation is used only for pairs of values that cannot' + + ' be interpolated'); + +test(function(t) { + var div = createDiv(t); + var originalHeight = getComputedStyle(div).height; + + // Easing: http://cubic-bezier.com/#.68,0,1,.01 + // With this curve, we don't reach the 50% point until about 95% of + // the time has expired. + var anim = div.animate({ fontStyle: [ 'italic', 'oblique' ] }, + { duration: 1000, fill: 'forwards', + easing: 'cubic-bezier(0.68,0,1,0.01)' }); + + assert_equals(getComputedStyle(div).fontStyle, 'italic', + 'Animation produces \'from\' value at start of interval'); + anim.currentTime = 940; + assert_equals(getComputedStyle(div).fontStyle, 'italic', + 'Animation produces \'from\' value at 94% of the iteration' + + ' time'); + anim.currentTime = 960; + assert_equals(getComputedStyle(div).fontStyle, 'oblique', + 'Animation produces \'to\' value at 96% of the iteration' + + ' time'); +}, 'Test the 50% switch point for discrete animation is based on the' + + ' effect easing'); + +test(function(t) { + var div = createDiv(t); + var originalHeight = getComputedStyle(div).height; + + // Easing: http://cubic-bezier.com/#.68,0,1,.01 + // With this curve, we don't reach the 50% point until about 95% of + // the time has expired. + var anim = div.animate([ { fontStyle: 'italic', + easing: 'cubic-bezier(0.68,0,1,0.01)' }, + { fontStyle: 'oblique' } ], + { duration: 1000, fill: 'forwards' }); + + assert_equals(getComputedStyle(div).fontStyle, 'italic', + 'Animation produces \'from\' value at start of interval'); + anim.currentTime = 940; + assert_equals(getComputedStyle(div).fontStyle, 'italic', + 'Animation produces \'from\' value at 94% of the iteration' + + ' time'); + anim.currentTime = 960; + assert_equals(getComputedStyle(div).fontStyle, 'oblique', + 'Animation produces \'to\' value at 96% of the iteration' + + ' time'); +}, 'Test the 50% switch point for discrete animation is based on the' + + ' keyframe easing'); + +</script> diff --git a/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/not-animatable.html b/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/not-animatable.html new file mode 100644 index 00000000000..653c78036e4 --- /dev/null +++ b/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/not-animatable.html @@ -0,0 +1,120 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Tests for not animatable properties</title> +<link rel="help" href="https://w3c.github.io/web-animations/#not-animatable-section"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../../testcommon.js"></script> +<body> +<div id="log"></div> +<script> +'use strict'; + +test(function(t) { + var div = createDiv(t); + var anim = div.animate({ display: [ 'inline', 'inline-block' ] }, 1000); + + assert_equals(anim.effect.getFrames().length, 0, + 'Animation specified using property-indexed notation but' + + ' consisting of only non-animatable properties should not' + + ' contain any keyframes'); +}, '\'display\' property cannot be animated using property-indexed notation'); + +test(function(t) { + var div = createDiv(t); + var anim = div.animate([ { display: 'inline' }, { display: 'inline-block' } ], + 1000); + + assert_equals(anim.effect.getFrames().length, 2, + 'Animation specified using a keyframe sequence where each' + + ' keyframe contains only non-animatable properties should' + + ' return an equal number of (empty) keyframes'); + assert_false(anim.effect.getFrames()[0].hasOwnProperty('display'), + 'Initial keyframe should not have the \'display\' property'); + assert_false(anim.effect.getFrames()[1].hasOwnProperty('display'), + 'Final keyframe should not have the \'display\' property'); +}, '\'display\' property cannot be animated using a keyframe sequence'); + +test(function(t) { + var properties = { + // CSS Animations properties + animation: [ 'anim 1s', 'anim 2s' ], + animationName: [ 'abc', 'xyz' ], + animationTimingFunction: [ 'ease', 'steps(2)' ], + animationDelay: [ '1s', '2s' ], + animationIterationCount: [ 1, 2 ], + animationDirection: [ 'normal', 'reverse' ], + animationFillMode: [ 'forwards', 'backwards' ], + animationPlayState: [ 'paused', 'running' ], + + // CSS Transitions properties + transition: [ 'all 1s', 'all 2s' ], + transitionDelay: [ '1s', '2s' ], + transitionDuration: [ '1s', '2s' ], + transitionProperty: [ 'all', 'opacity' ], + transitionTimingFunction: [ 'ease', 'ease-out' ] + }; + + var div = createDiv(t); + var anim = div.animate(properties, 1000); + + assert_equals(anim.effect.getFrames().length, 0, + 'Animation specified using property-indexed notation but' + + ' consisting of only non-animatable properties should not' + + ' contain any keyframes'); +}, 'CSS animations and CSS transitions properties cannot be animated using' + + ' property-indexed notation'); + +test(function(t) { + var frames = [ + { + animation: 'anim 1s', + animationName: 'abc', + animationTimingFunction: 'ease', + animationDelay: '1s', + animationIterationCount: 1, + animationDirection: 'normal', + animationFillMode: 'forwards', + animationPlayState: 'paused', + transition: 'all 1s', + transitionDelay: '1s', + transitionDuration: '1s', + transitionProperty: 'opacity', + transitionTimingFunction: 'ease' + }, + { + animation: 'anim 2s', + animationName: 'xyz', + animationTimingFunction: 'steps(2)', + animationDelay: '2s', + animationIterationCount: 2, + animationDirection: 'reverse', + animationFillMode: 'backwards', + animationPlayState: 'running', + transition: 'all 2s', + transitionDelay: '2s', + transitionDuration: '2s', + transitionProperty: 'all', + transitionTimingFunction: 'ease-out' + } + ]; + var defaultKeyframeProperties = [ 'computedOffset', 'easing', 'offset' ]; + + var div = createDiv(t); + var anim = div.animate(frames, 1000); + + assert_equals(anim.effect.getFrames().length, 2, + 'Animation specified using a keyframe sequence where each' + + ' keyframe contains only non-animatable properties should' + + ' return an equal number of (empty) keyframes'); + assert_array_equals(Object.keys(anim.effect.getFrames()[0]), + defaultKeyframeProperties, + 'Initial keyframe should not contain any properties other' + + ' than the default keyframe properties'); + assert_array_equals(Object.keys(anim.effect.getFrames()[1]), + defaultKeyframeProperties, + 'Final keyframe should not contain any properties other' + + ' than the default keyframe properties'); +}, 'CSS animations and CSS transitions properties cannot be animated using' + + ' a sequence of keyframes'); +</script> diff --git a/tests/wpt/web-platform-tests/web-animations/animation-model/keyframes/effect-value-context.html b/tests/wpt/web-platform-tests/web-animations/animation-model/keyframes/effect-value-context.html new file mode 100644 index 00000000000..e2af80dff77 --- /dev/null +++ b/tests/wpt/web-platform-tests/web-animations/animation-model/keyframes/effect-value-context.html @@ -0,0 +1,86 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Tests that property values respond to changes to their context</title> +<link rel="help" href="https://w3c.github.io/web-animations/#keyframes-section"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../../testcommon.js"></script> +<link rel="stylesheet" href="/resources/testharness.css"> +<body> +<div id="log"></div> +<script> + +test(function(t) { + var div = createDiv(t); + div.style.fontSize = '10px'; + var animation = div.animate([ { marginLeft: '10em' }, + { marginLeft: '20em' } ], 1000); + animation.currentTime = 500; + assert_equals(getComputedStyle(div).marginLeft, '150px', + 'Effect value before updating font-size'); + div.style.fontSize = '20px'; + assert_equals(getComputedStyle(div).marginLeft, '300px', + 'Effect value after updating font-size'); +}, 'Effect values reflect changes to font-size on element'); + +test(function(t) { + var parentDiv = createDiv(t); + var div = createDiv(t); + parentDiv.appendChild(div); + parentDiv.style.fontSize = '10px'; + + var animation = div.animate([ { marginLeft: '10em' }, + { marginLeft: '20em' } ], 1000); + animation.currentTime = 500; + assert_equals(getComputedStyle(div).marginLeft, '150px', + 'Effect value before updating font-size on parent element'); + parentDiv.style.fontSize = '20px'; + assert_equals(getComputedStyle(div).marginLeft, '300px', + 'Effect value after updating font-size on parent element'); +}, 'Effect values reflect changes to font-size on parent element'); + +promise_test(function(t) { + var parentDiv = createDiv(t); + var div = createDiv(t); + parentDiv.appendChild(div); + parentDiv.style.fontSize = '10px'; + var animation = div.animate([ { marginLeft: '10em' }, + { marginLeft: '20em' } ], 1000); + + animation.pause(); + animation.currentTime = 500; + parentDiv.style.fontSize = '20px'; + + return animation.ready.then(function() { + assert_equals(getComputedStyle(div).marginLeft, '300px', + 'Effect value after updating font-size on parent element'); + }); +}, 'Effect values reflect changes to font-size when computed style is not' + + ' immediately flushed'); + +promise_test(function(t) { + var divWith10pxFontSize = createDiv(t); + divWith10pxFontSize.style.fontSize = '10px'; + var divWith20pxFontSize = createDiv(t); + divWith20pxFontSize.style.fontSize = '20px'; + + var div = createDiv(t); + div.remove(); // Detach + var animation = div.animate([ { marginLeft: '10em' }, + { marginLeft: '20em' } ], 1000); + animation.pause(); + + return animation.ready.then(function() { + animation.currentTime = 500; + + divWith10pxFontSize.appendChild(div); + assert_equals(getComputedStyle(div).marginLeft, '150px', + 'Effect value after attaching to font-size:10px parent'); + divWith20pxFontSize.appendChild(div); + assert_equals(getComputedStyle(div).marginLeft, '300px', + 'Effect value after attaching to font-size:20px parent'); + }); +}, 'Effect values reflect changes to font-size from reparenting'); + +</script> +</body> diff --git a/tests/wpt/web-platform-tests/web-animations/animation/finished.html b/tests/wpt/web-platform-tests/web-animations/animation/finished.html new file mode 100644 index 00000000000..716fa9571b8 --- /dev/null +++ b/tests/wpt/web-platform-tests/web-animations/animation/finished.html @@ -0,0 +1,371 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Animation.finished</title> +<link rel="help" href="https://w3c.github.io/web-animations/#dom-animation-finished"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../testcommon.js"></script> +<link rel="stylesheet" href="/resources/testharness.css"> +<body> +<div id="log"></div> +<script> +"use strict"; + +promise_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + var previousFinishedPromise = animation.finished; + return animation.ready.then(function() { + assert_equals(animation.finished, previousFinishedPromise, + 'Finished promise is the same object when playing starts'); + animation.pause(); + assert_equals(animation.finished, previousFinishedPromise, + 'Finished promise does not change when pausing'); + animation.play(); + assert_equals(animation.finished, previousFinishedPromise, + 'Finished promise does not change when play() unpauses'); + + animation.currentTime = 100 * MS_PER_SEC; + + return animation.finished; + }).then(function() { + assert_equals(animation.finished, previousFinishedPromise, + 'Finished promise is the same object when playing completes'); + }); +}, 'Test pausing then playing does not change the finished promise'); + +promise_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + var previousFinishedPromise = animation.finished; + animation.finish(); + return animation.finished.then(function() { + assert_equals(animation.finished, previousFinishedPromise, + 'Finished promise is the same object when playing completes'); + animation.play(); + assert_not_equals(animation.finished, previousFinishedPromise, + 'Finished promise changes when replaying animation'); + + previousFinishedPromise = animation.finished; + animation.play(); + assert_equals(animation.finished, previousFinishedPromise, + 'Finished promise is the same after redundant play() call'); + + }); +}, 'Test restarting a finished animation'); + +promise_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + var previousFinishedPromise; + animation.finish(); + return animation.finished.then(function() { + previousFinishedPromise = animation.finished; + animation.playbackRate = -1; + assert_not_equals(animation.finished, previousFinishedPromise, + 'Finished promise should be replaced when reversing a ' + + 'finished promise'); + animation.currentTime = 0; + return animation.finished; + }).then(function() { + previousFinishedPromise = animation.finished; + animation.play(); + assert_not_equals(animation.finished, previousFinishedPromise, + 'Finished promise is replaced after play() call on ' + + 'finished, reversed animation'); + }); +}, 'Test restarting a reversed finished animation'); + +promise_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + var previousFinishedPromise = animation.finished; + animation.finish(); + return animation.finished.then(function() { + animation.currentTime = 100 * MS_PER_SEC + 1000; + assert_equals(animation.finished, previousFinishedPromise, + 'Finished promise is unchanged jumping past end of ' + + 'finished animation'); + }); +}, 'Test redundant finishing of animation'); + +promise_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + // Setup callback to run if finished promise is resolved + var finishPromiseResolved = false; + animation.finished.then(function() { + finishPromiseResolved = true; + }); + return animation.ready.then(function() { + // Jump to mid-way in interval and pause + animation.currentTime = 100 * MS_PER_SEC / 2; + animation.pause(); + return animation.ready; + }).then(function() { + // Jump to the end + // (But don't use finish() since that should unpause as well) + animation.currentTime = 100 * MS_PER_SEC; + return waitForAnimationFrames(2); + }).then(function() { + assert_false(finishPromiseResolved, + 'Finished promise should not resolve when paused'); + }); +}, 'Finished promise does not resolve when paused'); + +promise_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + // Setup callback to run if finished promise is resolved + var finishPromiseResolved = false; + animation.finished.then(function() { + finishPromiseResolved = true; + }); + return animation.ready.then(function() { + // Jump to mid-way in interval and pause + animation.currentTime = 100 * MS_PER_SEC / 2; + animation.pause(); + // Jump to the end + animation.currentTime = 100 * MS_PER_SEC; + return waitForAnimationFrames(2); + }).then(function() { + assert_false(finishPromiseResolved, + 'Finished promise should not resolve when pause-pending'); + }); +}, 'Finished promise does not resolve when pause-pending'); + +promise_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + animation.finish(); + return animation.finished.then(function(resolvedAnimation) { + assert_equals(resolvedAnimation, animation, + 'Object identity of animation passed to Promise callback' + + ' matches the animation object owning the Promise'); + }); +}, 'The finished promise is fulfilled with its Animation'); + +promise_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + var previousFinishedPromise = animation.finished; + + // Set up listeners on finished promise + var retPromise = animation.finished.then(function() { + assert_unreached('finished promise was fulfilled'); + }).catch(function(err) { + assert_equals(err.name, 'AbortError', + 'finished promise is rejected with AbortError'); + assert_not_equals(animation.finished, previousFinishedPromise, + 'Finished promise should change after the original is ' + + 'rejected'); + }); + + animation.cancel(); + + return retPromise; +}, 'finished promise is rejected when an animation is cancelled by calling ' + + 'cancel()'); + +promise_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + var previousFinishedPromise = animation.finished; + animation.finish(); + return animation.finished.then(function() { + animation.cancel(); + assert_not_equals(animation.finished, previousFinishedPromise, + 'A new finished promise should be created when' + + ' cancelling a finished animation'); + }); +}, 'cancelling an already-finished animation replaces the finished promise'); + +promise_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + animation.cancel(); + // The spec says we still create a new finished promise and reject the old + // one even if we're already idle. That behavior might change, but for now + // test that we do that. + var retPromise = animation.finished.catch(function(err) { + assert_equals(err.name, 'AbortError', + 'finished promise is rejected with AbortError'); + }); + + // Redundant call to cancel(); + var previousFinishedPromise = animation.finished; + animation.cancel(); + assert_not_equals(animation.finished, previousFinishedPromise, + 'A redundant call to cancel() should still generate a new' + + ' finished promise'); + return retPromise; +}, 'cancelling an idle animation still replaces the finished promise'); + +promise_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + const HALF_DUR = 100 * MS_PER_SEC / 2; + const QUARTER_DUR = 100 * MS_PER_SEC / 4; + var gotNextFrame = false; + var currentTimeBeforeShortening; + animation.currentTime = HALF_DUR; + return animation.ready.then(function() { + currentTimeBeforeShortening = animation.currentTime; + animation.effect.timing.duration = QUARTER_DUR; + // Below we use gotNextFrame to check that shortening of the animation + // duration causes the finished promise to resolve, rather than it just + // getting resolved on the next animation frame. This relies on the fact + // that the promises are resolved as a micro-task before the next frame + // happens. + waitForAnimationFrames(1).then(function() { + gotNextFrame = true; + }); + + return animation.finished; + }).then(function() { + assert_false(gotNextFrame, 'shortening of the animation duration should ' + + 'resolve the finished promise'); + assert_equals(animation.currentTime, currentTimeBeforeShortening, + 'currentTime should be unchanged when duration shortened'); + var previousFinishedPromise = animation.finished; + animation.effect.timing.duration = 100 * MS_PER_SEC; + assert_not_equals(animation.finished, previousFinishedPromise, + 'Finished promise should change after lengthening the ' + + 'duration causes the animation to become active'); + }); +}, 'Test finished promise changes for animation duration changes'); + +promise_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + var retPromise = animation.ready.then(function() { + animation.playbackRate = 0; + animation.currentTime = 100 * MS_PER_SEC + 1000; + return waitForAnimationFrames(2); + }); + + animation.finished.then(t.step_func(function() { + assert_unreached('finished promise should not resolve when playbackRate ' + + 'is zero'); + })); + + return retPromise; +}, 'Test finished promise changes when playbackRate == 0'); + +promise_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + return animation.ready.then(function() { + animation.playbackRate = -1; + return animation.finished; + }); +}, 'Test finished promise resolves when reaching to the natural boundary.'); + +promise_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + var previousFinishedPromise = animation.finished; + animation.finish(); + return animation.finished.then(function() { + animation.currentTime = 0; + assert_not_equals(animation.finished, previousFinishedPromise, + 'Finished promise should change once a prior ' + + 'finished promise resolved and the animation ' + + 'falls out finished state'); + }); +}, 'Test finished promise changes when a prior finished promise resolved ' + + 'and the animation falls out finished state'); + +test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + var previousFinishedPromise = animation.finished; + animation.currentTime = 100 * MS_PER_SEC; + animation.currentTime = 100 * MS_PER_SEC / 2; + assert_equals(animation.finished, previousFinishedPromise, + 'No new finished promise generated when finished state ' + + 'is checked asynchronously'); +}, 'Test no new finished promise generated when finished state ' + + 'is checked asynchronously'); + +test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + var previousFinishedPromise = animation.finished; + animation.finish(); + animation.currentTime = 100 * MS_PER_SEC / 2; + assert_not_equals(animation.finished, previousFinishedPromise, + 'New finished promise generated when finished state ' + + 'is checked synchronously'); +}, 'Test new finished promise generated when finished state ' + + 'is checked synchronously'); + +promise_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + var resolvedFinished = false; + animation.finished.then(function() { + resolvedFinished = true; + }); + return animation.ready.then(function() { + animation.finish(); + animation.currentTime = 100 * MS_PER_SEC / 2; + }).then(function() { + assert_true(resolvedFinished, + 'Animation.finished should be resolved even if ' + + 'the finished state is changed soon'); + }); + +}, 'Test synchronous finished promise resolved even if finished state ' + + 'is changed soon'); + +promise_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + var resolvedFinished = false; + animation.finished.then(function() { + resolvedFinished = true; + }); + + return animation.ready.then(function() { + animation.currentTime = 100 * MS_PER_SEC; + animation.finish(); + }).then(function() { + assert_true(resolvedFinished, + 'Animation.finished should be resolved soon after finish() is ' + + 'called even if there are other asynchronous promises just before it'); + }); +}, 'Test synchronous finished promise resolved even if asynchronous ' + + 'finished promise happens just before synchronous promise'); + +promise_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + animation.finished.then(t.step_func(function() { + assert_unreached('Animation.finished should not be resolved'); + })); + + return animation.ready.then(function() { + animation.currentTime = 100 * MS_PER_SEC; + animation.currentTime = 100 * MS_PER_SEC / 2; + }); +}, 'Test finished promise is not resolved when the animation ' + + 'falls out finished state immediately'); + +promise_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + return animation.ready.then(function() { + animation.currentTime = 100 * MS_PER_SEC; + animation.finished.then(t.step_func(function() { + assert_unreached('Animation.finished should not be resolved'); + })); + animation.currentTime = 0; + }); + +}, 'Test finished promise is not resolved once the animation ' + + 'falls out finished state even though the current finished ' + + 'promise is generated soon after animation state became finished'); + +</script> +</body> diff --git a/tests/wpt/web-platform-tests/web-animations/animation/id.html b/tests/wpt/web-platform-tests/web-animations/animation/id.html new file mode 100644 index 00000000000..65e10922697 --- /dev/null +++ b/tests/wpt/web-platform-tests/web-animations/animation/id.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Animation.id</title> +<link rel="help" href="https://w3c.github.io/web-animations/#dom-animation-id"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../testcommon.js"></script> +<link rel="stylesheet" href="/resources/testharness.css"> +<body> +<div id="log"></div> +<script> +"use strict"; + +test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + assert_equals(animation.id, '', 'id for CSS Animation is initially empty'); + animation.id = 'anim' + + assert_equals(animation.id, 'anim', 'animation.id reflects the value set'); +}, 'Animation.id for CSS Animations'); + +</script> +</body> diff --git a/tests/wpt/web-platform-tests/web-animations/animation/oncancel.html b/tests/wpt/web-platform-tests/web-animations/animation/oncancel.html new file mode 100644 index 00000000000..43f327b76f0 --- /dev/null +++ b/tests/wpt/web-platform-tests/web-animations/animation/oncancel.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Animation.oncancel</title> +<link rel="help" href="https://w3c.github.io/web-animations/#dom-animation-oncancel"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../testcommon.js"></script> +<link rel="stylesheet" href="/resources/testharness.css"> +<body> +<div id="log"></div> +<script> +"use strict"; + +async_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + var finishedTimelineTime; + animation.finished.then().catch(function() { + finishedTimelineTime = animation.timeline.currentTime; + }); + + animation.oncancel = t.step_func_done(function(event) { + assert_equals(event.currentTime, null, + 'event.currentTime should be null'); + assert_equals(event.timelineTime, finishedTimelineTime, + 'event.timelineTime should equal to the animation timeline ' + + 'when finished promise is rejected'); + }); + + animation.cancel(); +}, 'oncancel event is fired when animation.cancel() is called.'); + +</script> +</body> diff --git a/tests/wpt/web-platform-tests/web-animations/animation/onfinish.html b/tests/wpt/web-platform-tests/web-animations/animation/onfinish.html new file mode 100644 index 00000000000..459a54bc7ca --- /dev/null +++ b/tests/wpt/web-platform-tests/web-animations/animation/onfinish.html @@ -0,0 +1,122 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Animation.onfinish</title> +<link rel="help" href="https://w3c.github.io/web-animations/#dom-animation-onfinish"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../testcommon.js"></script> +<link rel="stylesheet" href="/resources/testharness.css"> +<body> +<div id="log"></div> +<script> +"use strict"; + +async_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + var finishedTimelineTime; + animation.finished.then(function() { + finishedTimelineTime = animation.timeline.currentTime; + }); + + animation.onfinish = t.step_func_done(function(event) { + assert_equals(event.currentTime, 0, + 'event.currentTime should be zero'); + assert_equals(event.timelineTime, finishedTimelineTime, + 'event.timelineTime should equal to the animation timeline ' + + 'when finished promise is resolved'); + }); + + animation.playbackRate = -1; +}, 'onfinish event is fired when the currentTime < 0 and ' + + 'the playbackRate < 0'); + +async_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + + var finishedTimelineTime; + animation.finished.then(function() { + finishedTimelineTime = animation.timeline.currentTime; + }); + + animation.onfinish = t.step_func_done(function(event) { + assert_equals(event.currentTime, 100 * MS_PER_SEC, + 'event.currentTime should be the effect end'); + assert_equals(event.timelineTime, finishedTimelineTime, + 'event.timelineTime should equal to the animation timeline ' + + 'when finished promise is resolved'); + }); + + animation.currentTime = 100 * MS_PER_SEC; +}, 'onfinish event is fired when the currentTime > 0 and ' + + 'the playbackRate > 0'); + +async_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + + var finishedTimelineTime; + animation.finished.then(function() { + finishedTimelineTime = animation.timeline.currentTime; + }); + + animation.onfinish = t.step_func_done(function(event) { + assert_equals(event.currentTime, 100 * MS_PER_SEC, + 'event.currentTime should be the effect end'); + assert_equals(event.timelineTime, finishedTimelineTime, + 'event.timelineTime should equal to the animation timeline ' + + 'when finished promise is resolved'); + }); + + animation.finish(); +}, 'onfinish event is fired when animation.finish() is called'); + +promise_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + + animation.onfinish = function(event) { + assert_unreached('onfinish event should not be fired'); + }; + + animation.currentTime = 100 * MS_PER_SEC / 2; + animation.pause(); + + return animation.ready.then(function() { + animation.currentTime = 100 * MS_PER_SEC; + return waitForAnimationFrames(2); + }); +}, 'onfinish event is not fired when paused'); + +promise_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + animation.onfinish = function(event) { + assert_unreached('onfinish event should not be fired'); + }; + + return animation.ready.then(function() { + animation.playbackRate = 0; + animation.currentTime = 100 * MS_PER_SEC; + return waitForAnimationFrames(2); + }); +}, 'onfinish event is not fired when the playbackRate is zero'); + +promise_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + animation.onfinish = function(event) { + assert_unreached('onfinish event should not be fired'); + }; + + return animation.ready.then(function() { + animation.currentTime = 100 * MS_PER_SEC; + animation.currentTime = 100 * MS_PER_SEC / 2; + return waitForAnimationFrames(2); + }); +}, 'onfinish event is not fired when the animation falls out ' + + 'finished state immediately'); + +</script> +</body> diff --git a/tests/wpt/web-platform-tests/web-animations/animation/pause.html b/tests/wpt/web-platform-tests/web-animations/animation/pause.html new file mode 100644 index 00000000000..0b2c327786c --- /dev/null +++ b/tests/wpt/web-platform-tests/web-animations/animation/pause.html @@ -0,0 +1,99 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Animation.pause()</title> +<link rel="help" href="https://w3c.github.io/web-animations/#dom-animation-pause"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../testcommon.js"></script> +<link rel="stylesheet" href="/resources/testharness.css"> +<body> +<div id="log"></div> +<script> +"use strict"; + +promise_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 1000 * MS_PER_SEC); + var previousCurrentTime = animation.currentTime; + + return animation.ready.then(waitForAnimationFrames(1)).then(function() { + assert_true(animation.currentTime >= previousCurrentTime, + 'currentTime is initially increasing'); + animation.pause(); + return animation.ready; + }).then(function() { + previousCurrentTime = animation.currentTime; + return waitForAnimationFrames(1); + }).then(function() { + assert_equals(animation.currentTime, previousCurrentTime, + 'currentTime does not increase after calling pause()'); + }); +}, 'pause() a running animation'); + +promise_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 1000 * MS_PER_SEC); + + // Go to idle state then pause + animation.cancel(); + animation.pause(); + + assert_equals(animation.currentTime, 0, 'currentTime is set to 0'); + assert_equals(animation.startTime, null, 'startTime is not set'); + assert_equals(animation.playState, 'pending', 'initially pause-pending'); + + // Check it still resolves as expected + return animation.ready.then(function() { + assert_equals(animation.playState, 'paused', + 'resolves to paused state asynchronously'); + assert_equals(animation.currentTime, 0, + 'keeps the initially set currentTime'); + }); +}, 'pause() from idle'); + +promise_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 1000 * MS_PER_SEC); + animation.cancel(); + animation.playbackRate = -1; + animation.pause(); + + assert_equals(animation.currentTime, 1000 * MS_PER_SEC, + 'currentTime is set to the effect end'); + + return animation.ready.then(function() { + assert_equals(animation.currentTime, 1000 * MS_PER_SEC, + 'keeps the initially set currentTime'); + }); +}, 'pause() from idle with a negative playbackRate'); + +test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, {duration: 1000 * MS_PER_SEC, + iterations: Infinity}); + animation.cancel(); + animation.playbackRate = -1; + + assert_throws('InvalidStateError', + function () { animation.pause(); }, + 'Expect InvalidStateError exception on calling pause() ' + + 'from idle with a negative playbackRate and ' + + 'infinite-duration animation'); +}, 'pause() from idle with a negative playbackRate and endless effect'); + +promise_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 1000 * MS_PER_SEC); + return animation.ready + .then(function(animation) { + animation.finish(); + animation.pause(); + return animation.ready; + }).then(function(animation) { + assert_equals(animation.currentTime, 1000 * MS_PER_SEC, + 'currentTime after pausing finished animation'); + }); +}, 'pause() on a finished animation'); + +</script> +</body> diff --git a/tests/wpt/web-platform-tests/web-animations/animation/ready.html b/tests/wpt/web-platform-tests/web-animations/animation/ready.html new file mode 100644 index 00000000000..cea946c1429 --- /dev/null +++ b/tests/wpt/web-platform-tests/web-animations/animation/ready.html @@ -0,0 +1,97 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Animation.ready</title> +<link rel="help" href="https://w3c.github.io/web-animations/#dom-animation-ready"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../testcommon.js"></script> +<link rel="stylesheet" href="/resources/testharness.css"> +<body> +<div id="log"></div> +<script> +"use strict"; + +promise_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + var originalReadyPromise = animation.ready; + var pauseReadyPromise; + + return animation.ready.then(function() { + assert_equals(animation.ready, originalReadyPromise, + 'Ready promise is the same object when playing completes'); + animation.pause(); + assert_not_equals(animation.ready, originalReadyPromise, + 'A new ready promise is created when pausing'); + pauseReadyPromise = animation.ready; + // Wait for the promise to fulfill since if we abort the pause the ready + // promise object is reused. + return animation.ready; + }).then(function() { + animation.play(); + assert_not_equals(animation.ready, pauseReadyPromise, + 'A new ready promise is created when playing'); + }); +}, 'A new ready promise is created when play()/pause() is called'); + +promise_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + + return animation.ready.then(function() { + var promiseBeforeCallingPlay = animation.ready; + animation.play(); + assert_equals(animation.ready, promiseBeforeCallingPlay, + 'Ready promise has same object identity after redundant call' + + ' to play()'); + }); +}, 'Redundant calls to play() do not generate new ready promise objects'); + +promise_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + + return animation.ready.then(function(resolvedAnimation) { + assert_equals(resolvedAnimation, animation, + 'Object identity of Animation passed to Promise callback' + + ' matches the Animation object owning the Promise'); + }); +}, 'The ready promise is fulfilled with its Animation'); + +promise_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + + var retPromise = animation.ready.then(function() { + assert_unreached('ready promise was fulfilled'); + }).catch(function(err) { + assert_equals(err.name, 'AbortError', + 'ready promise is rejected with AbortError'); + }); + + animation.cancel(); + + return retPromise; +}, 'ready promise is rejected when a pause-pending animation is cancelled by' + + ' calling cancel()'); + +promise_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + return animation.ready.then(function() { + animation.pause(); + // Set up listeners on pause-pending ready promise + var retPromise = animation.ready.then(function() { + assert_unreached('ready promise was fulfilled'); + }).catch(function(err) { + assert_equals(err.name, 'AbortError', + 'ready promise is rejected with AbortError'); + }); + animation.cancel(); + return retPromise; + }); +}, 'ready promise is rejected when a pause-pending animation is cancelled by' + + ' calling cancel()'); + +</script> +</body> diff --git a/tests/wpt/web-platform-tests/web-animations/animation/reverse.html b/tests/wpt/web-platform-tests/web-animations/animation/reverse.html new file mode 100644 index 00000000000..3731cf51804 --- /dev/null +++ b/tests/wpt/web-platform-tests/web-animations/animation/reverse.html @@ -0,0 +1,150 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Animation.reverse()</title> +<link rel="help" href="https://w3c.github.io/web-animations/#dom-animation-reverse"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../testcommon.js"></script> +<link rel="stylesheet" href="/resources/testharness.css"> +<body> +<div id="log"></div> +<script> +"use strict"; + +promise_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, {duration: 100 * MS_PER_SEC, + iterations: Infinity}); + + // Wait a frame because if currentTime is still 0 when we call + // reverse(), it will throw (per spec). + return animation.ready.then(waitForAnimationFrames(1)).then(function() { + assert_greater_than_equal(animation.currentTime, 0, + 'currentTime expected to be greater than 0, one frame after starting'); + animation.currentTime = 50 * MS_PER_SEC; + var previousPlaybackRate = animation.playbackRate; + animation.reverse(); + assert_equals(animation.playbackRate, -previousPlaybackRate, + 'playbackRate should be inverted'); + }); +}, 'reverse() inverts playbackRate'); + +promise_test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, {duration: 100 * MS_PER_SEC, + iterations: Infinity}); + animation.currentTime = 50 * MS_PER_SEC; + animation.pause(); + + return animation.ready.then(function() { + animation.reverse(); + return animation.ready; + }).then(function() { + assert_equals(animation.playState, 'running', + 'Animation.playState should be "running" after reverse()'); + }); +}, 'reverse() starts to play when pausing animation'); + +test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + animation.currentTime = 50 * MS_PER_SEC; + animation.reverse(); + + assert_equals(animation.currentTime, 50 * MS_PER_SEC, + 'reverse() should not change the currentTime ' + + 'if the currentTime is in the middle of animation duration'); +}, 'reverse() maintains the same currentTime'); + +test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + animation.currentTime = 200 * MS_PER_SEC; + animation.reverse(); + + assert_equals(animation.currentTime, 100 * MS_PER_SEC, + 'reverse() should start playing from the animation effect end ' + + 'if the playbackRate > 0 and the currentTime > effect end'); +}, 'reverse() when playbackRate > 0 and currentTime > effect end'); + +test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + + animation.currentTime = -200 * MS_PER_SEC; + animation.reverse(); + + assert_equals(animation.currentTime, 100 * MS_PER_SEC, + 'reverse() should start playing from the animation effect end ' + + 'if the playbackRate > 0 and the currentTime < 0'); +}, 'reverse() when playbackRate > 0 and currentTime < 0'); + +test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + animation.playbackRate = -1; + animation.currentTime = -200 * MS_PER_SEC; + animation.reverse(); + + assert_equals(animation.currentTime, 0, + 'reverse() should start playing from the start of animation time ' + + 'if the playbackRate < 0 and the currentTime < 0'); +}, 'reverse() when playbackRate < 0 and currentTime < 0'); + +test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + animation.playbackRate = -1; + animation.currentTime = 200 * MS_PER_SEC; + animation.reverse(); + + assert_equals(animation.currentTime, 0, + 'reverse() should start playing from the start of animation time ' + + 'if the playbackRate < 0 and the currentTime > effect end'); +}, 'reverse() when playbackRate < 0 and currentTime > effect end'); + +test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, {duration: 100 * MS_PER_SEC, + iterations: Infinity}); + animation.currentTime = -200 * MS_PER_SEC; + + assert_throws('InvalidStateError', + function () { animation.reverse(); }, + 'reverse() should throw InvalidStateError ' + + 'if the playbackRate > 0 and the currentTime < 0 ' + + 'and the target effect is positive infinity'); +}, 'reverse() when playbackRate > 0 and currentTime < 0 ' + + 'and the target effect end is positive infinity'); + +test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, {duration: 100 * MS_PER_SEC, + iterations: Infinity}); + animation.playbackRate = -1; + animation.currentTime = -200 * MS_PER_SEC; + animation.reverse(); + + assert_equals(animation.currentTime, 0, + 'reverse() should start playing from the start of animation time ' + + 'if the playbackRate < 0 and the currentTime < 0 ' + + 'and the target effect is positive infinity'); +}, 'reverse() when playbackRate < 0 and currentTime < 0 ' + + 'and the target effect end is positive infinity'); + +test(function(t) { + var div = createDiv(t); + var animation = div.animate({}, 100 * MS_PER_SEC); + animation.playbackRate = 0; + animation.currentTime = 50 * MS_PER_SEC; + animation.reverse(); + + assert_equals(animation.playbackRate, 0, + 'reverse() should preserve playbackRate if the playbackRate == 0'); + assert_equals(animation.currentTime, 50 * MS_PER_SEC, + 'reverse() should not affect the currentTime if the playbackRate == 0'); + t.done(); +}, 'reverse() when playbackRate == 0'); + +</script> +</body> diff --git a/tests/wpt/web-platform-tests/web-animations/keyframe-effect/constructor.html b/tests/wpt/web-platform-tests/web-animations/keyframe-effect/constructor.html index 50cee72ac47..c14d74fa994 100644 --- a/tests/wpt/web-platform-tests/web-animations/keyframe-effect/constructor.html +++ b/tests/wpt/web-platform-tests/web-animations/keyframe-effect/constructor.html @@ -37,17 +37,6 @@ function assert_frame_lists_equal(a, b) { var gEmptyKeyframeListTests = [ [], - [{}], - [{ easing: "ease-in" }], - [{ unknown: "unknown" }, { unknown: "unknown" }], - [{ color: "invalid" }, { color: "invalid" }], - { easing: "ease-in" }, - { unknown: "unknown" }, - { unknown: [] }, - { unknown: ["unknown"] }, - { unknown: ["unknown", "unknown"] }, - { animationName: ["none", "abc"] }, - { color: [] }, null, undefined, ]; @@ -79,7 +68,7 @@ test(function(t) { "resulting easing for '" + easing + "'"); }); }, "easing values are parsed correctly when passed to the " + - "KeyframeEffectReadOnly constructor in PropertyIndexedKeyframes"); + "KeyframeEffectReadOnly constructor in a property-indexed keyframe"); test(function(t) { gEasingValueTests.forEach(function(subtest) { @@ -93,7 +82,7 @@ test(function(t) { "resulting easing for '" + easing + "'"); }); }, "easing values are parsed correctly when passed to the " + - "KeyframeEffectReadOnly constructor in Keyframe"); + "KeyframeEffectReadOnly constructor in regular keyframes"); test(function(t) { gEasingValueTests.forEach(function(subtest) { @@ -135,7 +124,7 @@ test(function(t) { }); }); }, "composite values are parsed correctly when passed to the " + - "KeyframeEffectReadOnly constructor in PropertyIndexedKeyframes"); + "KeyframeEffectReadOnly constructor in property-indexed keyframes"); test(function(t) { var getFrames = function(composite) { @@ -155,7 +144,7 @@ test(function(t) { }); }); }, "composite values are parsed correctly when passed to the " + - "KeyframeEffectReadOnly constructor in Keyframe"); + "KeyframeEffectReadOnly constructor in regular keyframes"); test(function(t) { gGoodOptionsCompositeValueTests.forEach(function(composite) { @@ -176,79 +165,119 @@ test(function(t) { "KeyframeEffectReadOnly constructor in KeyframeTimingOptions"); var gPropertyIndexedKeyframesTests = [ - { desc: "a one property two value PropertyIndexedKeyframes specification", + { desc: "a one property two value property-indexed keyframes specification", input: { left: ["10px", "20px"] }, - output: [{ offset: 0, computedOffset: 0, easing: "linear", left: "10px" }, - { offset: 1, computedOffset: 1, easing: "linear", left: "20px" }] }, - { desc: "a one shorthand property two value PropertyIndexedKeyframes specification", + output: [{ offset: null, computedOffset: 0, easing: "linear", + left: "10px" }, + { offset: null, computedOffset: 1, easing: "linear", + left: "20px" }] }, + { desc: "a one shorthand property two value property-indexed keyframes" + + " specification", input: { margin: ["10px", "10px 20px 30px 40px"] }, - output: [{ offset: 0, computedOffset: 0, easing: "linear", marginTop: "10px", marginRight: "10px", marginBottom: "10px", marginLeft: "10px" }, - { offset: 1, computedOffset: 1, easing: "linear", marginTop: "10px", marginRight: "20px", marginBottom: "30px", marginLeft: "40px" }] }, - { desc: "a two property (one shorthand and one of its longhand components) two value PropertyIndexedKeyframes specification", + output: [{ offset: null, computedOffset: 0, easing: "linear", + margin: "10px" }, + { offset: null, computedOffset: 1, easing: "linear", + margin: "10px 20px 30px 40px" }] }, + { desc: "a two property (one shorthand and one of its longhand components)" + + " two value property-indexed keyframes specification", input: { marginTop: ["50px", "60px"], margin: ["10px", "10px 20px 30px 40px"] }, - output: [{ offset: 0, computedOffset: 0, easing: "linear", marginTop: "50px", marginRight: "10px", marginBottom: "10px", marginLeft: "10px" }, - { offset: 1, computedOffset: 1, easing: "linear", marginTop: "60px", marginRight: "20px", marginBottom: "30px", marginLeft: "40px" }] }, - { desc: "a two property two value PropertyIndexedKeyframes specification", + output: [{ offset: null, computedOffset: 0, easing: "linear", + marginTop: "50px", margin: "10px" }, + { offset: null, computedOffset: 1, easing: "linear", + marginTop: "60px", margin: "10px 20px 30px 40px" }] }, + { desc: "a two property two value property-indexed keyframes specification", input: { left: ["10px", "20px"], top: ["30px", "40px"] }, - output: [{ offset: 0, computedOffset: 0, easing: "linear", left: "10px", top: "30px" }, - { offset: 1, computedOffset: 1, easing: "linear", left: "20px", top: "40px" }] }, - { desc: "a two property PropertyIndexedKeyframes specification with different numbers of values", + output: [{ offset: null, computedOffset: 0, easing: "linear", + left: "10px", top: "30px" }, + { offset: null, computedOffset: 1, easing: "linear", + left: "20px", top: "40px" }] }, + { desc: "a two property property-indexed keyframes specification with" + + " different numbers of values", input: { left: ["10px", "20px", "30px"], top: ["40px", "50px"] }, - output: [{ offset: 0.0, computedOffset: 0.0, easing: "linear", left: "10px", top: "40px" }, - { offset: 0.5, computedOffset: 0.5, easing: "linear", left: "20px" }, - { offset: 1.0, computedOffset: 1.0, easing: "linear", left: "30px", top: "50px" }] }, - { desc: "a PropertyIndexedKeyframes specification with an invalid value", + output: [{ offset: null, computedOffset: 0.0, easing: "linear", + left: "10px", top: "40px" }, + { offset: null, computedOffset: 0.5, easing: "linear", + left: "20px" }, + { offset: null, computedOffset: 1.0, easing: "linear", + left: "30px", top: "50px" }] }, + { desc: "a property-indexed keyframes specification with an invalid value", input: { left: ["10px", "20px", "30px", "40px", "50px"], top: ["15px", "25px", "invalid", "45px", "55px"] }, - output: [{ offset: 0.00, computedOffset: 0.00, easing: "linear", left: "10px", top: "15px" }, - { offset: 0.25, computedOffset: 0.25, easing: "linear", left: "20px", top: "25px" }, - { offset: 0.50, computedOffset: 0.50, easing: "linear", left: "30px" }, - { offset: 0.75, computedOffset: 0.75, easing: "linear", left: "40px", top: "45px" }, - { offset: 1.00, computedOffset: 1.00, easing: "linear", left: "50px", top: "55px" }] }, - { desc: "a one property two value PropertyIndexedKeyframes specification that needs to stringify its values", + output: [{ offset: null, computedOffset: 0.00, easing: "linear", + left: "10px", top: "15px" }, + { offset: null, computedOffset: 0.25, easing: "linear", + left: "20px", top: "25px" }, + { offset: null, computedOffset: 0.50, easing: "linear", + left: "30px", top: "invalid" }, + { offset: null, computedOffset: 0.75, easing: "linear", + left: "40px", top: "45px" }, + { offset: null, computedOffset: 1.00, easing: "linear", + left: "50px", top: "55px" }] }, + { desc: "a one property two value property-indexed keyframes specification" + + " that needs to stringify its values", input: { opacity: [0, 1] }, - output: [{ offset: 0, computedOffset: 0, easing: "linear", opacity: "0" }, - { offset: 1, computedOffset: 1, easing: "linear", opacity: "1" }] }, - { desc: "a one property one value PropertyIndexedKeyframes specification", + output: [{ offset: null, computedOffset: 0, easing: "linear", + opacity: "0" }, + { offset: null, computedOffset: 1, easing: "linear", + opacity: "1" }] }, + { desc: "a one property one value property-indexed keyframes specification", input: { left: ["10px"] }, - output: [{ offset: 0, computedOffset: 0, easing: "linear" }, - { offset: 1, computedOffset: 1, easing: "linear", left: "10px" }] }, - { desc: "a one property one non-array value PropertyIndexedKeyframes specification", + output: [{ offset: null, computedOffset: 1, easing: "linear", + left: "10px" }] }, + { desc: "a one property one non-array value property-indexed keyframes" + + " specification", input: { left: "10px" }, - output: [{ offset: 0, computedOffset: 0, easing: "linear" }, - { offset: 1, computedOffset: 1, easing: "linear", left: "10px" }] }, - { desc: "a one property two value PropertyIndexedKeyframes specification where the first value is invalid", + output: [{ offset: null, computedOffset: 1, easing: "linear", + left: "10px" }] }, + { desc: "a one property two value property-indexed keyframes specification" + + " where the first value is invalid", input: { left: ["invalid", "10px"] }, - output: [{ offset: 0, computedOffset: 0, easing: "linear" }, - { offset: 1, computedOffset: 1, easing: "linear", left: "10px" }] }, - { desc: "a one property two value PropertyIndexedKeyframes specification where the second value is invalid", + output: [{ offset: null, computedOffset: 0, easing: "linear", + left: "invalid" }, + { offset: null, computedOffset: 1, easing: "linear", + left: "10px" }] }, + { desc: "a one property two value property-indexed keyframes specification" + + " where the second value is invalid", input: { left: ["10px", "invalid"] }, - output: [{ offset: 0, computedOffset: 0, easing: "linear", left: "10px" }, - { offset: 1, computedOffset: 1, easing: "linear" }] }, - { desc: "a two property PropertyIndexedKeyframes specification where one property is missing from the first Keyframe", + output: [{ offset: null, computedOffset: 0, easing: "linear", + left: "10px" }, + { offset: null, computedOffset: 1, easing: "linear", + left: "invalid" }] }, + { desc: "a two property property-indexed keyframes specification where one" + + " property is missing from the first keyframe", input: [{ offset: 0, left: "10px" }, { offset: 1, left: "20px", top: "30px" }], output: [{ offset: 0, computedOffset: 0, easing: "linear", left: "10px" }, - { offset: 1, computedOffset: 1, easing: "linear", left: "20px", top: "30px" }] }, - { desc: "a two property PropertyIndexedKeyframes specification where one property is missing from the last Keyframe", + { offset: 1, computedOffset: 1, easing: "linear", + left: "20px", top: "30px" }] }, + { desc: "a two property property-indexed keyframes specification where one" + + " property is missing from the last keyframe", input: [{ offset: 0, left: "10px", top: "20px" }, { offset: 1, left: "30px" }], - output: [{ offset: 0, computedOffset: 0, easing: "linear", left: "10px" , top: "20px" }, - { offset: 1, computedOffset: 1, easing: "linear", left: "30px" }] }, - { desc: "a PropertyIndexedKeyframes specification with repeated values at offset 0 with different easings", + output: [{ offset: 0, computedOffset: 0, easing: "linear", + left: "10px" , top: "20px" }, + { offset: 1, computedOffset: 1, easing: "linear", + left: "30px" }] }, + { desc: "a property-indexed keyframes specification with repeated values" + + " at offset 0 with different easings", input: [{ offset: 0.0, left: "100px", easing: "ease" }, { offset: 0.0, left: "200px", easing: "ease" }, { offset: 0.5, left: "300px", easing: "linear" }, { offset: 1.0, left: "400px", easing: "ease-out" }, { offset: 1.0, left: "500px", easing: "step-end" }], - output: [{ offset: 0.0, computedOffset: 0.0, easing: "ease", left: "100px" }, - { offset: 0.0, computedOffset: 0.0, easing: "ease", left: "200px" }, - { offset: 0.5, computedOffset: 0.5, easing: "linear", left: "300px" }, - { offset: 1.0, computedOffset: 1.0, easing: "ease-out", left: "400px" }, - { offset: 1.0, computedOffset: 1.0, easing: "linear", left: "500px" }] }, + output: [{ offset: 0.0, computedOffset: 0.0, easing: "ease", + left: "100px" }, + { offset: 0.0, computedOffset: 0.0, easing: "ease", + left: "200px" }, + { offset: 0.5, computedOffset: 0.5, easing: "linear", + left: "300px" }, + { offset: 1.0, computedOffset: 1.0, easing: "ease-out", + left: "400px" }, + { offset: 1.0, computedOffset: 1.0, easing: "step-end", + left: "500px" }] }, ]; gPropertyIndexedKeyframesTests.forEach(function(subtest) { @@ -282,41 +311,56 @@ test(function(t) { }); new KeyframeEffectReadOnly(target, [kf1, kf2]); assert_array_equals(actualOrder, expectedOrder, "property access order"); -}, "the KeyframeEffectReadOnly constructor reads Keyframe properties in the " + +}, "the KeyframeEffectReadOnly constructor reads keyframe properties in the " + "expected order"); var gKeyframeSequenceTests = [ - { desc: "a one property two Keyframe sequence", + { desc: "a one property two keyframe sequence", input: [{ offset: 0, left: "10px" }, { offset: 1, left: "20px" }], output: [{ offset: 0, computedOffset: 0, easing: "linear", left: "10px" }, - { offset: 1, computedOffset: 1, easing: "linear", left: "20px" }] }, - { desc: "a two property two Keyframe sequence", + { offset: 1, computedOffset: 1, easing: "linear", left: "20px" }] + }, + { desc: "a two property two keyframe sequence", input: [{ offset: 0, left: "10px", top: "30px" }, { offset: 1, left: "20px", top: "40px" }], - output: [{ offset: 0, computedOffset: 0, easing: "linear", left: "10px", top: "30px" }, - { offset: 1, computedOffset: 1, easing: "linear", left: "20px", top: "40px" }] }, - { desc: "a one shorthand property two Keyframe sequence", + output: [{ offset: 0, computedOffset: 0, easing: "linear", + left: "10px", top: "30px" }, + { offset: 1, computedOffset: 1, easing: "linear", + left: "20px", top: "40px" }] }, + { desc: "a one shorthand property two keyframe sequence", input: [{ offset: 0, margin: "10px" }, { offset: 1, margin: "20px 30px 40px 50px" }], - output: [{ offset: 0, computedOffset: 0, easing: "linear", marginTop: "10px", marginRight: "10px", marginBottom: "10px", marginLeft: "10px" }, - { offset: 1, computedOffset: 1, easing: "linear", marginTop: "20px", marginRight: "30px", marginBottom: "40px", marginLeft: "50px" }] }, - { desc: "a two property (a shorthand and one of its component longhands) two Keyframe sequence", + output: [{ offset: 0, computedOffset: 0, easing: "linear", + margin: "10px" }, + { offset: 1, computedOffset: 1, easing: "linear", + margin: "20px 30px 40px 50px" }] }, + { desc: "a two property (a shorthand and one of its component longhands)" + + " two keyframe sequence", input: [{ offset: 0, margin: "10px", marginTop: "20px" }, { offset: 1, marginTop: "70px", margin: "30px 40px 50px 60px" }], - output: [{ offset: 0, computedOffset: 0, easing: "linear", marginTop: "20px", marginRight: "10px", marginBottom: "10px", marginLeft: "10px" }, - { offset: 1, computedOffset: 1, easing: "linear", marginTop: "70px", marginRight: "40px", marginBottom: "50px", marginLeft: "60px" }] }, - { desc: "a Keyframe sequence with duplicate values for a given interior offset", + output: [{ offset: 0, computedOffset: 0, easing: "linear", + margin: "10px", marginTop: "20px" }, + { offset: 1, computedOffset: 1, easing: "linear", + marginTop: "70px", margin: "30px 40px 50px 60px" }] }, + { desc: "a keyframe sequence with duplicate values for a given interior" + + " offset", input: [{ offset: 0.0, left: "10px" }, { offset: 0.5, left: "20px" }, { offset: 0.5, left: "30px" }, { offset: 0.5, left: "40px" }, { offset: 1.0, left: "50px" }], - output: [{ offset: 0.0, computedOffset: 0.0, easing: "linear", left: "10px" }, - { offset: 0.5, computedOffset: 0.5, easing: "linear", left: "20px" }, - { offset: 0.5, computedOffset: 0.5, easing: "linear", left: "40px" }, - { offset: 1.0, computedOffset: 1.0, easing: "linear", left: "50px" }] }, - { desc: "a Keyframe sequence with duplicate values for offsets 0 and 1", + output: [{ offset: 0.0, computedOffset: 0.0, easing: "linear", + left: "10px" }, + { offset: 0.5, computedOffset: 0.5, easing: "linear", + left: "20px" }, + { offset: 0.5, computedOffset: 0.5, easing: "linear", + left: "30px" }, + { offset: 0.5, computedOffset: 0.5, easing: "linear", + left: "40px" }, + { offset: 1.0, computedOffset: 1.0, easing: "linear", + left: "50px" }] }, + { desc: "a keyframe sequence with duplicate values for offsets 0 and 1", input: [{ offset: 0, left: "10px" }, { offset: 0, left: "20px" }, { offset: 0, left: "30px" }, @@ -324,50 +368,72 @@ var gKeyframeSequenceTests = [ { offset: 1, left: "50px" }, { offset: 1, left: "60px" }], output: [{ offset: 0, computedOffset: 0, easing: "linear", left: "10px" }, + { offset: 0, computedOffset: 0, easing: "linear", left: "20px" }, { offset: 0, computedOffset: 0, easing: "linear", left: "30px" }, { offset: 1, computedOffset: 1, easing: "linear", left: "40px" }, - { offset: 1, computedOffset: 1, easing: "linear", left: "60px" }] }, - { desc: "a two property four Keyframe sequence", + { offset: 1, computedOffset: 1, easing: "linear", left: "50px" }, + { offset: 1, computedOffset: 1, easing: "linear", left: "60px" }] + }, + { desc: "a two property four keyframe sequence", input: [{ offset: 0, left: "10px" }, { offset: 0, top: "20px" }, { offset: 1, top: "30px" }, { offset: 1, left: "40px" }], - output: [{ offset: 0, computedOffset: 0, easing: "linear", left: "10px", top: "20px" }, - { offset: 1, computedOffset: 1, easing: "linear", left: "40px", top: "30px" }] }, - { desc: "a one property Keyframe sequence with some omitted offsets", + output: [{ offset: 0, computedOffset: 0, easing: "linear", left: "10px" }, + { offset: 0, computedOffset: 0, easing: "linear", top: "20px" }, + { offset: 1, computedOffset: 1, easing: "linear", top: "30px" }, + { offset: 1, computedOffset: 1, easing: "linear", left: "40px" }] + }, + { desc: "a one property keyframe sequence with some omitted offsets", input: [{ offset: 0.00, left: "10px" }, { offset: 0.25, left: "20px" }, { left: "30px" }, { left: "40px" }, { offset: 1.00, left: "50px" }], - output: [{ offset: 0.00, computedOffset: 0.00, easing: "linear", left: "10px" }, - { offset: 0.25, computedOffset: 0.25, easing: "linear", left: "20px" }, - { offset: 0.50, computedOffset: 0.50, easing: "linear", left: "30px" }, - { offset: 0.75, computedOffset: 0.75, easing: "linear", left: "40px" }, - { offset: 1.00, computedOffset: 1.00, easing: "linear", left: "50px" }] }, - { desc: "a two property Keyframe sequence with some omitted offsets", + output: [{ offset: 0.00, computedOffset: 0.00, easing: "linear", + left: "10px" }, + { offset: 0.25, computedOffset: 0.25, easing: "linear", + left: "20px" }, + { offset: null, computedOffset: 0.50, easing: "linear", + left: "30px" }, + { offset: null, computedOffset: 0.75, easing: "linear", + left: "40px" }, + { offset: 1.00, computedOffset: 1.00, easing: "linear", + left: "50px" }] }, + { desc: "a two property keyframe sequence with some omitted offsets", input: [{ offset: 0.00, left: "10px", top: "20px" }, { offset: 0.25, left: "30px" }, { left: "40px" }, { left: "50px", top: "60px" }, { offset: 1.00, left: "70px", top: "80px" }], - output: [{ offset: 0.00, computedOffset: 0.00, easing: "linear", left: "10px", top: "20px" }, - { offset: 0.25, computedOffset: 0.25, easing: "linear", left: "30px" }, - { offset: 0.50, computedOffset: 0.50, easing: "linear", left: "40px" }, - { offset: 0.75, computedOffset: 0.75, easing: "linear", left: "50px", top: "60px" }, - { offset: 1.00, computedOffset: 1.00, easing: "linear", left: "70px", top: "80px" }] }, - { desc: "a one property Keyframe sequence with all omitted offsets", + output: [{ offset: 0.00, computedOffset: 0.00, easing: "linear", + left: "10px", top: "20px" }, + { offset: 0.25, computedOffset: 0.25, easing: "linear", + left: "30px" }, + { offset: null, computedOffset: 0.50, easing: "linear", + left: "40px" }, + { offset: null, computedOffset: 0.75, easing: "linear", + left: "50px", top: "60px" }, + { offset: 1.00, computedOffset: 1.00, easing: "linear", + left: "70px", top: "80px" }] }, + { desc: "a one property keyframe sequence with all omitted offsets", input: [{ left: "10px" }, { left: "20px" }, { left: "30px" }, { left: "40px" }, { left: "50px" }], - output: [{ offset: 0.00, computedOffset: 0.00, easing: "linear", left: "10px" }, - { offset: 0.25, computedOffset: 0.25, easing: "linear", left: "20px" }, - { offset: 0.50, computedOffset: 0.50, easing: "linear", left: "30px" }, - { offset: 0.75, computedOffset: 0.75, easing: "linear", left: "40px" }, - { offset: 1.00, computedOffset: 1.00, easing: "linear", left: "50px" }] }, - { desc: "a Keyframe sequence with different easing values, but the same easing value for a given offset", + output: [{ offset: null, computedOffset: 0.00, easing: "linear", + left: "10px" }, + { offset: null, computedOffset: 0.25, easing: "linear", + left: "20px" }, + { offset: null, computedOffset: 0.50, easing: "linear", + left: "30px" }, + { offset: null, computedOffset: 0.75, easing: "linear", + left: "40px" }, + { offset: null, computedOffset: 1.00, easing: "linear", + left: "50px" }] }, + { desc: "a keyframe sequence with different easing values, but the same" + + " easing value for a given offset", input: [{ offset: 0.0, easing: "ease", left: "10px"}, { offset: 0.0, easing: "ease", top: "20px"}, { offset: 0.5, easing: "linear", left: "30px" }, @@ -375,62 +441,79 @@ var gKeyframeSequenceTests = [ { offset: 1.0, easing: "step-end", left: "50px" }, { offset: 1.0, easing: "step-end", top: "60px" }], output: [{ offset: 0.0, computedOffset: 0.0, easing: "ease", - left: "10px", top: "20px" }, + left: "10px" }, + { offset: 0.0, computedOffset: 0.0, easing: "ease", + top: "20px" }, { offset: 0.5, computedOffset: 0.5, easing: "linear", - left: "30px", top: "40px" }, - { offset: 1.0, computedOffset: 1.0, easing: "linear", - left: "50px", top: "60px" }] }, - { desc: "a Keyframe sequence with different composite values, but the same composite value for a given offset", + left: "30px" }, + { offset: 0.5, computedOffset: 0.5, easing: "linear", + top: "40px" }, + { offset: 1.0, computedOffset: 1.0, easing: "step-end", + left: "50px" }, + { offset: 1.0, computedOffset: 1.0, easing: "step-end", + top: "60px" }] }, + { desc: "a keyframe sequence with different composite values, but the" + + " same composite value for a given offset", input: [{ offset: 0.0, composite: "replace", left: "10px" }, { offset: 0.0, composite: "replace", top: "20px" }, { offset: 0.5, composite: "add", left: "30px" }, { offset: 0.5, composite: "add", top: "40px" }, { offset: 1.0, composite: "replace", left: "50px" }, { offset: 1.0, composite: "replace", top: "60px" }], - output: [{ offset: 0.0, computedOffset: 0.0, easing: "linear", composite: "replace", left: "10px", top: "20px" }, - { offset: 0.5, computedOffset: 0.5, easing: "linear", composite: "add", left: "30px", top: "40px" }, - { offset: 1.0, computedOffset: 1.0, easing: "linear", composite: "replace", left: "50px", top: "60px" }] }, - { desc: "a one property two Keyframe sequence that needs to stringify its values", + output: [{ offset: 0.0, computedOffset: 0.0, easing: "linear", + composite: "replace", left: "10px" }, + { offset: 0.0, computedOffset: 0.0, easing: "linear", + composite: "replace", top: "20px" }, + { offset: 0.5, computedOffset: 0.0, easing: "linear", + composite: "add", left: "30px" }, + { offset: 0.5, computedOffset: 0.0, easing: "linear", + composite: "add", top: "40px" }, + { offset: 1.0, computedOffset: 1.0, easing: "linear", + composite: "replace", left: "50px" }, + { offset: 1.0, computedOffset: 1.0, easing: "linear", + composite: "replace", top: "60px" }] }, + { desc: "a one property two keyframe sequence that needs to stringify" + + " its values", input: [{ offset: 0, opacity: 0 }, { offset: 1, opacity: 1 }], output: [{ offset: 0, computedOffset: 0, easing: "linear", opacity: "0" }, - { offset: 1, computedOffset: 1, easing: "linear", opacity: "1" }] }, - { desc: "a Keyframe sequence where shorthand precedes longhand", + { offset: 1, computedOffset: 1, easing: "linear", opacity: "1" }] + }, + { desc: "a keyframe sequence where shorthand precedes longhand", input: [{ offset: 0, margin: "10px", marginRight: "20px" }, { offset: 1, margin: "30px" }], - output: [{ offset: 0, computedOffset: 0, easing: "linear", marginBottom: "10px", marginLeft: "10px", marginRight: "20px", marginTop: "10px" }, - { offset: 1, computedOffset: 1, easing: "linear", marginBottom: "30px", marginLeft: "30px", marginRight: "30px", marginTop: "30px" }] }, - { desc: "a Keyframe sequence where longhand precedes shorthand", + output: [{ offset: 0, computedOffset: 0, easing: "linear", + margin: "10px", marginRight: "20px" }, + { offset: 1, computedOffset: 1, easing: "linear", + margin: "30px" }] }, + { desc: "a keyframe sequence where longhand precedes shorthand", input: [{ offset: 0, marginRight: "20px", margin: "10px" }, { offset: 1, margin: "30px" }], - output: [{ offset: 0, computedOffset: 0, easing: "linear", marginBottom: "10px", marginLeft: "10px", marginRight: "20px", marginTop: "10px" }, - { offset: 1, computedOffset: 1, easing: "linear", marginBottom: "30px", marginLeft: "30px", marginRight: "30px", marginTop: "30px" }] }, - { desc: "a Keyframe sequence where lesser shorthand precedes greater shorthand", - input: [{ offset: 0, borderLeft: "1px solid rgb(1, 2, 3)", border: "2px dotted rgb(4, 5, 6)" }, + output: [{ offset: 0, computedOffset: 0, easing: "linear", + marginRight: "20px", margin: "10px" }, + { offset: 1, computedOffset: 1, easing: "linear", + margin: "30px" }] }, + { desc: "a keyframe sequence where lesser shorthand precedes greater" + + " shorthand", + input: [{ offset: 0, + borderLeft: "1px solid rgb(1, 2, 3)", + border: "2px dotted rgb(4, 5, 6)" }, { offset: 1, border: "3px dashed rgb(7, 8, 9)" }], output: [{ offset: 0, computedOffset: 0, easing: "linear", - borderBottomColor: "rgb(4, 5, 6)", borderBottomWidth: "2px", - borderLeftColor: "rgb(1, 2, 3)", borderLeftWidth: "1px", - borderRightColor: "rgb(4, 5, 6)", borderRightWidth: "2px", - borderTopColor: "rgb(4, 5, 6)", borderTopWidth: "2px" }, + borderLeft: "1px solid rgb(1, 2, 3)", + border: "2px dotted rgb(4, 5, 6)" }, { offset: 1, computedOffset: 1, easing: "linear", - borderBottomColor: "rgb(7, 8, 9)", borderBottomWidth: "3px", - borderLeftColor: "rgb(7, 8, 9)", borderLeftWidth: "3px", - borderRightColor: "rgb(7, 8, 9)", borderRightWidth: "3px", - borderTopColor: "rgb(7, 8, 9)", borderTopWidth: "3px" }] }, - { desc: "a Keyframe sequence where greater shorthand precedes lesser shorthand", - input: [{ offset: 0, border: "2px dotted rgb(4, 5, 6)", borderLeft: "1px solid rgb(1, 2, 3)" }, + border: "3px dashed rgb(7, 8, 9)" }] }, + { desc: "a keyframe sequence where greater shorthand precedes lesser" + + " shorthand", + input: [{ offset: 0, border: "2px dotted rgb(4, 5, 6)", + borderLeft: "1px solid rgb(1, 2, 3)" }, { offset: 1, border: "3px dashed rgb(7, 8, 9)" }], output: [{ offset: 0, computedOffset: 0, easing: "linear", - borderBottomColor: "rgb(4, 5, 6)", borderBottomWidth: "2px", - borderLeftColor: "rgb(1, 2, 3)", borderLeftWidth: "1px", - borderRightColor: "rgb(4, 5, 6)", borderRightWidth: "2px", - borderTopColor: "rgb(4, 5, 6)", borderTopWidth: "2px" }, + border: "2px dotted rgb(4, 5, 6)", + borderLeft: "1px solid rgb(1, 2, 3)" }, { offset: 1, computedOffset: 1, easing: "linear", - borderBottomColor: "rgb(7, 8, 9)", borderBottomWidth: "3px", - borderLeftColor: "rgb(7, 8, 9)", borderLeftWidth: "3px", - borderRightColor: "rgb(7, 8, 9)", borderRightWidth: "3px", - borderTopColor: "rgb(7, 8, 9)", borderTopWidth: "3px" }] }, + border: "3px dashed rgb(7, 8, 9)" }] }, ]; gKeyframeSequenceTests.forEach(function(subtest) { @@ -467,7 +550,7 @@ gInvalidEasingInKeyframeSequenceTests.forEach(function(subtest) { assert_throws(new TypeError, function() { new KeyframeEffectReadOnly(target, subtest.input); }); - }, "Invalid easing [" + subtest.desc + "] in KeyframeSequence " + + }, "Invalid easing [" + subtest.desc + "] in keyframe sequence " + "should be thrown"); }); diff --git a/tests/wpt/web-platform-tests/web-animations/keyframe-effect/effect-easing.html b/tests/wpt/web-platform-tests/web-animations/keyframe-effect/effect-easing.html index 2ecd028ce9b..81e834e2e50 100644 --- a/tests/wpt/web-platform-tests/web-animations/keyframe-effect/effect-easing.html +++ b/tests/wpt/web-platform-tests/web-animations/keyframe-effect/effect-easing.html @@ -6,6 +6,7 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="../testcommon.js"></script> +<script src="../resources/effect-easing-tests.js"></script> <body> <div id="log"></div> <div id="target"></div> @@ -22,54 +23,6 @@ function assert_style_left_at(animation, time, easingFunction) { easingFunction(portion) * 100 + ' at ' + time + 'ms'); } -var gEffectEasingTests = [ - { - desc: 'steps(start) function', - easing: 'steps(2, start)', - easingFunction: stepStart(2) - }, - { - desc: 'steps(end) function', - easing: 'steps(2, end)', - easingFunction: stepEnd(2) - }, - { - desc: 'linear function', - easing: 'linear', // cubic-bezier(0, 0, 1.0, 1.0) - easingFunction: cubicBezier(0, 0, 1.0, 1.0) - }, - { - desc: 'ease function', - easing: 'ease', // cubic-bezier(0.25, 0.1, 0.25, 1.0) - easingFunction: cubicBezier(0.25, 0.1, 0.25, 1.0) - }, - { - desc: 'ease-in function', - easing: 'ease-in', // cubic-bezier(0.42, 0, 1.0, 1.0) - easingFunction: cubicBezier(0.42, 0, 1.0, 1.0) - }, - { - desc: 'ease-in-out function', - easing: 'ease-in-out', // cubic-bezier(0.42, 0, 0.58, 1.0) - easingFunction: cubicBezier(0.42, 0, 0.58, 1.0) - }, - { - desc: 'ease-out function', - easing: 'ease-out', // cubic-bezier(0, 0, 0.58, 1.0) - easingFunction: cubicBezier(0, 0, 0.58, 1.0) - }, - { - desc: 'easing function which produces values greater than 1', - easing: 'cubic-bezier(0, 1.5, 1, 1.5)', - easingFunction: cubicBezier(0, 1.5, 1, 1.5) - }, - { - desc: 'easing function which produces negative values', - easing: 'cubic-bezier(0, -0.5 ,1, -0.5)', - easingFunction: cubicBezier(0, -0.5, 1, -0.5) - }, -]; - gEffectEasingTests.forEach(function(options) { test(function(t) { var target = createDiv(t); @@ -694,7 +647,7 @@ var gStepTimingFunctionTests = [ { currentTime: 2500, progress: 0.5 }, ] } -] +]; gStepTimingFunctionTests.forEach(function(options) { test(function(t) { diff --git a/tests/wpt/web-platform-tests/web-animations/keyframe-effect/keyframe-handling.html b/tests/wpt/web-platform-tests/web-animations/keyframe-effect/keyframe-handling.html index 56f484aff7f..de9b7c7ec21 100644 --- a/tests/wpt/web-platform-tests/web-animations/keyframe-effect/keyframe-handling.html +++ b/tests/wpt/web-platform-tests/web-animations/keyframe-effect/keyframe-handling.html @@ -70,6 +70,46 @@ test(function(t) { }, 'Overlapping keyframes between 0 and 1 use the appropriate value on each' + ' side of the overlap point'); +test(function(t) { + var div = createDiv(t); + var anim = div.animate({ visibility: ['hidden','visible'] }, + { duration: 100 * MS_PER_SEC, fill: 'both' }); + + anim.currentTime = 0; + assert_equals(getComputedStyle(div).visibility, 'hidden', + 'Visibility when progress = 0.'); + + anim.currentTime = 10 * MS_PER_SEC + 1; + assert_equals(getComputedStyle(div).visibility, 'visible', + 'Visibility when progress > 0 due to linear easing.'); + + anim.finish(); + assert_equals(getComputedStyle(div).visibility, 'visible', + 'Visibility when progress = 1.'); + +}, "Test visibility clamping behavior."); + +test(function(t) { + var div = createDiv(t); + var anim = div.animate({ visibility: ['hidden', 'visible'] }, + { duration: 100 * MS_PER_SEC, fill: 'both', + easing: 'cubic-bezier(0.25, -0.6, 0, 0.5)' }); + + anim.currentTime = 0; + assert_equals(getComputedStyle(div).visibility, 'hidden', + 'Visibility when progress = 0.'); + + // Timing function is below zero. So we expected visibility is hidden. + anim.currentTime = 10 * MS_PER_SEC + 1; + assert_equals(getComputedStyle(div).visibility, 'hidden', + 'Visibility when progress < 0 due to cubic-bezier easing.'); + + anim.currentTime = 60 * MS_PER_SEC; + assert_equals(getComputedStyle(div).visibility, 'visible', + 'Visibility when progress > 0 due to cubic-bezier easing.'); + +}, "Test visibility clamping behavior with an easing that has a negative component"); + done(); </script> </body> diff --git a/tests/wpt/web-platform-tests/web-animations/resources/effect-easing-tests.js b/tests/wpt/web-platform-tests/web-animations/resources/effect-easing-tests.js new file mode 100644 index 00000000000..edce67ede44 --- /dev/null +++ b/tests/wpt/web-platform-tests/web-animations/resources/effect-easing-tests.js @@ -0,0 +1,42 @@ +var gEffectEasingTests = [ + { + desc: 'steps(start) function', + easing: 'steps(2, start)', + easingFunction: stepStart(2) + }, + { + desc: 'steps(end) function', + easing: 'steps(2, end)', + easingFunction: stepEnd(2) + }, + { + desc: 'linear function', + easing: 'linear', // cubic-bezier(0, 0, 1.0, 1.0) + easingFunction: cubicBezier(0, 0, 1.0, 1.0) + }, + { + desc: 'ease function', + easing: 'ease', // cubic-bezier(0.25, 0.1, 0.25, 1.0) + easingFunction: cubicBezier(0.25, 0.1, 0.25, 1.0) + }, + { + desc: 'ease-in function', + easing: 'ease-in', // cubic-bezier(0.42, 0, 1.0, 1.0) + easingFunction: cubicBezier(0.42, 0, 1.0, 1.0) + }, + { + desc: 'ease-in-out function', + easing: 'ease-in-out', // cubic-bezier(0.42, 0, 0.58, 1.0) + easingFunction: cubicBezier(0.42, 0, 0.58, 1.0) + }, + { + desc: 'ease-out function', + easing: 'ease-out', // cubic-bezier(0, 0, 0.58, 1.0) + easingFunction: cubicBezier(0, 0, 0.58, 1.0) + }, + { + desc: 'easing function which produces values greater than 1', + easing: 'cubic-bezier(0, 1.5, 1, 1.5)', + easingFunction: cubicBezier(0, 1.5, 1, 1.5) + } +]; diff --git a/tests/wpt/web-platform-tests/websockets/constructor/018.html b/tests/wpt/web-platform-tests/websockets/constructor/018.html index 71359d0d093..4df953bf0be 100644 --- a/tests/wpt/web-platform-tests/websockets/constructor/018.html +++ b/tests/wpt/web-platform-tests/websockets/constructor/018.html @@ -6,9 +6,9 @@ <div id=log></div> <script> async_test(function(t) { - var ws = new WebSocket(SCHEME_DOMAIN_PORT+'/echo-query?x\u0000'); + var ws = new WebSocket(SCHEME_DOMAIN_PORT+'/echo-query?x\u0000y\u0000'); ws.onmessage = t.step_func(function(e) { - assert_equals(e.data, 'x%00'); + assert_equals(e.data, 'x%00y'); ws.close(); t.done(); }) diff --git a/tests/wpt/web-platform-tests/workers/Worker_dispatchEvent_ErrorEvent.htm b/tests/wpt/web-platform-tests/workers/Worker_dispatchEvent_ErrorEvent.htm index 58a31f04252..aea7e025c16 100644 --- a/tests/wpt/web-platform-tests/workers/Worker_dispatchEvent_ErrorEvent.htm +++ b/tests/wpt/web-platform-tests/workers/Worker_dispatchEvent_ErrorEvent.htm @@ -25,9 +25,9 @@ async_test(function(t) { }); test(function() { - assert_throws("NotSupportedError", function() { - document.createEvent("ErrorEvent"); - }, "should not be supported"); + var e = document.createEvent("ErrorEvent"); + var eProto = Object.getPrototypeOf(e); + assert_equals(eProto, ErrorEvent.prototype); }, "document.createEvent('ErrorEvent')"); test(function() { diff --git a/tests/wpt/web-platform-tests/workers/constructors/Worker/sample_worker/worker.js b/tests/wpt/web-platform-tests/workers/constructors/Worker/sample_worker/worker.js new file mode 100644 index 00000000000..19bbea58e76 --- /dev/null +++ b/tests/wpt/web-platform-tests/workers/constructors/Worker/sample_worker/worker.js @@ -0,0 +1 @@ +onmessage = function(event) { postMessage(event.data); } diff --git a/tests/wpt/web-platform-tests/workers/constructors/Worker/use-base-url.html b/tests/wpt/web-platform-tests/workers/constructors/Worker/use-base-url.html new file mode 100644 index 00000000000..94ce2a71f14 --- /dev/null +++ b/tests/wpt/web-platform-tests/workers/constructors/Worker/use-base-url.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset="utf-8"> +<title>Use the document base url when resolving worker URLs</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<base href="/workers/constructors/Worker/sample_worker/"> +<script> + async_test(function(t) { + var worker = new Worker('worker.js'); + var data = "foo"; + worker.postMessage(data); + worker.onmessage = t.step_func_done(function(event) { + assert_equals(event.data, data, "event.data does not match expected data"); + }); + worker.onerror = t.unreached_func("received error event"); + }, "Use the document base url when resolving worker URLs"); +</script> |