diff options
572 files changed, 10301 insertions, 1707 deletions
diff --git a/Cargo.lock b/Cargo.lock index 915f2330c33..e0fc94965d0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4451,16 +4451,13 @@ dependencies = [ [[package]] name = "markup5ever" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ba2225413ed418d540a2c8247d794f4b0527a021da36f69c05344d716dc44c1" +checksum = "d0a8096766c229e8c88a3900c9b44b7e06aa7f7343cc229158c3e58ef8f9973a" dependencies = [ "log", - "phf", - "phf_codegen", - "string_cache", - "string_cache_codegen", "tendril", + "web_atoms", ] [[package]] @@ -8405,6 +8402,18 @@ dependencies = [ ] [[package]] +name = "web_atoms" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "954c5a41f2bcb7314344079d0891505458cc2f4b422bdea1d5bfbe6d1a04903b" +dependencies = [ + "phf", + "phf_codegen", + "string_cache", + "string_cache_codegen", +] + +[[package]] name = "webdriver" version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" diff --git a/Cargo.toml b/Cargo.toml index c556bc2f246..eb83cd3dfa2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -92,7 +92,7 @@ log = "0.4" mach2 = "0.4" malloc_size_of = { package = "servo_malloc_size_of", path = "components/malloc_size_of" } malloc_size_of_derive = "0.1" -markup5ever = "0.16" +markup5ever = "0.16.1" memmap2 = "0.9.5" mime = "0.3.13" mime_guess = "2.0.5" diff --git a/components/layout/dom.rs b/components/layout/dom.rs index 39cd74293c8..6db4dbccd41 100644 --- a/components/layout/dom.rs +++ b/components/layout/dom.rs @@ -7,7 +7,7 @@ use std::sync::Arc; use atomic_refcell::{AtomicRef, AtomicRefCell, AtomicRefMut}; use base::id::{BrowsingContextId, PipelineId}; -use html5ever::{local_name, namespace_url, ns}; +use html5ever::{local_name, ns}; use pixels::Image; use script_layout_interface::wrapper_traits::{ LayoutDataTrait, LayoutNode, ThreadSafeLayoutElement, ThreadSafeLayoutNode, diff --git a/components/script/dom/attr.rs b/components/script/dom/attr.rs index 9b33213335e..52d0ca7e20c 100644 --- a/components/script/dom/attr.rs +++ b/components/script/dom/attr.rs @@ -8,7 +8,7 @@ use std::mem; use devtools_traits::AttrInfo; use dom_struct::dom_struct; -use html5ever::{LocalName, Namespace, Prefix, namespace_url, ns}; +use html5ever::{LocalName, Namespace, Prefix, ns}; use style::attr::{AttrIdentifier, AttrValue}; use style::values::GenericAtomIdent; use stylo_atoms::Atom; diff --git a/components/script/dom/bindings/constructor.rs b/components/script/dom/bindings/constructor.rs index 138dd4520d0..141fb8c1391 100644 --- a/components/script/dom/bindings/constructor.rs +++ b/components/script/dom/bindings/constructor.rs @@ -5,7 +5,7 @@ use std::ptr; use html5ever::interface::QualName; -use html5ever::{LocalName, local_name, namespace_url, ns}; +use html5ever::{LocalName, local_name, ns}; use js::conversions::ToJSValConvertible; use js::glue::{UnwrapObjectDynamic, UnwrapObjectStatic}; use js::jsapi::{CallArgs, CurrentGlobalOrNull, JSAutoRealm, JSObject}; diff --git a/components/script/dom/bindings/xmlname.rs b/components/script/dom/bindings/xmlname.rs index 31436278c12..af02569d9c4 100644 --- a/components/script/dom/bindings/xmlname.rs +++ b/components/script/dom/bindings/xmlname.rs @@ -4,7 +4,7 @@ //! Functions for validating and extracting qualified XML names. -use html5ever::{LocalName, Namespace, Prefix, namespace_url, ns}; +use html5ever::{LocalName, Namespace, Prefix, ns}; use crate::dom::bindings::error::{Error, Fallible}; use crate::dom::bindings::str::DOMString; diff --git a/components/script/dom/create.rs b/components/script/dom/create.rs index c2e038eb66b..5722dc4f6ac 100644 --- a/components/script/dom/create.rs +++ b/components/script/dom/create.rs @@ -2,7 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -use html5ever::{LocalName, Prefix, QualName, local_name, namespace_url, ns}; +use html5ever::{LocalName, Prefix, QualName, local_name, ns}; use js::rust::HandleObject; use servo_config::pref; diff --git a/components/script/dom/customelementregistry.rs b/components/script/dom/customelementregistry.rs index 049e3c482a1..be672585529 100644 --- a/components/script/dom/customelementregistry.rs +++ b/components/script/dom/customelementregistry.rs @@ -9,7 +9,7 @@ use std::rc::Rc; use std::{mem, ptr}; use dom_struct::dom_struct; -use html5ever::{LocalName, Namespace, Prefix, namespace_url, ns}; +use html5ever::{LocalName, Namespace, Prefix, ns}; use js::conversions::ToJSValConvertible; use js::glue::UnwrapObjectStatic; use js::jsapi::{HandleValueArray, Heap, IsCallable, IsConstructor, JSAutoRealm, JSObject}; diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index 0d39a12c15e..852a12fc7c5 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -37,7 +37,7 @@ use embedder_traits::{ }; use encoding_rs::{Encoding, UTF_8}; use euclid::default::{Point2D, Rect, Size2D}; -use html5ever::{LocalName, Namespace, QualName, local_name, namespace_url, ns}; +use html5ever::{LocalName, Namespace, QualName, local_name, ns}; use hyper_serde::Serde; use ipc_channel::ipc; use js::rust::{HandleObject, HandleValue}; diff --git a/components/script/dom/domimplementation.rs b/components/script/dom/domimplementation.rs index 521febc17fc..a6c95fad820 100644 --- a/components/script/dom/domimplementation.rs +++ b/components/script/dom/domimplementation.rs @@ -3,7 +3,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ use dom_struct::dom_struct; -use html5ever::{local_name, namespace_url, ns}; +use html5ever::{local_name, ns}; use script_traits::DocumentActivity; use crate::document_loader::DocumentLoader; diff --git a/components/script/dom/domtokenlist.rs b/components/script/dom/domtokenlist.rs index 8d479aba80d..83c3d09be23 100644 --- a/components/script/dom/domtokenlist.rs +++ b/components/script/dom/domtokenlist.rs @@ -3,7 +3,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ use dom_struct::dom_struct; -use html5ever::{LocalName, namespace_url, ns}; +use html5ever::{LocalName, ns}; use style::str::HTML_SPACE_CHARACTERS; use stylo_atoms::Atom; diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index 4aebe893bef..cf2c998e298 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -19,9 +19,7 @@ use embedder_traits::InputMethodType; use euclid::default::{Rect, Size2D}; use html5ever::serialize::TraversalScope; use html5ever::serialize::TraversalScope::{ChildrenOnly, IncludeNode}; -use html5ever::{ - LocalName, Namespace, Prefix, QualName, local_name, namespace_prefix, namespace_url, ns, -}; +use html5ever::{LocalName, Namespace, Prefix, QualName, local_name, namespace_prefix, ns}; use js::jsapi::Heap; use js::jsval::JSVal; use js::rust::HandleObject; diff --git a/components/script/dom/htmlaudioelement.rs b/components/script/dom/htmlaudioelement.rs index dbf0a88eb2a..938c2e7ccd6 100644 --- a/components/script/dom/htmlaudioelement.rs +++ b/components/script/dom/htmlaudioelement.rs @@ -3,7 +3,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ use dom_struct::dom_struct; -use html5ever::{LocalName, Prefix, QualName, local_name, namespace_url, ns}; +use html5ever::{LocalName, Prefix, QualName, local_name, ns}; use js::rust::HandleObject; use crate::dom::bindings::codegen::Bindings::ElementBinding::Element_Binding::ElementMethods; diff --git a/components/script/dom/htmlbaseelement.rs b/components/script/dom/htmlbaseelement.rs index 45a13f83772..9f263e1056c 100644 --- a/components/script/dom/htmlbaseelement.rs +++ b/components/script/dom/htmlbaseelement.rs @@ -3,7 +3,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ use dom_struct::dom_struct; -use html5ever::{LocalName, Prefix, local_name, namespace_url, ns}; +use html5ever::{LocalName, Prefix, local_name, ns}; use js::rust::HandleObject; use servo_url::ServoUrl; diff --git a/components/script/dom/htmlbodyelement.rs b/components/script/dom/htmlbodyelement.rs index 5cd877cdf82..b4efba9bed9 100644 --- a/components/script/dom/htmlbodyelement.rs +++ b/components/script/dom/htmlbodyelement.rs @@ -4,7 +4,7 @@ use dom_struct::dom_struct; use embedder_traits::{EmbedderMsg, LoadStatus}; -use html5ever::{LocalName, Prefix, local_name, namespace_url, ns}; +use html5ever::{LocalName, Prefix, local_name, ns}; use js::rust::HandleObject; use servo_url::ServoUrl; use style::attr::AttrValue; diff --git a/components/script/dom/htmlbuttonelement.rs b/components/script/dom/htmlbuttonelement.rs index 09d0ae6e73f..6f83360e187 100644 --- a/components/script/dom/htmlbuttonelement.rs +++ b/components/script/dom/htmlbuttonelement.rs @@ -6,7 +6,7 @@ use std::cell::Cell; use std::default::Default; use dom_struct::dom_struct; -use html5ever::{LocalName, Prefix, local_name, namespace_url}; +use html5ever::{LocalName, Prefix, local_name}; use js::rust::HandleObject; use stylo_dom::ElementState; diff --git a/components/script/dom/htmlcanvaselement.rs b/components/script/dom/htmlcanvaselement.rs index 77e8b412146..9e20539ceca 100644 --- a/components/script/dom/htmlcanvaselement.rs +++ b/components/script/dom/htmlcanvaselement.rs @@ -12,7 +12,7 @@ use constellation_traits::BlobImpl; use constellation_traits::ScriptToConstellationMessage; use dom_struct::dom_struct; use euclid::default::Size2D; -use html5ever::{LocalName, Prefix, local_name, namespace_url, ns}; +use html5ever::{LocalName, Prefix, local_name, ns}; use image::codecs::jpeg::JpegEncoder; use image::codecs::png::PngEncoder; use image::codecs::webp::WebPEncoder; diff --git a/components/script/dom/htmldialogelement.rs b/components/script/dom/htmldialogelement.rs index 3872932049d..fbd84e4efd3 100644 --- a/components/script/dom/htmldialogelement.rs +++ b/components/script/dom/htmldialogelement.rs @@ -3,7 +3,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ use dom_struct::dom_struct; -use html5ever::{LocalName, Prefix, local_name, namespace_url, ns}; +use html5ever::{LocalName, Prefix, local_name, ns}; use js::rust::HandleObject; use crate::dom::bindings::cell::DomRefCell; diff --git a/components/script/dom/htmlelement.rs b/components/script/dom/htmlelement.rs index 0cdfebf5342..9505d5182c7 100644 --- a/components/script/dom/htmlelement.rs +++ b/components/script/dom/htmlelement.rs @@ -7,7 +7,7 @@ use std::default::Default; use std::rc::Rc; use dom_struct::dom_struct; -use html5ever::{LocalName, Prefix, local_name, namespace_url, ns}; +use html5ever::{LocalName, Prefix, local_name, ns}; use js::rust::HandleObject; use script_layout_interface::QueryMsg; use style::attr::AttrValue; diff --git a/components/script/dom/htmlfontelement.rs b/components/script/dom/htmlfontelement.rs index ee7015fb66d..fb02a10a4e4 100644 --- a/components/script/dom/htmlfontelement.rs +++ b/components/script/dom/htmlfontelement.rs @@ -4,7 +4,7 @@ use cssparser::match_ignore_ascii_case; use dom_struct::dom_struct; -use html5ever::{LocalName, Prefix, local_name, namespace_url, ns}; +use html5ever::{LocalName, Prefix, local_name, ns}; use js::rust::HandleObject; use style::attr::AttrValue; use style::color::AbsoluteColor; diff --git a/components/script/dom/htmlformelement.rs b/components/script/dom/htmlformelement.rs index 1294e11043a..ce6dcca66f3 100644 --- a/components/script/dom/htmlformelement.rs +++ b/components/script/dom/htmlformelement.rs @@ -9,7 +9,7 @@ use constellation_traits::{LoadData, LoadOrigin, NavigationHistoryBehavior}; use dom_struct::dom_struct; use encoding_rs::{Encoding, UTF_8}; use headers::{ContentType, HeaderMapExt}; -use html5ever::{LocalName, Prefix, local_name, namespace_url, ns}; +use html5ever::{LocalName, Prefix, local_name, ns}; use http::Method; use js::rust::HandleObject; use mime::{self, Mime}; diff --git a/components/script/dom/htmlheadelement.rs b/components/script/dom/htmlheadelement.rs index b4845fc949c..7b2d715318f 100644 --- a/components/script/dom/htmlheadelement.rs +++ b/components/script/dom/htmlheadelement.rs @@ -4,7 +4,7 @@ use content_security_policy::{CspList, PolicyDisposition, PolicySource}; use dom_struct::dom_struct; -use html5ever::{LocalName, Prefix, local_name, namespace_url, ns}; +use html5ever::{LocalName, Prefix, local_name, ns}; use js::rust::HandleObject; use crate::dom::bindings::codegen::Bindings::DocumentBinding::DocumentMethods; diff --git a/components/script/dom/htmlhrelement.rs b/components/script/dom/htmlhrelement.rs index 5754b2f3dd3..c88a0fcf184 100644 --- a/components/script/dom/htmlhrelement.rs +++ b/components/script/dom/htmlhrelement.rs @@ -3,7 +3,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ use dom_struct::dom_struct; -use html5ever::{LocalName, Prefix, local_name, namespace_url, ns}; +use html5ever::{LocalName, Prefix, local_name, ns}; use js::rust::HandleObject; use style::attr::{AttrValue, LengthOrPercentageOrAuto}; use style::color::AbsoluteColor; diff --git a/components/script/dom/htmlhyperlinkelementutils.rs b/components/script/dom/htmlhyperlinkelementutils.rs index 52b16f796e5..699db4d62f4 100644 --- a/components/script/dom/htmlhyperlinkelementutils.rs +++ b/components/script/dom/htmlhyperlinkelementutils.rs @@ -2,7 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -use html5ever::{local_name, namespace_url, ns}; +use html5ever::{local_name, ns}; use servo_url::ServoUrl; use crate::dom::bindings::cell::DomRefCell; diff --git a/components/script/dom/htmliframeelement.rs b/components/script/dom/htmliframeelement.rs index 33457cb29d4..c5194c4527f 100644 --- a/components/script/dom/htmliframeelement.rs +++ b/components/script/dom/htmliframeelement.rs @@ -13,7 +13,7 @@ use constellation_traits::{ }; use dom_struct::dom_struct; use embedder_traits::ViewportDetails; -use html5ever::{LocalName, Prefix, local_name, namespace_url, ns}; +use html5ever::{LocalName, Prefix, local_name, ns}; use js::rust::HandleObject; use net_traits::ReferrerPolicy; use profile_traits::ipc as ProfiledIpc; diff --git a/components/script/dom/htmlimageelement.rs b/components/script/dom/htmlimageelement.rs index e6b4336fe54..adff445ae1c 100644 --- a/components/script/dom/htmlimageelement.rs +++ b/components/script/dom/htmlimageelement.rs @@ -14,7 +14,7 @@ use content_security_policy as csp; use cssparser::{Parser, ParserInput}; use dom_struct::dom_struct; use euclid::Point2D; -use html5ever::{LocalName, Prefix, QualName, local_name, namespace_url, ns}; +use html5ever::{LocalName, Prefix, QualName, local_name, ns}; use js::jsapi::JSAutoRealm; use js::rust::HandleObject; use mime::{self, Mime}; diff --git a/components/script/dom/htmlinputelement.rs b/components/script/dom/htmlinputelement.rs index 42165499032..1999c7193ff 100644 --- a/components/script/dom/htmlinputelement.rs +++ b/components/script/dom/htmlinputelement.rs @@ -14,7 +14,7 @@ use std::{f64, ptr}; use dom_struct::dom_struct; use embedder_traits::{FilterPattern, InputMethodType}; use encoding_rs::Encoding; -use html5ever::{LocalName, Prefix, local_name, namespace_url, ns}; +use html5ever::{LocalName, Prefix, local_name, ns}; use js::jsapi::{ ClippedTime, DateGetMsecSinceEpoch, Handle, JS_ClearPendingException, JSObject, NewDateObject, NewUCRegExpObject, ObjectIsDate, RegExpFlag_UnicodeSets, RegExpFlags, diff --git a/components/script/dom/htmllabelelement.rs b/components/script/dom/htmllabelelement.rs index efa386c7cdd..9733c3b7c6e 100644 --- a/components/script/dom/htmllabelelement.rs +++ b/components/script/dom/htmllabelelement.rs @@ -3,7 +3,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ use dom_struct::dom_struct; -use html5ever::{LocalName, Prefix, local_name, namespace_url, ns}; +use html5ever::{LocalName, Prefix, local_name, ns}; use js::rust::HandleObject; use style::attr::AttrValue; diff --git a/components/script/dom/htmllinkelement.rs b/components/script/dom/htmllinkelement.rs index 969551f98c8..db5c14af450 100644 --- a/components/script/dom/htmllinkelement.rs +++ b/components/script/dom/htmllinkelement.rs @@ -10,7 +10,7 @@ use base::id::WebViewId; use content_security_policy as csp; use dom_struct::dom_struct; use embedder_traits::EmbedderMsg; -use html5ever::{LocalName, Prefix, local_name, namespace_url, ns}; +use html5ever::{LocalName, Prefix, local_name, ns}; use js::rust::HandleObject; use net_traits::policy_container::PolicyContainer; use net_traits::request::{ diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs index 8ddef6d33cb..c07f866ab41 100644 --- a/components/script/dom/htmlmediaelement.rs +++ b/components/script/dom/htmlmediaelement.rs @@ -16,7 +16,7 @@ use embedder_traits::resources::{self, Resource as EmbedderResource}; use embedder_traits::{MediaPositionState, MediaSessionEvent, MediaSessionPlaybackState}; use euclid::default::Size2D; use headers::{ContentLength, ContentRange, HeaderMapExt}; -use html5ever::{LocalName, Prefix, local_name, namespace_url, ns}; +use html5ever::{LocalName, Prefix, local_name, ns}; use http::StatusCode; use http::header::{self, HeaderMap, HeaderValue}; use ipc_channel::ipc::{self, IpcSharedMemory, channel}; diff --git a/components/script/dom/htmlmetaelement.rs b/components/script/dom/htmlmetaelement.rs index 74b79fadad3..e94a5e1ff33 100644 --- a/components/script/dom/htmlmetaelement.rs +++ b/components/script/dom/htmlmetaelement.rs @@ -3,7 +3,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ use dom_struct::dom_struct; -use html5ever::{LocalName, Prefix, local_name, namespace_url, ns}; +use html5ever::{LocalName, Prefix, local_name, ns}; use js::rust::HandleObject; use style::str::HTML_SPACE_CHARACTERS; diff --git a/components/script/dom/htmlobjectelement.rs b/components/script/dom/htmlobjectelement.rs index a6941461e5d..276bddca986 100644 --- a/components/script/dom/htmlobjectelement.rs +++ b/components/script/dom/htmlobjectelement.rs @@ -5,7 +5,7 @@ use std::default::Default; use dom_struct::dom_struct; -use html5ever::{LocalName, Prefix, local_name, namespace_url, ns}; +use html5ever::{LocalName, Prefix, local_name, ns}; use js::rust::HandleObject; use pixels::Image; use servo_arc::Arc; diff --git a/components/script/dom/htmloptionelement.rs b/components/script/dom/htmloptionelement.rs index d6e8be04b64..b573388c73a 100644 --- a/components/script/dom/htmloptionelement.rs +++ b/components/script/dom/htmloptionelement.rs @@ -6,7 +6,7 @@ use std::cell::Cell; use std::convert::TryInto; use dom_struct::dom_struct; -use html5ever::{LocalName, Prefix, QualName, local_name, namespace_url, ns}; +use html5ever::{LocalName, Prefix, QualName, local_name, ns}; use js::rust::HandleObject; use style::str::{split_html_space_chars, str_join}; use stylo_dom::ElementState; diff --git a/components/script/dom/htmlslotelement.rs b/components/script/dom/htmlslotelement.rs index 022cbbf388a..68fa105e64d 100644 --- a/components/script/dom/htmlslotelement.rs +++ b/components/script/dom/htmlslotelement.rs @@ -5,7 +5,7 @@ use std::cell::{Cell, Ref, RefCell}; use dom_struct::dom_struct; -use html5ever::{LocalName, Prefix, local_name, namespace_url, ns}; +use html5ever::{LocalName, Prefix, local_name, ns}; use js::gc::RootedVec; use js::rust::HandleObject; use script_bindings::codegen::InheritTypes::{CharacterDataTypeId, NodeTypeId}; diff --git a/components/script/dom/htmltablecellelement.rs b/components/script/dom/htmltablecellelement.rs index 623dfdea54b..4f312e928c4 100644 --- a/components/script/dom/htmltablecellelement.rs +++ b/components/script/dom/htmltablecellelement.rs @@ -3,7 +3,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ use dom_struct::dom_struct; -use html5ever::{LocalName, Prefix, local_name, namespace_url, ns}; +use html5ever::{LocalName, Prefix, local_name, ns}; use js::rust::HandleObject; use style::attr::{AttrValue, LengthOrPercentageOrAuto}; use style::color::AbsoluteColor; diff --git a/components/script/dom/htmltablecolelement.rs b/components/script/dom/htmltablecolelement.rs index b2821fd38e2..c7ad4afd944 100644 --- a/components/script/dom/htmltablecolelement.rs +++ b/components/script/dom/htmltablecolelement.rs @@ -3,7 +3,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ use dom_struct::dom_struct; -use html5ever::{LocalName, Prefix, local_name, namespace_url, ns}; +use html5ever::{LocalName, Prefix, local_name, ns}; use js::rust::HandleObject; use style::attr::{AttrValue, LengthOrPercentageOrAuto}; diff --git a/components/script/dom/htmltableelement.rs b/components/script/dom/htmltableelement.rs index 6783da6e97d..c24ec5490c5 100644 --- a/components/script/dom/htmltableelement.rs +++ b/components/script/dom/htmltableelement.rs @@ -5,7 +5,7 @@ use std::cell::Cell; use dom_struct::dom_struct; -use html5ever::{LocalName, Prefix, local_name, namespace_url, ns}; +use html5ever::{LocalName, Prefix, local_name, ns}; use js::rust::HandleObject; use style::attr::{AttrValue, LengthOrPercentageOrAuto, parse_unsigned_integer}; use style::color::AbsoluteColor; diff --git a/components/script/dom/htmltablerowelement.rs b/components/script/dom/htmltablerowelement.rs index a13238ca2e4..6c2d502ce88 100644 --- a/components/script/dom/htmltablerowelement.rs +++ b/components/script/dom/htmltablerowelement.rs @@ -3,7 +3,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ use dom_struct::dom_struct; -use html5ever::{LocalName, Prefix, local_name, namespace_url, ns}; +use html5ever::{LocalName, Prefix, local_name, ns}; use js::rust::HandleObject; use style::attr::{AttrValue, LengthOrPercentageOrAuto}; use style::color::AbsoluteColor; diff --git a/components/script/dom/htmltablesectionelement.rs b/components/script/dom/htmltablesectionelement.rs index d97e7445590..60978c64fc1 100644 --- a/components/script/dom/htmltablesectionelement.rs +++ b/components/script/dom/htmltablesectionelement.rs @@ -3,7 +3,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ use dom_struct::dom_struct; -use html5ever::{LocalName, Prefix, local_name, namespace_url, ns}; +use html5ever::{LocalName, Prefix, local_name, ns}; use js::rust::HandleObject; use style::attr::{AttrValue, LengthOrPercentageOrAuto}; use style::color::AbsoluteColor; diff --git a/components/script/dom/htmltemplateelement.rs b/components/script/dom/htmltemplateelement.rs index 2c98035736e..128309b816b 100644 --- a/components/script/dom/htmltemplateelement.rs +++ b/components/script/dom/htmltemplateelement.rs @@ -3,7 +3,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ use dom_struct::dom_struct; -use html5ever::{LocalName, Prefix, namespace_url}; +use html5ever::{LocalName, Prefix}; use js::rust::HandleObject; use crate::dom::bindings::codegen::Bindings::DocumentBinding::DocumentMethods; diff --git a/components/script/dom/htmltextareaelement.rs b/components/script/dom/htmltextareaelement.rs index 7f47ee5a90a..a7435b40fdd 100644 --- a/components/script/dom/htmltextareaelement.rs +++ b/components/script/dom/htmltextareaelement.rs @@ -7,7 +7,7 @@ use std::default::Default; use std::ops::Range; use dom_struct::dom_struct; -use html5ever::{LocalName, Prefix, local_name, namespace_url, ns}; +use html5ever::{LocalName, Prefix, local_name, ns}; use js::rust::HandleObject; use style::attr::AttrValue; use stylo_dom::ElementState; diff --git a/components/script/dom/htmlvideoelement.rs b/components/script/dom/htmlvideoelement.rs index a6f9103200b..6f27c164d02 100644 --- a/components/script/dom/htmlvideoelement.rs +++ b/components/script/dom/htmlvideoelement.rs @@ -8,7 +8,7 @@ use std::sync::Arc; use content_security_policy as csp; use dom_struct::dom_struct; use euclid::default::Size2D; -use html5ever::{LocalName, Prefix, local_name, namespace_url, ns}; +use html5ever::{LocalName, Prefix, local_name, ns}; use ipc_channel::ipc; use js::rust::HandleObject; use net_traits::image_cache::{ @@ -233,8 +233,10 @@ impl HTMLVideoElement { .credentials_mode(CredentialsMode::Include) .use_url_credentials(true) .origin(document.origin().immutable().clone()) - .pipeline_id(Some(document.global().pipeline_id())); - + .pipeline_id(Some(document.global().pipeline_id())) + .insecure_requests_policy(document.insecure_requests_policy()) + .has_trustworthy_ancestor_origin(document.has_trustworthy_ancestor_origin()) + .policy_container(document.policy_container().to_owned()); // Step 5. // This delay must be independent from the ones created by HTMLMediaElement during // its media load algorithm, otherwise a code like diff --git a/components/script/dom/mutationobserver.rs b/components/script/dom/mutationobserver.rs index 558453f9235..473698d5df1 100644 --- a/components/script/dom/mutationobserver.rs +++ b/components/script/dom/mutationobserver.rs @@ -6,7 +6,7 @@ use std::cell::LazyCell; use std::rc::Rc; use dom_struct::dom_struct; -use html5ever::{LocalName, Namespace, namespace_url, ns}; +use html5ever::{LocalName, Namespace, ns}; use js::rust::HandleObject; use crate::dom::bindings::callback::ExceptionHandling; diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs index bcaff69adb9..2a01370085a 100644 --- a/components/script/dom/node.rs +++ b/components/script/dom/node.rs @@ -21,7 +21,7 @@ use dom_struct::dom_struct; use embedder_traits::UntrustedNodeAddress; use euclid::default::{Rect, Size2D, Vector2D}; use html5ever::serialize::HtmlSerializer; -use html5ever::{Namespace, Prefix, QualName, namespace_url, ns, serialize as html_serialize}; +use html5ever::{Namespace, Prefix, QualName, ns, serialize as html_serialize}; use js::jsapi::JSObject; use js::rust::HandleObject; use libc::{self, c_void, uintptr_t}; diff --git a/components/script/dom/servoparser/async_html.rs b/components/script/dom/servoparser/async_html.rs index 7ddc425678e..1d6f4af0b01 100644 --- a/components/script/dom/servoparser/async_html.rs +++ b/components/script/dom/servoparser/async_html.rs @@ -18,9 +18,7 @@ use html5ever::tokenizer::{Tokenizer as HtmlTokenizer, TokenizerOpts}; use html5ever::tree_builder::{ ElementFlags, NodeOrText as HtmlNodeOrText, QuirksMode, TreeBuilder, TreeBuilderOpts, TreeSink, }; -use html5ever::{ - Attribute as HtmlAttribute, ExpandedName, QualName, local_name, namespace_url, ns, -}; +use html5ever::{Attribute as HtmlAttribute, ExpandedName, QualName, local_name, ns}; use markup5ever::TokenizerResult; use servo_url::ServoUrl; use style::context::QuirksMode as ServoQuirksMode; diff --git a/components/script/dom/servoparser/html.rs b/components/script/dom/servoparser/html.rs index 3bd486b5cb7..97856256268 100644 --- a/components/script/dom/servoparser/html.rs +++ b/components/script/dom/servoparser/html.rs @@ -12,7 +12,7 @@ use html5ever::serialize::TraversalScope::IncludeNode; use html5ever::serialize::{AttrRef, Serialize, Serializer, TraversalScope}; use html5ever::tokenizer::{Tokenizer as HtmlTokenizer, TokenizerOpts}; use html5ever::tree_builder::{TreeBuilder, TreeBuilderOpts}; -use html5ever::{QualName, local_name, namespace_url, ns}; +use html5ever::{QualName, local_name, ns}; use markup5ever::TokenizerResult; use script_bindings::trace::CustomTraceable; use servo_url::ServoUrl; diff --git a/components/script/dom/servoparser/mod.rs b/components/script/dom/servoparser/mod.rs index 970c1543d09..23ef1bab3ef 100644 --- a/components/script/dom/servoparser/mod.rs +++ b/components/script/dom/servoparser/mod.rs @@ -17,7 +17,7 @@ use html5ever::buffer_queue::BufferQueue; use html5ever::tendril::fmt::UTF8; use html5ever::tendril::{ByteTendril, StrTendril, TendrilSink}; use html5ever::tree_builder::{ElementFlags, NodeOrText, QuirksMode, TreeSink}; -use html5ever::{Attribute, ExpandedName, LocalName, QualName, local_name, namespace_url, ns}; +use html5ever::{Attribute, ExpandedName, LocalName, QualName, local_name, ns}; use hyper_serde::Serde; use markup5ever::TokenizerResult; use mime::{self, Mime}; @@ -1462,7 +1462,7 @@ impl TreeSink for Sink { clonable, serializable, delegatesfocus, - SlotAssignmentMode::Manual, + SlotAssignmentMode::Named, CanGc::note(), ) { Ok(shadow_root) => { diff --git a/components/script/dom/svgelement.rs b/components/script/dom/svgelement.rs index 9a48653b768..9c8b990826d 100644 --- a/components/script/dom/svgelement.rs +++ b/components/script/dom/svgelement.rs @@ -3,7 +3,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ use dom_struct::dom_struct; -use html5ever::{LocalName, Prefix, local_name, namespace_url, ns}; +use html5ever::{LocalName, Prefix, local_name, ns}; use js::rust::HandleObject; use script_bindings::str::DOMString; use stylo_dom::ElementState; diff --git a/components/script/dom/svgsvgelement.rs b/components/script/dom/svgsvgelement.rs index 61b90a5ef39..12b7fa6bc71 100644 --- a/components/script/dom/svgsvgelement.rs +++ b/components/script/dom/svgsvgelement.rs @@ -3,7 +3,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ use dom_struct::dom_struct; -use html5ever::{LocalName, Prefix, local_name, namespace_url, ns}; +use html5ever::{LocalName, Prefix, local_name, ns}; use js::rust::HandleObject; use script_layout_interface::SVGSVGData; use style::attr::AttrValue; diff --git a/components/script/dom/trustedtypepolicyfactory.rs b/components/script/dom/trustedtypepolicyfactory.rs index 64ae1f8ab11..7735b4b4aaa 100644 --- a/components/script/dom/trustedtypepolicyfactory.rs +++ b/components/script/dom/trustedtypepolicyfactory.rs @@ -5,7 +5,7 @@ use std::cell::RefCell; use content_security_policy::CheckResult; use dom_struct::dom_struct; -use html5ever::{LocalName, Namespace, QualName, local_name, namespace_url, ns}; +use html5ever::{LocalName, Namespace, QualName, local_name, ns}; use js::rust::HandleValue; use crate::dom::bindings::codegen::Bindings::TrustedTypePolicyFactoryBinding::{ diff --git a/components/script/layout_dom/element.rs b/components/script/layout_dom/element.rs index ce7ca96f464..9b50c9f3a2b 100644 --- a/components/script/layout_dom/element.rs +++ b/components/script/layout_dom/element.rs @@ -8,7 +8,7 @@ use std::{fmt, slice}; use atomic_refcell::{AtomicRef, AtomicRefMut}; use embedder_traits::UntrustedNodeAddress; -use html5ever::{LocalName, Namespace, local_name, namespace_url, ns}; +use html5ever::{LocalName, Namespace, local_name, ns}; use js::jsapi::JSObject; use script_layout_interface::wrapper_traits::{ LayoutNode, ThreadSafeLayoutElement, ThreadSafeLayoutNode, diff --git a/components/script/layout_dom/node.rs b/components/script/layout_dom/node.rs index 213070181ef..9d36f73bbc0 100644 --- a/components/script/layout_dom/node.rs +++ b/components/script/layout_dom/node.rs @@ -10,7 +10,7 @@ use std::sync::Arc as StdArc; use base::id::{BrowsingContextId, PipelineId}; use fonts_traits::ByteIndex; -use html5ever::{local_name, namespace_url, ns}; +use html5ever::{local_name, ns}; use pixels::{Image, ImageMetadata}; use range::Range; use script_layout_interface::wrapper_traits::{LayoutDataTrait, LayoutNode, ThreadSafeLayoutNode}; diff --git a/components/script/links.rs b/components/script/links.rs index f7094adbfde..f38ba6f7767 100644 --- a/components/script/links.rs +++ b/components/script/links.rs @@ -5,7 +5,7 @@ //! Defines shared hyperlink behaviour for `<link>`, `<a>`, `<area>` and `<form>` elements. use constellation_traits::{LoadData, LoadOrigin, NavigationHistoryBehavior}; -use html5ever::{local_name, namespace_url, ns}; +use html5ever::{local_name, ns}; use malloc_size_of::malloc_size_of_is_0; use net_traits::request::Referrer; use style::str::HTML_SPACE_CHARACTERS; diff --git a/components/script/script_module.rs b/components/script/script_module.rs index 689f4a3b0a7..c7697adeea6 100644 --- a/components/script/script_module.rs +++ b/components/script/script_module.rs @@ -1760,7 +1760,10 @@ fn fetch_single_module_script( .integrity_metadata(options.integrity_metadata.clone()) .credentials_mode(options.credentials_mode) .referrer_policy(options.referrer_policy) - .mode(mode); + .mode(mode) + .insecure_requests_policy(global.insecure_requests_policy()) + .has_trustworthy_ancestor_origin(global.has_trustworthy_ancestor_origin()) + .policy_container(global.policy_container().to_owned()); let context = Arc::new(Mutex::new(ModuleContext { owner, diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs index bec4d59be0f..57660ad96fb 100644 --- a/components/script/script_thread.rs +++ b/components/script/script_thread.rs @@ -57,7 +57,7 @@ use euclid::Point2D; use euclid::default::Rect; use fonts::{FontContext, SystemFontServiceProxy}; use headers::{HeaderMapExt, LastModified, ReferrerPolicy as ReferrerPolicyHeader}; -use html5ever::{local_name, namespace_url, ns}; +use html5ever::{local_name, ns}; use http::header::REFRESH; use hyper_serde::Serde; use ipc_channel::ipc; diff --git a/components/script/xpath/eval.rs b/components/script/xpath/eval.rs index 9c95c3d8699..75d7ac5849c 100644 --- a/components/script/xpath/eval.rs +++ b/components/script/xpath/eval.rs @@ -4,7 +4,7 @@ use std::fmt; -use html5ever::{QualName, local_name, namespace_prefix, namespace_url, ns}; +use html5ever::{QualName, local_name, namespace_prefix, ns}; use super::parser::{ AdditiveOp, Axis, EqualityOp, Expr, FilterExpr, KindTest, Literal, MultiplicativeOp, NodeTest, diff --git a/components/script_bindings/root.rs b/components/script_bindings/root.rs index 51bc979908f..3d0378f0df1 100644 --- a/components/script_bindings/root.rs +++ b/components/script_bindings/root.rs @@ -412,7 +412,7 @@ impl RootCollection { .rposition(|r| std::ptr::addr_eq(*r as *const (), object as *const ())) { Some(idx) => { - roots.remove(idx); + roots.swap_remove(idx); }, None => panic!("Can't remove a root that was never rooted!"), } diff --git a/tests/wpt/meta/MANIFEST.json b/tests/wpt/meta/MANIFEST.json index 7158de0ac22..acd82d9d4c3 100644 --- a/tests/wpt/meta/MANIFEST.json +++ b/tests/wpt/meta/MANIFEST.json @@ -2793,6 +2793,13 @@ {} ] ], + "firefox-bug-1958131-crash.html": [ + "6cfb2069f4d9e3d2aa1f993055b3bbd5bbdbaa05", + [ + null, + {} + ] + ], "grid-definition": { "grid-add-item-with-positioned-items-crash.html": [ "7b2ed99f223ed4333c265f242b3f043afd9232b6", @@ -4823,7 +4830,14 @@ ] } } - } + }, + "shape-outside-infinite-crash.html": [ + "b2dfd4fad51062f0b280771ebcf60a246f551765", + [ + null, + {} + ] + ] }, "css-sizing": { "aspect-ratio": { @@ -8181,6 +8195,20 @@ {} ] ], + "dialog-requestclose-2-crash.html": [ + "a6ddac7e09cbd9d98d21ae75306704a9405f1363", + [ + null, + {} + ] + ], + "dialog-requestclose-3-crash.html": [ + "121e86455972ddf97befa00c58d0825321b7ad93", + [ + null, + {} + ] + ], "dialog-requestclose-crash.html": [ "c4c4850a2d3c66c189c1e81810a856f5b6c86ff2", [ @@ -9288,6 +9316,13 @@ } }, "quirks": { + "body-fill-html-quirk-intrinsic-crash.html": [ + "aadb6037f34675d8a5b401c03af417f232d08f98", + [ + null, + {} + ] + ], "crashtests": { "list-item-whole-line-quirks-crash.html": [ "b91b09db0e37727e2d3a3e13ca2c7cae25b8d761", @@ -15658,7 +15693,7 @@ ] ], "c414-flt-ln-002.xht": [ - "99965439661169fd554c4ffa5f0bfa49e29f4c5f", + "ef5448c489331320ee2d3d20832e9d623180b73e", [ null, {} @@ -25730,7 +25765,7 @@ ] ], "fcTL-delay-zero-num-manual.html": [ - "561d01e4db409cadb239fd3d4f0a062f181c1744", + "130500d24dbaec44be250dab3a52918a24edac0c", [ null, {} @@ -27540,7 +27575,7 @@ ] ], "interact-dom-01-b-manual.svg": [ - "32cf2f546c730f81362ff705e44b28fe3846c8aa", + "a16c25450338d068baf8076936d9e3a903b91ac4", [ null, {} @@ -134303,7 +134338,7 @@ ] ], "border-image-width-005.xht": [ - "eeceedef90e9a74a20e151b346e9030fe05d84ea", + "1e93b7219d4f32e60d336c62eb7a41245c710523", [ null, [ @@ -134316,7 +134351,7 @@ ] ], "border-image-width-006.xht": [ - "aa487b76c53a11cba41b285d4d86743bf3ca1324", + "bd046c25876cfd7de0dad157225be28bbb63cd9c", [ null, [ @@ -134329,7 +134364,7 @@ ] ], "border-image-width-007.xht": [ - "61726c00873739c076812f72645d8324494ff44c", + "6c4647dd87fe847314a16b3fb8ba18086502c5d3", [ null, [ @@ -134371,7 +134406,7 @@ ] ], "border-image-width-009.html": [ - "112c2a485ac424e3b1097ded5a59c16aafcefb01", + "109f34fe9fd98825d95c3c88ca126def252ac83b", [ null, [ @@ -136233,6 +136268,64 @@ ] }, "corner-shape": { + "corner-shape-backdrop-filter-overflow.html": [ + "550428a37e3fca4a0f50bba755f9c4f4cb738dd9", + [ + null, + [ + [ + "/css/css-borders/tentative/corner-shape/corner-shape-backdrop-filter-overflow-ref.html", + "==" + ] + ], + { + "fuzzy": [ + [ + null, + [ + [ + 0, + 64 + ], + [ + 0, + 360 + ] + ] + ] + ] + } + ] + ], + "corner-shape-backdrop-filter.html": [ + "c4a2523b1f818cd3c670969c730d0fbe82eba8a8", + [ + null, + [ + [ + "/css/css-borders/tentative/corner-shape/corner-shape-backdrop-filter-ref.html", + "==" + ] + ], + { + "fuzzy": [ + [ + null, + [ + [ + 0, + 64 + ], + [ + 0, + 360 + ] + ] + ] + ] + } + ] + ], "corner-shape-bevel-overflow-composite.html": [ "985b5efdc9b9c868465d658e5486cd1e7eae5fd5", [ @@ -170839,7 +170932,7 @@ ] ], "fixed-table-layout-with-percentage-width-in-flex-item.html": [ - "507e0e9fcefd131757ef20bf7cad88a22f6df028", + "66cefc8f23cab8a080c98a48b551ac882f045e47", [ null, [ @@ -171671,7 +171764,7 @@ ] ], "flex-direction.html": [ - "709b1b036a2abff289cae6bd8e8461887dfdcc97", + "01c6778a122c701b2350bfa9518f643919518d9e", [ null, [ @@ -185888,7 +185981,7 @@ ] ], "flex-gap-decorations-002.html": [ - "632b690434c5f27af9b06721b4203d773097fba4", + "58740200d4a8cdb2a9c450353adb920df97763fd", [ null, [ @@ -186017,6 +186110,19 @@ {} ] ], + "flex-gap-decorations-012.html": [ + "2f1f95c00c8c0eed6e11dc10c1e0e90c392ddb6f", + [ + null, + [ + [ + "/css/css-gaps/tentative/flex/flex-gap-decorations-012-ref.html", + "==" + ] + ], + {} + ] + ], "flex-gap-decorations-013.html": [ "1cdf1c2749660c9147dffc07f171f698d6a9fd2b", [ @@ -186044,12 +186150,25 @@ ] ], "flex-gap-decorations-015.html": [ - "6cba13ba2163f3c55fd67ea9e90f41b1d8eff90a", + "8d100978205684b4a21dfcc2962f6f47bbe5417a", [ null, [ [ - "/css/css-gaps/tentative/flex/flex-gap-decorations-014-ref.html", + "/css/css-gaps/tentative/flex/flex-gap-decorations-015-ref.html", + "==" + ] + ], + {} + ] + ], + "flex-gap-decorations-016.html": [ + "9f956369d48c08793bafca4cd61653dfd963cc77", + [ + null, + [ + [ + "/css/css-gaps/tentative/flex/flex-gap-decorations-016-ref.html", "==" ] ], @@ -186081,6 +186200,19 @@ ], {} ] + ], + "flex-gap-decorations-019.html": [ + "93618f71e8f7a0593c5b925eee2bdfd587411db8", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] ] }, "grid": { @@ -186098,7 +186230,7 @@ ] ], "grid-gap-decorations-002.html": [ - "dfc4198b078e6fde0a40c51fac907bd1ab249b58", + "7e7e0e4d325a89d96e9e4978da56d410769a5719", [ null, [ @@ -186356,6 +186488,84 @@ ], {} ] + ], + "grid-gap-decorations-022.html": [ + "730114aa7634a1965bb9eeec1739f5872361726b", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "grid-gap-decorations-023.html": [ + "706f66ebcfac1a0000debf4c753f11ca4f481f16", + [ + null, + [ + [ + "/css/css-gaps/tentative/grid/grid-gap-decorations-023-ref.html", + "==" + ] + ], + {} + ] + ], + "grid-gap-decorations-024.html": [ + "104df87c7e22568b93b758c9d17a395ca9f496b8", + [ + null, + [ + [ + "/css/css-gaps/tentative/grid/grid-gap-decorations-024-ref.html", + "==" + ] + ], + {} + ] + ], + "grid-gap-decorations-025.html": [ + "fc48f15f5c27d591a0b417355156b1a66f5c31a8", + [ + null, + [ + [ + "/css/css-gaps/tentative/grid/grid-gap-decorations-025-ref.html", + "==" + ] + ], + {} + ] + ], + "grid-gap-decorations-026.html": [ + "17e0a99dd844d607859d09aa85749b0946431f02", + [ + null, + [ + [ + "/css/css-gaps/tentative/grid/grid-gap-decorations-026-ref.html", + "==" + ] + ], + {} + ] + ], + "grid-gap-decorations-027.html": [ + "e39305f74b8a432cd5b8a1e386c75daab6c1433d", + [ + null, + [ + [ + "/css/css-gaps/tentative/grid/grid-gap-decorations-027-ref.html", + "==" + ] + ], + {} + ] ] } } @@ -206431,7 +206641,7 @@ ] ], "text-box-trim-not-ignore-nested-text-box-edge.html": [ - "067281d893afb1c69e96c523a3ebb334f8c09825", + "4f8568acf8a9545c07f243ce8fc8e8ecb4bfd18e", [ null, [ @@ -219950,7 +220160,7 @@ ] ], "multicol-nested-016.html": [ - "ad4b6a5aaaf9390917d2c6566e5e7758bfc1b1ec", + "2f428957da44b29bc00948e7de89c04540f4e552", [ null, [ @@ -221123,7 +221333,7 @@ ] ], "multicol-span-all-children-height-001.html": [ - "3226e81c3205528f72ca4ce2f96d9a700d6fa78d", + "64c04c868d925154cdd1aa62ad061b43d8073304", [ null, [ @@ -232622,6 +232832,19 @@ {} ] ], + "position-sticky-table-td-subpixel-zoom.html": [ + "ecdda37c39a507413cf3ee3aec68e608efc12e83", + [ + null, + [ + [ + "/css/css-position/sticky/position-sticky-table-td-subpixel-zoom-ref.html", + "==" + ] + ], + {} + ] + ], "position-sticky-table-td-top.html": [ "46931333c6a0db7d73aaf685e5215fe383172241", [ @@ -250953,7 +251176,7 @@ ] ], "collapsed-border-remove-row-group.html": [ - "39b89956c54c3b589e9396c23a7ce87c6028a2cb", + "44e7cabd7e9fe570afb8550a1a74b55c67641aad", [ null, [ @@ -257283,7 +257506,7 @@ ] ], "line-breaking-022.html": [ - "3591f46534a808a95bfdaf375b0862f32f8acdf3", + "dc7a3c28786d5ba71958649396dafcae59410059", [ null, [ @@ -262004,7 +262227,7 @@ ] ], "text-justify-006.html": [ - "7744f52afea63d9b1abe7c7edab4880d703be855", + "80c574d28cb2afdfeb64b644e3a73e050107f72c", [ null, [ @@ -270480,7 +270703,7 @@ ] ], "word-break-break-all-ethiopic.html": [ - "1fa7f9054a9893bcc058683392b77ee0904a6203", + "ef45231d3596f29d671e106cad8785e3d5cb38ae", [ null, [ @@ -287049,7 +287272,7 @@ ] ], "transition-test.html": [ - "10700abf9bc48d0938fd3f5b77b031ecc0c05e4a", + "79094cee61c8cb88514b4f045b28af73c988a307", [ null, [ @@ -287606,7 +287829,7 @@ ] ], "box-sizing-003.html": [ - "4aefec6656653c8bfff94f645554b9d5395e7d30", + "c9a7effd7eb976b3243e26d911f7482da9ba57f4", [ null, [ @@ -287619,7 +287842,7 @@ ] ], "box-sizing-005.html": [ - "64267da852871de78c15c20bb64635db9f9c1759", + "c75265fbccf2a49eb746c96766f9cc74e24ec6d5", [ null, [ @@ -301727,6 +301950,288 @@ {} ] ], + "urls": { + "cross-origin": { + "url-image-crossorigin-anonymous-negative.sub.html": [ + "f5066a55d2b5488110df132730c70e4be39973e2", + [ + null, + [ + [ + "/css/css-values/urls/url-image-ref.html", + "==" + ] + ], + {} + ] + ], + "url-image-crossorigin-anonymous.sub.html": [ + "0a45eda33d7315d1a2e6e45bb722bd671c1b5bdb", + [ + null, + [ + [ + "/css/css-values/urls/url-image-ref.html", + "==" + ] + ], + {} + ] + ], + "url-image-crossorigin-use-credentials-negative.sub.html": [ + "952f953d8443b6873d5348e5fee8473ac506f07b", + [ + null, + [ + [ + "/css/css-values/urls/url-image-ref.html", + "==" + ] + ], + {} + ] + ], + "url-image-crossorigin-use-credentials.sub.html": [ + "f592a02c4869ded268bd6e4822ae48957ddd82ff", + [ + null, + [ + [ + "/css/css-values/urls/url-image-ref.html", + "==" + ] + ], + {} + ] + ] + }, + "referrer-policy": { + "no-referrer": { + "url-image-referrerpolicy-cross-origin.sub.html": [ + "30a52a848a4fc3b696d65cad27263fbb5753a1bc", + [ + null, + [ + [ + "/css/css-values/urls/url-image-ref.html", + "==" + ] + ], + {} + ] + ], + "url-image-referrerpolicy-same-origin.sub.html": [ + "ebbff834b92fe084e779a91ad38a882d8640e098", + [ + null, + [ + [ + "/css/css-values/urls/url-image-ref.html", + "==" + ] + ], + {} + ] + ] + }, + "no-referrer-when-downgrade": { + "url-image-referrerpolicy-cross-origin.sub.html": [ + "ce51df67c027ca74a8c033f78530dc7f1d1f9701", + [ + null, + [ + [ + "/css/css-values/urls/url-image-ref.html", + "==" + ] + ], + {} + ] + ], + "url-image-referrerpolicy-same-origin.sub.html": [ + "6860e7386bf65b16be804952df14d9613d742073", + [ + null, + [ + [ + "/css/css-values/urls/url-image-ref.html", + "==" + ] + ], + {} + ] + ] + }, + "origin": { + "url-image-referrerpolicy-cross-origin.sub.html": [ + "14a8172d6e354693c5fd0857223e3c3601833588", + [ + null, + [ + [ + "/css/css-values/urls/url-image-ref.html", + "==" + ] + ], + {} + ] + ], + "url-image-referrerpolicy-same-origin.sub.html": [ + "1cc6f011c12ee992c4414446fe8cb569aab49a70", + [ + null, + [ + [ + "/css/css-values/urls/url-image-ref.html", + "==" + ] + ], + {} + ] + ] + }, + "origin-when-cross-origin": { + "url-image-referrerpolicy-cross-origin.sub.html": [ + "6285f2f0e5de1dd3e0f3a405eb226926bad660ae", + [ + null, + [ + [ + "/css/css-values/urls/url-image-ref.html", + "==" + ] + ], + {} + ] + ], + "url-image-referrerpolicy-same-origin.sub.html": [ + "eb4e081e94013b5ceb5cfa8e637c5074c4e69a5d", + [ + null, + [ + [ + "/css/css-values/urls/url-image-ref.html", + "==" + ] + ], + {} + ] + ] + }, + "same-origin": { + "url-image-referrerpolicy-cross-origin.sub.html": [ + "de23eb1f0954c05d617e1e2b28e8d1ff743f6aa2", + [ + null, + [ + [ + "/css/css-values/urls/url-image-ref.html", + "==" + ] + ], + {} + ] + ], + "url-image-referrerpolicy-same-origin.sub.html": [ + "866affc6d9fb61d1f4e88a88355e8cb362684497", + [ + null, + [ + [ + "/css/css-values/urls/url-image-ref.html", + "==" + ] + ], + {} + ] + ] + }, + "strict-origin": { + "url-image-referrerpolicy-cross-origin.sub.html": [ + "b17ac4b4ef7d39e1f700bb4c0b969fc1e7d4401a", + [ + null, + [ + [ + "/css/css-values/urls/url-image-ref.html", + "==" + ] + ], + {} + ] + ], + "url-image-referrerpolicy-same-origin.sub.html": [ + "dadf1c58d526c1e6674d67d54a5f1e1cc65ffa42", + [ + null, + [ + [ + "/css/css-values/urls/url-image-ref.html", + "==" + ] + ], + {} + ] + ] + }, + "strict-origin-when-cross-origin": { + "url-image-referrerpolicy-cross-origin.sub.html": [ + "1e66fbf659f821cbf3335dca2147e7c7a636528e", + [ + null, + [ + [ + "/css/css-values/urls/url-image-ref.html", + "==" + ] + ], + {} + ] + ], + "url-image-referrerpolicy-same-origin.sub.html": [ + "57f5351a5a1bcf8c33c3607c720fa0bac934ba0b", + [ + null, + [ + [ + "/css/css-values/urls/url-image-ref.html", + "==" + ] + ], + {} + ] + ] + }, + "unsafe-url": { + "url-image-referrerpolicy-cross-origin.sub.html": [ + "dc5a3d5143598159090c35db4560389aa5b6cae3", + [ + null, + [ + [ + "/css/css-values/urls/url-image-ref.html", + "==" + ] + ], + {} + ] + ], + "url-image-referrerpolicy-same-origin.sub.html": [ + "7eaba535f142aeb4d00704f7096c62ba99dab4b8", + [ + null, + [ + [ + "/css/css-values/urls/url-image-ref.html", + "==" + ] + ], + {} + ] + ] + } + } + }, "vh-calc-support-pct.html": [ "3a422d4ce46fd57636eaf564c356f4152ca3a061", [ @@ -306606,7 +307111,7 @@ }, "nested": { "adjust-transform-with-scale.tentative.html": [ - "e58a7f363004def39a6ef9e8acb8e73e84dd18e2", + "a1177e7801d412a425de3bb9c0fea11bfabed2d8", [ null, [ @@ -306635,7 +307140,7 @@ ] ], "adjust-transform.tentative.html": [ - "915bd22e420fde68ca0a794b4f3c6f928d4f1c97", + "54b5f494419bf2e1c41bb102f0e6525123548ea4", [ null, [ @@ -306664,7 +307169,7 @@ ] ], "compute-explicit-name-direct.tentative.html": [ - "d0b3e0f16d64e710cd2cfb144bff0c4ebcddda78", + "31f49979e8e3ed25bfa825daa772c5950f8d41b0", [ null, [ @@ -306693,7 +307198,7 @@ ] ], "compute-explicit-name-nested-vt-names.tentative.html": [ - "dcf56b500f4ab0ce732221f0ff412c38a1040381", + "0be0f3c56aaf543c9e713b26f30d5fd90d42603d", [ null, [ @@ -306722,7 +307227,7 @@ ] ], "compute-explicit-name-nested.tentative.html": [ - "ad47461b142323817196f49c81b0e8ada34f4154", + "f455210cce293239b2d2081864ce6199b14a6540", [ null, [ @@ -306751,7 +307256,7 @@ ] ], "compute-explicit-name-non-ancestor.tentative.html": [ - "8a2c69147ad6bfe28146b1ab22db857fdf0e2fa3", + "f16628908d2c5382ce861e642868b7d70670c02f", [ null, [ @@ -306780,7 +307285,7 @@ ] ], "compute-explicit-name-non-existent.tentative.html": [ - "2e3d71f96d15abb468a03d6a7f41a26399867a38", + "090637b8e63cce618fd97217a6ca527f138ba1cc", [ null, [ @@ -306809,7 +307314,7 @@ ] ], "compute-explicit-name-self.tentative.html": [ - "09aa0f653318610fca56decf9366e984c1d4f0a7", + "63f3a3523e3ee5f6107666afb9fade903656e781", [ null, [ @@ -306838,7 +307343,7 @@ ] ], "contain-direct.tentative.html": [ - "8cc856883df16410730d40da72d3ef4cc35562be", + "a90a843b5eefcff9c0ca3daeada93df29b1d007b", [ null, [ @@ -306867,7 +307372,7 @@ ] ], "contain-nested.tentative.html": [ - "643aad7b6db97b890ecd7fcb9e650915426d3520", + "b995d11c997a30548c79aa0f5d2b7d23be5ca5ea", [ null, [ @@ -306896,7 +307401,7 @@ ] ], "contain-on-self.tentative.html": [ - "f8662850bb94b64e27448b9e1187f7c4a5e788d6", + "a0a63188d3ec663210998b14da5caa44df0a3c58", [ null, [ @@ -306925,7 +307430,7 @@ ] ], "custom-ident-implies-contain.html": [ - "6524d2c2680cd1ebcd00d5335adde259b321a6cd", + "545e98bc1716e3f2e1227eeeec2558a56f62082a", [ null, [ @@ -306954,7 +307459,7 @@ ] ], "nearest-direct.tentative.html": [ - "a42e5a847c053b2b248208df64be87512b24716e", + "9bfd2e29c83a17c4244af589aa2877d4437da07f", [ null, [ @@ -306983,7 +307488,7 @@ ] ], "nearest-ignores-nearest-name.tentative.html": [ - "ddae634f87a0ace4216ea66cbb72bc7734df3e10", + "3c904f3abb4a4c3299a522be61b88b312e9ac697", [ null, [ @@ -307012,7 +307517,7 @@ ] ], "nearest-implies-contain.html": [ - "94f8b8d1b7e84bd4055a202729c41efa70cb9a5a", + "378d2ebcdc189efb69d09365cc298f2bcf88e62c", [ null, [ @@ -307041,7 +307546,7 @@ ] ], "nearest-nested.tentative.html": [ - "9ec3e8f95ffe3194e85cdbe455ee3b3a3d723211", + "3e445c6bfcfba701114ff0b579d3d270f18e6c93", [ null, [ @@ -307070,7 +307575,7 @@ ] ], "nested-exit.tentative.html": [ - "dd1d65622808a096731e557be292075967fe142d", + "83570762061638bd2a780922e45cf39da100d713", [ null, [ @@ -307099,7 +307604,7 @@ ] ], "nested-group-display-none.tentative.html": [ - "084348732540c7651230c3072ee736dbea0c0bd5", + "a4aad5aeee6d6cbfbce8b1db2bef5cc289c8816f", [ null, [ @@ -307128,7 +307633,7 @@ ] ], "nested-group-in-pseudo-basic.tentative.html": [ - "77241d06b73217a9a99f46aa9838f3ebb7507732", + "f2a228144e27f25630806048b76611fbf8013e8a", [ null, [ @@ -307157,7 +307662,7 @@ ] ], "nested-root-capture-with-clip.html": [ - "a55997a3f638a3fb6a8b701fae1ff9683da494cd", + "4a063b57ba1fbe3d821850195fcf8adb9fc75565", [ null, [ @@ -307186,7 +307691,7 @@ ] ], "normal-goes-up.tentative.html": [ - "f68c93d474425d958b46c3dcd2d29197f797fbdd", + "b027e36672fc879fd6aa3dfaa9d7af01fc2c93a5", [ null, [ @@ -307215,7 +307720,7 @@ ] ], "render-element.tentative.html": [ - "59a5a108314c0270b561339bf9a8a0cb6fdfe27d", + "4b74290279b5ff92018d031dc21f1c0928fd008d", [ null, [ @@ -328057,6 +328562,19 @@ {} ] ], + "empty-element-with-filter-004.html": [ + "38f746ff405fcf90ccd34a75ed4209a7b4669634", + [ + null, + [ + [ + "/css/filter-effects/reference/green-100x100.html", + "==" + ] + ], + {} + ] + ], "empty-element-with-filter.html": [ "3e8fc7e164cde54a8ff81a241909c2f729f32afb", [ @@ -329171,7 +329689,7 @@ ] ], "svg-feimage-005.html": [ - "21846db376b73ad96642d2823b84d5817b8b57be", + "52ecaac3ffdaf162f5fba3ec6ad7a0cb2402ede9", [ null, [ @@ -331965,7 +332483,7 @@ ] ], "offset-path-shape-shape-001.html": [ - "4cca1744d061257c3cf1245988cd5f479e0b50f3", + "dd2fc6327b8ddebd3c02c1d59164968516fce84e", [ null, [ @@ -332477,7 +332995,7 @@ ] ], "dir-selector-auto-direction-change-001.html": [ - "f6c6393b08a940054b90b68fe3ebea9ebc8846ec", + "f376e33e2bae1cfddda202773461d7f5c4cb4330", [ null, [ @@ -337938,6 +338456,32 @@ ] } ] + ], + "forced-colors-mode-55.html": [ + "db457fb0cfe1bfca3d9a9ff545cd269202a0e196", + [ + null, + [ + [ + "/forced-colors-mode/forced-colors-mode-55-ref.html", + "==" + ] + ], + {} + ] + ], + "forced-colors-mode-56.html": [ + "632a6c7bd035a6d57388be5d8ae97d878f7c008d", + [ + null, + [ + [ + "/forced-colors-mode/forced-colors-mode-56-ref.html", + "==" + ] + ], + {} + ] ] }, "fullscreen": { @@ -352375,6 +352919,19 @@ } ] ], + "select-appearance-sizing-in-flex.tentative.html": [ + "563cf72b5f3e76dfc465930b9cb80ae434d66069", + [ + null, + [ + [ + "/html/semantics/forms/the-select-element/customizable-select/select-appearance-sizing-in-flex-ref.html", + "==" + ] + ], + {} + ] + ], "select-appearance-switching-invalidation.tentative.html": [ "d02c2a523141657b4abc4d2dbddab7305d987421", [ @@ -354688,7 +355245,7 @@ "the-button-element": { "interest-target": { "interesttarget-keyboard-invalidation.tentative.html": [ - "f6d572a2ef216481ba78e1c6365d71926f0da003", + "8c0ebd7a2cdcbab16e13618dbd5b8e36c58359f8", [ null, [ @@ -361645,6 +362202,19 @@ ], {} ] + ], + "viewBox-synthesized-in-img-001.tentative.html": [ + "85b555da050d83b0b1bd71c071a0978687e51204", + [ + null, + [ + [ + "/svg/coordinate-systems/viewBox-synthesized-in-img-001-ref.html", + "==" + ] + ], + {} + ] ] }, "embedded": { @@ -365036,6 +365606,58 @@ {} ] ], + "inner-svg-css-transform.svg": [ + "9187b0098facbc2d98c374ed13d640f1ceddba79", + [ + null, + [ + [ + "/svg/struct/reftests/reference/inner-svg-transform-ref.svg", + "==" + ] + ], + {} + ] + ], + "inner-svg-rotate-transform.svg": [ + "c8a7c2c612e20ab2c9a1072f1bbf08d86b9ccb0d", + [ + null, + [ + [ + "/svg/struct/reftests/reference/inner-svg-rotate-transform-ref.svg", + "==" + ] + ], + {} + ] + ], + "inner-svg-transform-and-viewbox.svg": [ + "3b96cef3d93cdcd0a46b46508591701b809aa6cd", + [ + null, + [ + [ + "/svg/struct/reftests/reference/inner-svg-transform-and-viewbox-ref.svg", + "==" + ] + ], + {} + ] + ], + "inner-svg-transform.svg": [ + "31b2c613c6ae30eae1dcb2d913218f1a42503350", + [ + null, + [ + [ + "/svg/struct/reftests/reference/inner-svg-transform-ref.svg", + "==" + ] + ], + {} + ] + ], "nested-svg-through-display-contents.svg": [ "1be64d5242f9f65f53cd079df270c8a2232b741b", [ @@ -365049,6 +365671,19 @@ {} ] ], + "outer-svg-transform.svg": [ + "743ced136fa0640b7f2ab434c8b4a2585d30fc3b", + [ + null, + [ + [ + "/svg/struct/reftests/reference/outer-svg-transform-ref.svg", + "==" + ] + ], + {} + ] + ], "requiredextensions-empty-string.svg": [ "22efef20d31940a3f7fac60529687d13ddaa0dd1", [ @@ -365270,6 +365905,19 @@ {} ] ], + "use-external-svg-resource-no-fragment-id.html": [ + "37bcd3f370ac50250b02eeecc733fe53deb814a2", + [ + null, + [ + [ + "/svg/struct/reftests/reference/green-100x100.html", + "==" + ] + ], + {} + ] + ], "use-inheritance-001.svg": [ "5e375b94cd6c15f4ded39f351ce91d67e94b74bd", [ @@ -370541,11 +371189,31 @@ } }, "ai": { + "language_detection": { + "resources": { + "iframe-helper.html": [ + "fe07de3f8abac59ddbd6ccfd706a5e69c5b8b4c4", + [] + ] + } + }, "resources": { + "locale-util.js": [ + "87d32ae620bbc050830705bfdb8902d30d3968e7", + [] + ], "util.js": [ - "ea113b15bdae9fcd0a94fb69d6edcf8777fdf56d", + "0cbdc68e26058e2d1133bffe26ce9ffa72dbe564", [] ] + }, + "summarizer": { + "resources": { + "iframe-helper.html": [ + "8db84705a2b87fe958b09d089722fe08700426fa", + [] + ] + } } }, "ambient-light": { @@ -373059,7 +373727,7 @@ [] ], "bluetooth-test.js": [ - "bd597efd01b601754ce2c62e4c7fb4842fd5057c", + "05981c07e15c8c89d735bc8985364ebe9377398e", [] ], "health-thermometer-iframe.html": [ @@ -394707,7 +395375,7 @@ [] ], "helper_iframe.sub.html": [ - "750f19b56d39b25cbe5d770640bd9f2b36c78005", + "3bd1843d5742dcbbbeca6318c4c9793d3532a7a2", [] ], "helpers.js": [ @@ -415366,6 +416034,14 @@ "36fc7a88825fea38ad5cfcdf544946e3644cc00b", [] ], + "corner-shape-backdrop-filter-overflow-ref.html": [ + "4aabd7e8e353f90f3ceeaf590eca42854c9552b7", + [] + ], + "corner-shape-backdrop-filter-ref.html": [ + "165f93e6be13d9d856ac008b4eb9a5db4b0873cd", + [] + ], "corner-shape-bevel-overflow-composite-ref.html": [ "f67be0cc6388ee35801bc1eab83f857902ea2be8", [] @@ -429561,25 +430237,25 @@ "tentative": { "agnostic": { "gap-decorations-001-ref.html": [ - "f21be425243208a8fd5baa7ead43313ea88fb19a", + "a7314fc7dca1545dacd710c261c7594117a3894a", [] ] }, "flex": { "flex-gap-decorations-003-ref.html": [ - "03a815909f25638dfb8ad8aa1bebf6b95d95d000", + "137a63474b80d8cae010511de93d21144052366f", [] ], "flex-gap-decorations-004-ref.html": [ - "a1f4e9d666ed9114092b277576d1057710a15db0", + "f77dd318db7747a5a7107e69afe2a21436aafc33", [] ], "flex-gap-decorations-005-ref.html": [ - "020fdb1c8dbe0e5c8d5ca951a6b9cd204f65bd1d", + "04b3e8d1af4eee718bda8b432c157a45c3a3f623", [] ], "flex-gap-decorations-006-ref.html": [ - "701d36f93bb45a41138496e0a1e7c02ba3174788", + "46c4fd49e39239b3940911f514e169f86cc613b0", [] ], "flex-gap-decorations-007-ref.html": [ @@ -429591,15 +430267,19 @@ [] ], "flex-gap-decorations-009-ref.html": [ - "2071e3fce6029acd1f4d69099eb3642f04cad70a", + "0adb9af6994746b1e80d056a0c92cd48f2106108", [] ], "flex-gap-decorations-010-ref.html": [ - "c20df7fcda147bacf350b661451b7a1dd108bcc1", + "8756c5d038c147a561b20ce4ce2aa45e0ade0ab7", [] ], "flex-gap-decorations-011-ref.html": [ - "61d3e83dc2f64fea83fea38389413ee66ba4e5df", + "082be2875a4274d8744b098f8858635c0df8c8d3", + [] + ], + "flex-gap-decorations-012-ref.html": [ + "33be4b76212fde92bf4488574228c37b50edc1b6", [] ], "flex-gap-decorations-013-ref.html": [ @@ -429607,7 +430287,15 @@ [] ], "flex-gap-decorations-014-ref.html": [ - "ab28707785e56b3ab9cdeb61dcf2e4d219dded41", + "59ce37deaec3e993e594c01fb9ac9887ced10668", + [] + ], + "flex-gap-decorations-015-ref.html": [ + "48745eff931a803f4da17ea6a527b62367720560", + [] + ], + "flex-gap-decorations-016-ref.html": [ + "155e0bfac7b35307f211535f4a940edc7af32dfc", [] ], "flex-gap-decorations-017-ref.html": [ @@ -429633,59 +430321,59 @@ [] ], "grid-gap-decorations-006-ref.html": [ - "f77ec2a9d43899e971dea9ee1596595561fe2bf8", + "94d455c1d86af89ff2b3e872eeaf9f59cd4bde0a", [] ], "grid-gap-decorations-007-ref.html": [ - "9d74fa00f41fd5599f8c9d4c6d32b5b69363d42b", + "5d89f414ed5fa6f259eb95ad9de96e260586ccdd", [] ], "grid-gap-decorations-008-ref.html": [ - "200a2621a2181d52e1a16fc6919f944ee08f0b36", + "3e2562cfccb8d4a5c6ce1f6f5b5a0781421392ad", [] ], "grid-gap-decorations-009-ref.html": [ - "11d8267235b8a24a9118b0b638a9a0519e69b784", + "964f2111eb8d97cf0c18f705115027136ee147a3", [] ], "grid-gap-decorations-010-ref.html": [ - "747391cfedc88bd46f3a13ca8895d5bc6101a6d2", + "0c07124b0864605d7fafabece01988036b501019", [] ], "grid-gap-decorations-011-ref.html": [ - "c49eb95f72eff1e8ed657fbead3243abd57af908", + "c8824a5296ea8b87fe3a59f01195ab456cd7b46b", [] ], "grid-gap-decorations-012-ref.html": [ - "ded98fa1c8d314be49ed7a2d3159fea2d7efe0d7", + "51ca67dd6a2ba00b2618e11535b1447ccfaa28c9", [] ], "grid-gap-decorations-013-ref.html": [ - "bd8456f525ef3cc6406658db68b893baa0352301", + "7ebf7c00b181f6480975367ca97dedad9a4221c5", [] ], "grid-gap-decorations-014-ref.html": [ - "25a930a51af81d12ebc8e5fa4dcedff31510c0dc", + "7631d5287a85997f1f2f89dcf2a727f3c0a07c65", [] ], "grid-gap-decorations-015-ref.html": [ - "0937a62da6f153b1df1facb3ad8b472d57339784", + "f95324d3320bbb7653963c0a260c8a4a78ff41ea", [] ], "grid-gap-decorations-016-ref.html": [ - "1d368aba9d418a74e930c7efbeaff4fb2bc3bc41", + "c11380a68aa09f730a4bd2b609274ff94424c772", [] ], "grid-gap-decorations-017-ref.html": [ - "2aa226eb0920a58f8f1af0e31ffccd130ad759c0", + "ac0bbd1f1e19cfc5729486fe5109af8f400f655d", [] ], "grid-gap-decorations-018-ref.html": [ - "6fcc175e68dc57e96a9b3b252e4c6403cb4c9698", + "072dc508ea340c5dbebb14aa8baf06bbb9e7a127", [] ], "grid-gap-decorations-019-ref.html": [ - "0705ba075abe91b766381472938bb68026270022", + "e9f8a87979d0e66aa708911798d6ea5bd1b40b42", [] ], "grid-gap-decorations-020-ref.html": [ @@ -429695,6 +430383,26 @@ "grid-gap-decorations-021-ref.html": [ "de36d206606d1dd324ee2eb458a840eedb81e140", [] + ], + "grid-gap-decorations-023-ref.html": [ + "e630694c6a55a5e710c6517574b8377527db6d19", + [] + ], + "grid-gap-decorations-024-ref.html": [ + "94b1eccd7470157065bbc6fbe2961b311a1762fd", + [] + ], + "grid-gap-decorations-025-ref.html": [ + "3834da46a5d58d0785bb3b767f21cbeff5e2f7d4", + [] + ], + "grid-gap-decorations-026-ref.html": [ + "d57c622810dcc70270db45742f14faaf75d65357", + [] + ], + "grid-gap-decorations-027-ref.html": [ + "7e0d9cbcd6ff64b17bc8fe57616a37ba29a9fd8e", + [] ] } } @@ -438755,6 +439463,10 @@ "633c2fa50ea0ba41778fc53276de58388e15f7db", [] ], + "position-sticky-table-td-subpixel-zoom-ref.html": [ + "719319b4da92936446b315c01da3b8a0a553ab99", + [] + ], "position-sticky-table-td-top-ref.html": [ "2ef7c2678b4a37a0b672f7e95a4d4523c2db07a6", [] @@ -445031,7 +445743,7 @@ "text-justify": { "reference": { "text-justify-006-ref.html": [ - "595485c5f4ea346b011f07128649da3f2c020902", + "a017f7a8e6b53d967bd27098be060bb799844ad8", [] ], "text-justify-and-trailing-spaces-001-ref.html": [ @@ -450956,6 +451668,18 @@ }, "urls": { "support": { + "1x1-green.png": [ + "b98ca0ba0a03c580ac339e4a3653539cfa8edc71", + [] + ], + "1x1-navy.png": [ + "9b9a03955baea7abde9e056e8604e18694e49b66", + [] + ], + "1x1-red.png": [ + "6bd73ac101874f306d007e9cea8fa3a1f62dce16", + [] + ], "empty-urls.css": [ "0559e3b2352519e00cc5196dc99a6ab69e8ae90e", [] @@ -450964,11 +451688,23 @@ "2c39a087e9eeb786967751acbbbda112ad590ff9", [] ], + "image-referrerpolicy.py": [ + "cff09165f1047eae0b7f94008d076cc3a417c282", + [] + ], + "image-referrerpolicy.sub.js": [ + "4fc9d46218f154736106c3294a77ce695f21ce1b", + [] + ], "relative-urls.css": [ "1354c655e9898cff845ff78df717cca7c73f030f", [] ] - } + }, + "url-image-ref.html": [ + "a56c789f1474de969ee9c2276ec22c2594f921a8", + [] + ] }, "vh-update-and-transition-in-subframe-iframe.html": [ "61831f42f7d6ca1efe2e9534366f4b91da2ca155", @@ -451624,7 +452360,7 @@ [] ], "nested-root-capture-with-clip-ref.html": [ - "40275ab555c378a367a52ec81d6788923a01002a", + "b598df17a0ec92234b2bfff8920344eec0d5dbc2", [] ], "resources": { @@ -451635,6 +452371,10 @@ "compute-test.js": [ "f71cf27b2504163ccb47e5253dcbe3b26deb1226", [] + ], + "pause-view-transitions.css": [ + "823235f3fbbfc6b9b4c39d9d9a1ac0c53f193473", + [] ] }, "rounded-border-clipper-ref.html": [ @@ -454502,7 +455242,7 @@ [] ], "req-tcu-font.html": [ - "d329eea041c509a4102e868025504dde0d5a868e", + "16414a1b2b1743812788257efc4ef25c5ea3932b", [] ] }, @@ -457525,12 +458265,6 @@ "e77a8695bdd8f4782ba02a1a039597d300965601", [] ], - "custom-element-registry": { - "WEB_FEATURES.yml": [ - "c8486615c1e03c1b70d9f22ddbfe2f95b617fd0a", - [] - ] - }, "form-associated": { "ElementInternals-reportValidity-bubble-notref.html": [ "dda233296569d8ec855855434a4947d8a847a2c6", @@ -457579,6 +458313,12 @@ ] } }, + "registries": { + "WEB_FEATURES.yml": [ + "c8486615c1e03c1b70d9f22ddbfe2f95b617fd0a", + [] + ] + }, "resources": { "custom-elements-helpers.js": [ "48775af162ac86f429431a84daacc86e3ef0c140", @@ -458197,7 +458937,7 @@ [] ], "testdriver.md": [ - "537b3c01976c3c798ea7afda47832aaea324830d", + "67757af63f2ed6af4026577dd35000c183509d44", [] ], "testharness-api.md": [ @@ -459175,7 +459915,7 @@ }, "include": { "editor-test-utils.js": [ - "f88a9bac3b4d71f19da915ae1f43114d862f3cf7", + "9c5600af77bf22c936cbe383a9667790d2cd8c10", [] ], "implementation.js": [ @@ -461219,7 +461959,7 @@ [] ], "manifest_with_variable_accounts.json": [ - "b3161e5f286034714af357cd98a7949c57f6937c", + "b0fa2bbcc158e4ad1e32d46d7556f7db629255c8", [] ], "mark_signedin": [ @@ -462428,7 +463168,7 @@ [] ], "keepalive-helper.js": [ - "1e75c060aea1d8251f3546429f73e613575e7966", + "ad0e9bfa06c0bb25cccda2ef279ba0c1c5abe36d", [] ], "keepalive-iframe.html": [ @@ -463107,7 +463847,7 @@ }, "http-cache": { "README.md": [ - "512c422e1087c5ef726b24242b7bfc7af4e43170", + "f3815aabfd94b7d0625cd6db35353eca4b7d5cb6", [] ], "basic-auth-cache-test-ref.html": [ @@ -463115,7 +463855,7 @@ [] ], "http-cache.js": [ - "0ca5fcc2bc0812f116c483a3dd24ae08fb0545c6", + "e22347369109de27cd63cd359d9e9608c34243ee", [] ], "resources": { @@ -463836,7 +464576,7 @@ [] ], "fledge-util.sub.js": [ - "e0d5d99bb6553e441de6e4a8213cf114002666f0", + "0a18ea40d3d25e22acef6a7c32f0e644989294cf", [] ], "fledge_http_server_util.py": [ @@ -464561,7 +465301,7 @@ [] ], "LICENSE": [ - "ac5f0b043202bc1e0979388c026014e51a3d60d9", + "4cbddfbc646f99510d69f525b02c38da789fdf06", [] ], "README.md": [ @@ -464698,6 +465438,10 @@ "0b4f8bf46a76ab5cc70c2a12cb7db0d49570bd7c", [] ], + "largeop-displayoperatorminheight3000-2AFF-axisheight1000.woff": [ + "13d3e4ad4ed6d12cb30b27ea14169866b874f4e7", + [] + ], "largeop-displayoperatorminheight5000.woff": [ "53fcc13a1603621c0985dd8ea8d956fd01c974f4", [] @@ -465243,6 +465987,14 @@ "6bfa7710fa337ffba4edf0c33d916d30aa675610", [] ], + "forced-colors-mode-55-ref.html": [ + "55ecd284b70fb8fe0b35c151ebd798fe66ca42d6", + [] + ], + "forced-colors-mode-56-ref.html": [ + "d3a90b8c87fe55f341c16d7dbb11a56258bc9a05", + [] + ], "resources": { "float-image.jpg": [ "ab06d5f94d16e22bb08fad79d6fef662b2a7de5a", @@ -466336,7 +467088,7 @@ [] ], "004-1.html": [ - "a3ca82f520a7681d0e53a82a234613b8e8773756", + "5391f933f9ab146b4cc0f27149229cc3cff5477f", [] ], "004-2.html": [ @@ -470720,7 +471472,7 @@ ], "resources": { "blob-url-factory.html": [ - "928d404672ddece3576c8f4e1132126c50315873", + "98937a2501dd623e9c851d566025dca03db9c7fe", [] ], "blob-url-factory.html.headers": [ @@ -470852,7 +471604,7 @@ [] ], "script-factory.js": [ - "ac7a1fda06f6237973264abf6f2b1b62e746e6ab", + "e57449abac4b806a129d679f49f0ad409f184fee", [] ], "shared-worker-fetch.js.py": [ @@ -478553,7 +479305,7 @@ [] ], "customizable-select-styles.css": [ - "13a500a6197955a4bceebf0382ddc41feaf09b46", + "acf84493d5cff7e7f1b4c7e0c97c00f566e854c5", [] ], "customizable-select-utils.js": [ @@ -478653,6 +479405,10 @@ "d09f9bc42166908f9161911ea8bcd9d7124284af", [] ], + "select-appearance-sizing-in-flex-ref.html": [ + "66b27ea686ef28c853f53a27aa001237b7420813", + [] + ], "select-appearance-switching-invalidation-ref.html": [ "293653055558e212f9c8cd242b1a571037be9b6b", [] @@ -480895,7 +481651,7 @@ }, "interest-target": { "interesttarget-keyboard-invalidation-ref.html": [ - "76424374fb8cda5ec698e3229eac55570963f3e9", + "0ba07b16f497203f231d03cc7908453c6ccc43c4", [] ], "interesttarget-outline-appearance-ref.html": [ @@ -483427,11 +484183,15 @@ "infrastructure": { "assumptions": { "ahem.html.ini": [ - "8587775d8fc86891605a1509d3062a2c08f56a31", + "ada156a59f5f8fd2cedb0d8648c71f2c4fcaa40f", [] ], "allowed-to-play.html.ini": [ - "6891cbe24e3c124a983939f811e23f23b3b52ed7", + "17ceac0d26dd2368a1e5383dc71d9cebbac595e4", + [] + ], + "canvas-background.html.ini": [ + "198b67c43cd9ee8ff0eef85ea7c3ee41d0689073", [] ], "document-fonts-ready.html.ini": [ @@ -483516,6 +484276,10 @@ [] ] }, + "reftest.www.sub.html.ini": [ + "b6066673120f5622b48397f143f843f032742c04", + [] + ], "reftest_fuzzy_ini_full.html.ini": [ "0ea76527da400b3c4e1c9dbe0ea9b8c837e3eeb9", [] @@ -483585,7 +484349,7 @@ [] ], "testdriver-in-ref.html.ini": [ - "05850761b1649974c759e90293c576b36521b953", + "5dbd6945aa0381f0d56a7d8abc80c72bcd6a2ddb", [] ] }, @@ -483689,21 +484453,21 @@ "bidi": { "bluetooth": { "handle_request_device_prompt.https.html.ini": [ - "1a5ac47c67d942a0123f7d7caa91f7088f66a898", + "fd44ded394bf81019f54cb929e89eb82ac9eb793", [] ], "simulate_adapter.https.html.ini": [ - "1a5ac47c67d942a0123f7d7caa91f7088f66a898", + "feaf5ceae7a8828a6020a0c89730ed0e17a6d4f2", [] ], "simulate_preconnected_peripheral.https.html.ini": [ - "1a5ac47c67d942a0123f7d7caa91f7088f66a898", + "b2c823097f63695eb3567355bcd65bea7df2be7b", [] ] }, "permissions": { "set_permission.https.html.ini": [ - "1a5ac47c67d942a0123f7d7caa91f7088f66a898", + "2101196fa2fe436c3f94c5f84451f1746501c84d", [] ] } @@ -483713,7 +484477,7 @@ [] ], "file_upload.sub.html.ini": [ - "8b7c0f25e6a3bc8d92cf4066c68fbaf3f3d1990d", + "ce88c728e034a87334b2f9b275fbc31160f32222", [] ], "generate_test_report.html.ini": [ @@ -483750,17 +484514,11 @@ "webdriver": { "bidi": { "subscription.html.ini": [ - "1a5ac47c67d942a0123f7d7caa91f7088f66a898", + "2d828266f1083bad6be94d8f7a21cd9f902a7899", [] ], "subscription.window.js.ini": [ - "1a5ac47c67d942a0123f7d7caa91f7088f66a898", - [] - ] - }, - "tests": { - "test_load_file.py.ini": [ - "7e6ef522c9b9544508654f63d12501560625608a", + "1acf3eb9819d860cd03139dd257c0b87389a7461", [] ] } @@ -484454,7 +485212,7 @@ [] ], "dom.idl": [ - "7b4fcb920e2ec67570580b538c13bbaa86985b74", + "253e7bf913eba90db9dc6c2e7e7412dda6f2d493", [] ], "edit-context.idl": [ @@ -484490,7 +485248,7 @@ [] ], "fedcm.idl": [ - "c26e2b14c73ec27cacc6b9126de125e96d3d93d6", + "215f375432e930afb63c26fb9bdc42365ca8c61d", [] ], "fenced-frame.idl": [ @@ -484574,7 +485332,7 @@ [] ], "html.idl": [ - "61378c801d40636f7a4f15ecb19aeb0caf3367fb", + "102149c4dfac2aafb10edc8cfe19d5fa4eba354e", [] ], "idle-detection.idl": [ @@ -484913,6 +485671,10 @@ "6f93db15a74e052913a277e5130226280a3f9311", [] ], + "scoped-custom-elements-registry.tentative.idl": [ + "46ca2d6b9c45805d8aa684af7fe91af6dd5d7919", + [] + ], "screen-capture.idl": [ "db9282ce0a57bb3b84ea45f5ed2d7e69bc3a8a32", [] @@ -484934,7 +485696,7 @@ [] ], "secure-payment-confirmation.idl": [ - "bec599d7a23512f6e608ccb9930bfbf38df83768", + "5b67ca6267839c4c54ba75c55a9da03231642303", [] ], "selection-api.idl": [ @@ -484962,7 +485724,7 @@ [] ], "speech-api.idl": [ - "5bc9df337dd3edf6350e6a19993e6c8561fd99ef", + "0e07b4619a5b80e901f0b8c17a208f9077f9187f", [] ], "storage-access.idl": [ @@ -487143,7 +487905,7 @@ [] ], "largeop.py": [ - "9832ff0039c938ee8ad9cc8983211942b29acc5a", + "625157519483e1bd8100360c51d3097f70e919fc", [] ], "limits.py": [ @@ -487608,7 +488370,7 @@ [] ], "mediasource-util.js": [ - "0bbb6a7386393f9c72e1a353e1db83f3cce0a99e", + "00105238e6bf3e37b3acccc1f78db21809b07fac", [] ], "mp3": { @@ -487631,7 +488393,7 @@ [] ], "test-a-128k-44100Hz-1ch-manifest.json": [ - "f3caa460e9f078278680c6cdb9e1ce914a8c59ae", + "9e448d16f0a9625f03689db4e4427b140e88e28f", [] ], "test-a-128k-44100Hz-1ch.mp4": [ @@ -487639,7 +488401,7 @@ [] ], "test-a-192k-44100Hz-1ch-manifest.json": [ - "41a6f339b79180ba8e811f1c899c0a3cc14f4452", + "1cfeddb8d7db6a9471c85f963b82dcaecdee5787", [] ], "test-a-192k-44100Hz-1ch.mp4": [ @@ -487647,7 +488409,7 @@ [] ], "test-av-384k-44100Hz-1ch-320x240-30fps-10kfr-manifest.json": [ - "7731e3170e5ca52347eff3def8e5409f121b8ace", + "642eae99f22154c85df6e402d634d999b9b7ba93", [] ], "test-av-384k-44100Hz-1ch-320x240-30fps-10kfr.mp4": [ @@ -487655,7 +488417,7 @@ [] ], "test-av-384k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json": [ - "78ded611f682d52e78184a7cbce47f3b102aa7d0", + "6d7d53878d5d7d8f62736d2edc08c312bf181f77", [] ], "test-av-384k-44100Hz-1ch-640x480-30fps-10kfr.mp4": [ @@ -487663,7 +488425,7 @@ [] ], "test-av-448k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json": [ - "ba46349f93ed218d970f3efa8b3e748c016dc70b", + "7b2972b7e04db329c1cfe28c263b2d004cd9d648", [] ], "test-av-448k-44100Hz-1ch-640x480-30fps-10kfr.mp4": [ @@ -487671,7 +488433,7 @@ [] ], "test-av-640k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json": [ - "24da9b4ce3f738c3462be244ee69f41c2e4c2175", + "c04d4d895fb94ed98421b5366d1ee4957b1dd77a", [] ], "test-av-640k-44100Hz-1ch-640x480-30fps-10kfr.mp4": [ @@ -487687,7 +488449,7 @@ [] ], "test-v-128k-320x240-24fps-8kfr-manifest.json": [ - "a31b6d0245ba5de8a59dcdf795ba2ab008647ef4", + "1fd4d41601762287832c221ea45559e0ac093f6a", [] ], "test-v-128k-320x240-24fps-8kfr.mp4": [ @@ -487695,7 +488457,7 @@ [] ], "test-v-128k-320x240-30fps-10kfr-manifest.json": [ - "3e02844105baa629bf438e1a6e9c1cc62ed978b6", + "14eef16f6a68f3c2c2c3fd260c5d0da20138400f", [] ], "test-v-128k-320x240-30fps-10kfr.mp4": [ @@ -487703,7 +488465,7 @@ [] ], "test-v-128k-640x480-30fps-10kfr-manifest.json": [ - "10c4f4bcbdfccae8e5a386831e912867917cc04c", + "75351790503915b3513e92140415cc1861094dab", [] ], "test-v-128k-640x480-30fps-10kfr.mp4": [ @@ -487711,7 +488473,7 @@ [] ], "test-v-256k-320x240-30fps-10kfr-manifest.json": [ - "42d3e1e524ec7f91fd24cfe08d19fe58095356ac", + "5143782ba69d95d80af35d221a609ad666a5afa1", [] ], "test-v-256k-320x240-30fps-10kfr.mp4": [ @@ -487741,7 +488503,7 @@ [] ], "test-a-128k-44100Hz-1ch-manifest.json": [ - "524da8149fe6d36c891501d059f85621f06cde36", + "8c70ccde4bb8208d6a19c661080f93b1d80ee3b6", [] ], "test-a-128k-44100Hz-1ch.webm": [ @@ -487749,7 +488511,7 @@ [] ], "test-a-192k-44100Hz-1ch-manifest.json": [ - "7f2fa1e8c335df16f16c49109088b9a9148c5335", + "1b09316e49257036b8015830a9b85fecad527e2a", [] ], "test-a-192k-44100Hz-1ch.webm": [ @@ -487757,7 +488519,7 @@ [] ], "test-av-384k-44100Hz-1ch-320x240-30fps-10kfr-manifest.json": [ - "af9f07af15db8acb08fec6967a6c92efb62be57e", + "3aa25b78f8b93c075bc36d7c5a0f5f0cd27c6399", [] ], "test-av-384k-44100Hz-1ch-320x240-30fps-10kfr.webm": [ @@ -487765,7 +488527,7 @@ [] ], "test-av-384k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json": [ - "f7ec86b3db9277878705fd1708ec7aeba71d0887", + "58d9fb0e2480554f78419fbfc0b5aa65f0f23c62", [] ], "test-av-384k-44100Hz-1ch-640x480-30fps-10kfr.webm": [ @@ -487773,7 +488535,7 @@ [] ], "test-av-448k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json": [ - "96a59db586ed59bbb308cf4968c9de9907193a73", + "43aa1b8755dff33064a80b9e9c316d313d3ade62", [] ], "test-av-448k-44100Hz-1ch-640x480-30fps-10kfr.webm": [ @@ -487781,7 +488543,7 @@ [] ], "test-av-640k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json": [ - "86723b34a819cf7d3a469abca2ad60ea15a9bf36", + "9b0b98c2051e3d7e4817c66d08a6b54717696bb5", [] ], "test-av-640k-44100Hz-1ch-640x480-30fps-10kfr.webm": [ @@ -487789,7 +488551,7 @@ [] ], "test-v-128k-320x240-24fps-8kfr-manifest.json": [ - "00e103aca9b66d8c6e14a8eeb0fd7888302069f3", + "abc3026c158f8ac3c5eb23c1ffeec89d9281461a", [] ], "test-v-128k-320x240-24fps-8kfr.webm": [ @@ -487797,7 +488559,7 @@ [] ], "test-v-128k-320x240-30fps-10kfr-manifest.json": [ - "fdeeb401d969115e5d3fe178e39d090c7c766496", + "8b52e095c293a441fe97e94a13b5683078b7683b", [] ], "test-v-128k-320x240-30fps-10kfr.webm": [ @@ -487805,7 +488567,7 @@ [] ], "test-v-128k-640x480-30fps-10kfr-manifest.json": [ - "4e304606678160ff875a41f99790be8cba8e7524", + "12926ceb8f0b8045dbe7411685d64315702f5ec9", [] ], "test-v-128k-640x480-30fps-10kfr.webm": [ @@ -487813,7 +488575,7 @@ [] ], "test-v-256k-320x240-30fps-10kfr-manifest.json": [ - "3470674bff5d75daa972e472fb2219287408183d", + "7a437e5f84c0653d43599d8581eebcdbced898c2", [] ], "test-v-256k-320x240-30fps-10kfr.webm": [ @@ -487970,7 +488732,11 @@ "5a2fbb151d9b4eec6f6dc16fc12d8708e01e25d9", [] ] - } + }, + "media-session-artwork-fetch-service-worker.js": [ + "e62b9b4486257d5ae9d4e321bad1e5cc91b14d48", + [] + ] }, "merchant-validation": { "META.yml": [ @@ -489950,7 +490716,7 @@ [] ], "source.html": [ - "cca7063cff44792e7720d431b159a7a6ab798af4", + "56c34fc88148777cfffcb5aa198dafd08046059d", [] ] }, @@ -492971,7 +493737,7 @@ [] ], "webxr-test.js": [ - "15d015debb12089d7bf8972a9393859ccad75aa8", + "41340aa27e09fbd7b5fc848abda0e9464555731e", [] ], "webxr-test.js.headers": [ @@ -493460,7 +494226,7 @@ [] ], "testdriver.js": [ - "460f879878f8322ec2842803636c8585c81c4382", + "f127e2b2c8d9091a767b1ead849af1d18167070f", [] ], "testdriver.js.headers": [ @@ -493480,7 +494246,7 @@ [] ], "testharness.js": [ - "bd668be20f87c8ac8f802f556a2b0d4813b60bd7", + "8ef0574f1f0e1ae72e491a249f719913957073bf", [] ], "testharness.js.headers": [ @@ -496626,7 +497392,7 @@ [] ], "testharness-helpers.js": [ - "b1a5b960e0656ac36e553c70965aebf7b8344c97", + "5f93a25438a0cbf067675d4715e695388dc6c7bc", [] ], "trickle.py": [ @@ -497778,7 +498544,7 @@ [] ], "executor.sub.html": [ - "6563b4fcff74bd7d626237b39ab2cd67460aa8de", + "6e4f18ba85405fc5688f6af1b8e7c89f6262576d", [] ], "executor.sub.html.headers": [ @@ -498398,6 +499164,10 @@ "c3c5b6c0b073d0c0c15bfb6d78ef2335bd228034", [] ], + "blob-url-creation.html": [ + "fe3e169b5c4620ea8abbfb45964f7d36e08b785e", + [] + ], "echo-cookie-header.py": [ "0d84b0edd183c8bd0850c917010f3362fd8b69f6", [] @@ -498446,6 +499216,10 @@ "6909fd896ede888ec664f6414e993ce4aeba9eaa", [] ], + "iframe-creation.sub.html": [ + "2927866bdf15755158e7a0a29c2463ff28c55575", + [] + ], "nested-handle-storage-access-headers.py": [ "db0bf34357382e15d99e7a9045437be214a58064", [] @@ -498503,11 +499277,11 @@ [] ], "storage-access-beyond-cookies-iframe-iframe.html": [ - "9c0bd0194accfb9cd15f5d80707919e54c497c62", + "8b3720a6354ef574b1d7fa80e5bbd401732391be", [] ], "storage-access-beyond-cookies-iframe.sub.html": [ - "45fd60b834ae5f9c1d6741f0fb3fb5515f79047a", + "6c60c962b1ba323c61f3fc9b7381597831234382", [] ] } @@ -498749,7 +499523,11 @@ "93f801a4f8da06b61f497ea8152de59646e57b72", [] ] - } + }, + "viewBox-synthesized-in-img-001-ref.html": [ + "dc27ce9a4e8c5af5ea6ad05599d723fcd7928246", + [] + ] }, "crashtests": { "support": { @@ -499681,6 +500459,22 @@ "green-100x100.svg": [ "120941444a4898197d6b6001f9908a6cd48b62ba", [] + ], + "inner-svg-rotate-transform-ref.svg": [ + "6c09ab219c6b871d9812320dcedcdc2814d48131", + [] + ], + "inner-svg-transform-and-viewbox-ref.svg": [ + "b6d245fd4da176f5180dc10854b38b3aea5bb161", + [] + ], + "inner-svg-transform-ref.svg": [ + "c717788d91a82d3bae02ebdd0ae9fcd94ec09d04", + [] + ], + "outer-svg-transform-ref.svg": [ + "55a74fe29d2c4e7e2ba11faf0af6865fdcd6ee9f", + [] ] }, "support": { @@ -499724,6 +500518,10 @@ "1eb11bfbfb4271442c83a99e81a8a44ad8c1d1da", [] ], + "sprites-without-id.svg": [ + "120941444a4898197d6b6001f9908a6cd48b62ba", + [] + ], "sprites.svg": [ "f73b8851913f402aa41adac40360b15acbad1119", [] @@ -500063,11 +500861,11 @@ [] ], "cacert.key": [ - "dd47af3f939c7dd3479810a82670c4c3f3cd212e", + "26e5b3577da799fdeb8fdd5b7d645fcf1925d40a", [] ], "cacert.pem": [ - "7b3fb3da14d0d228bfc83a58affd11b535ab0b69", + "18255d049619f0c68037c521077619c588482786", [] ], "config.json": [ @@ -500075,11 +500873,11 @@ [] ], "web-platform.test.key": [ - "4f68bb3caa0ddaef5799966bb88477273bbdcc0d", + "2516ae7459387b16b6075b177c3bbbdd77679f9a", [] ], "web-platform.test.pem": [ - "02a2d94e935ab6c760b282665d3ec409d51a739e", + "ad77f3e9e14a4c542b04495535c40555f8474fc7", [] ] }, @@ -511108,7 +511906,7 @@ ], "webdriver": { "__init__.py": [ - "eb03184974682da2f869935641e2670c3e9a91dd", + "53e53b9ac269a16bfa793ae847c85b8f2d4464fd", [] ], "bidi": { @@ -511192,7 +511990,7 @@ ] }, "client.py": [ - "97b29c64bcd6e3868b6554570a4505606c5c3413", + "5a54bf66ac6bf58bf2953bc99cabfd966c91907c", [] ], "error.py": [ @@ -511295,7 +512093,7 @@ [] ], "revlist.py": [ - "e9fea30522085a461caaf61986868b6f53ce0ced", + "ef8dbf043fee0df11e90d88e21af534f1f6e6c3a", [] ], "run.py": [ @@ -511509,7 +512307,7 @@ [] ], "chrome.py": [ - "1ef583007d42c87c485d26838fb752101214c8a6", + "24723734211065c358566f7e48495f3607bdfc9f", [] ], "chrome_android.py": [ @@ -511521,7 +512319,7 @@ [] ], "chrome_spki_certs.py": [ - "875ae3ea4a7ea7e1241023e9b31b097c1d44e2c4", + "f1e7df1d4c7d2cbbf6987eff133f1851c44a147f", [] ], "chromium.py": [ @@ -511537,7 +512335,7 @@ [] ], "firefox.py": [ - "b4262ace8c9571474b627c62374c0326442946be", + "494a7514efda2f2607c7394bca5ff9ddb19adf51", [] ], "firefox_android.py": [ @@ -511609,7 +512407,7 @@ [] ], "actions.py": [ - "10b5eeb6b94efcb5671ac26ddbe58584fbed248e", + "b093b0355d357f1584dae9d0dd89cb530545148d", [] ], "asyncactions.py": [ @@ -511629,7 +512427,7 @@ [] ], "executormarionette.py": [ - "110466e47abddc8ab75b99161cba30d11988d703", + "08bc02cbc3c0278ed33feb35b22569c73afa0a44", [] ], "executorselenium.py": [ @@ -511645,7 +512443,7 @@ [] ], "executorwebdriver.py": [ - "45ddb57c9ae25eab0bcd38a54646bcc7da7ec178", + "123c89c98b21e9ec2616c6bfad3d91c5069ee89c", [] ], "executorwktr.py": [ @@ -511661,7 +512459,7 @@ [] ], "protocol.py": [ - "5190b2664015ea2835a82129658e70c806f1dd04", + "7630fe1f3580f6cbb3554e89e05ab34c2fa3ee8e", [] ], "pytestrunner": { @@ -511776,7 +512574,7 @@ [] ], "testdriver-extra.js": [ - "5d37cf5e15f47998da3294989bd4b7c87795648c", + "d83ba4192eb52487bf9265a5c2eea22f21e49c64", [] ], "testdriver-vendor.js": [ @@ -513677,7 +514475,7 @@ }, "scripts": { "ATTAcomm.js": [ - "b748233fc22c43153212e8a495cdce3b48425fd9", + "61ce6e5e6f115ac499222b9f476a0e5aa1d5e250", [] ], "aria-utils.js": [ @@ -513861,7 +514659,7 @@ [] ], "testharness.js": [ - "fdd87e8fc2a19e60c457bf3e3342f060cc35784e", + "7c1ded21d0e266612d49cfe9eef89c24f704cf84", [] ], "testharnessreport.js": [ @@ -514740,7 +515538,7 @@ [] ], "README.md": [ - "c41e0e048efe704917b05894ab72c3f60f5a9a97", + "7526978c1f8e357e99e2e9bd4d47af8c43cd60b2", [] ], "WEB_FEATURES.yml": [ @@ -515439,7 +516237,7 @@ [] ], "audionodeoptions.js": [ - "3b7867cabf1c6068d8185ce52b51b43d1f5b18f6", + "ef2dab672b3b3f1071d3febebc2bd3fc02196d38", [] ], "audioparam-testing.js": [ @@ -515590,7 +516388,7 @@ [] ], "automation-rate-testing.js": [ - "43279f91d68d3c5e2d7a086c739c838b31dc7335", + "e06a1d456144289fb54aa1020316511208167517", [] ], "retrospective-test.js": [ @@ -516414,11 +517212,11 @@ ], "set_geolocation_override": { "__init__.py": [ - "56b5a075d93690a43183cb75b280ed905b478e7d", + "33dcca90f047b58e9026a104b99f537678191666", [] ], "conftest.py": [ - "c986271d05b8e99e520035f1fe8301c657053da1", + "a90895c74ed90c04b5f181af22c3bddec9ac132d", [] ] } @@ -517400,6 +518198,10 @@ "438f39aa0fa6af5ebc3045034ba24f2054e613f7", [] ], + "geolocation_override.py": [ + "038e947f7aa00fa08afe0156bd8037c74034809d", + [] + ], "headers.py": [ "cb8d18d964416a5db9f98bcc273762e47bc10c81", [] @@ -540167,7 +540969,7 @@ ] ], "worker-termination-aborts-upgrade.window.js": [ - "e84ca2c2a644abe87f16aaa789eab40bb2c6fd64", + "c2d8d91787e9b0487f46dc1c57df9552d678c59f", [ "IndexedDB/worker-termination-aborts-upgrade.window.html", { @@ -548904,6 +549706,15 @@ } ] ], + "comp_labeledby_non_standard.html": [ + "f86a62b34ef31d0949ea082fd243463865431c7b", + [ + null, + { + "testdriver": true + } + ] + ], "comp_labelledby.html": [ "26c2f5e5005cb9041e2e0b724f676a8e54ec035d", [ @@ -549004,8 +549815,41 @@ }, "ai": { "language_detection": { + "detector-iframe.tentative.https.html": [ + "3e90d36b5aa63a556b82337cdf7a26410b80ac36", + [ + null, + {} + ] + ], + "detector-locale.https.tentative.any.js": [ + "1991ac3ecfb5259c15b9e561138e8b9c6efebe6c", + [ + "ai/language_detection/detector-locale.https.tentative.any.html", + { + "script_metadata": [ + [ + "title", + "Detect english" + ], + [ + "global", + "window" + ], + [ + "script", + "../resources/util.js" + ], + [ + "script", + "../resources/locale-util.js" + ] + ] + } + ] + ], "detector.https.tentative.any.js": [ - "8e4bedd05bbbf077e2b27db47a9d6a023998b163", + "bdff2364b0b884047bcc8027f82bc762eb28ef9b", [ "ai/language_detection/detector.https.tentative.any.html", { @@ -549164,15 +550008,194 @@ } ] ], - "summarizer-streaming.tentative.https.any.js": [ - "6a1ff8b5a695ba42b1e4577690c2195f28a293ce", + "summarizer-availability-available.tentative.https.any.js": [ + "31c21ca777fb09fc8058b57d5d8230d3f3798410", + [ + "ai/summarizer/summarizer-availability-available.tentative.https.any.html", + { + "script_metadata": [ + [ + "title", + "Summarizer Availability Available" + ], + [ + "script", + "../resources/util.js" + ], + [ + "timeout", + "long" + ] + ], + "timeout": "long" + } + ], + [ + "ai/summarizer/summarizer-availability-available.tentative.https.any.worker.html", + { + "script_metadata": [ + [ + "title", + "Summarizer Availability Available" + ], + [ + "script", + "../resources/util.js" + ], + [ + "timeout", + "long" + ] + ], + "timeout": "long" + } + ] + ], + "summarizer-availability.tentative.https.any.js": [ + "8691765f6933a576711282750b0d7ebca99e98e8", + [ + "ai/summarizer/summarizer-availability.tentative.https.any.html", + { + "script_metadata": [ + [ + "title", + "Summarizer Availability" + ], + [ + "script", + "../resources/util.js" + ], + [ + "timeout", + "long" + ] + ], + "timeout": "long" + } + ], + [ + "ai/summarizer/summarizer-availability.tentative.https.any.worker.html", + { + "script_metadata": [ + [ + "title", + "Summarizer Availability" + ], + [ + "script", + "../resources/util.js" + ], + [ + "timeout", + "long" + ] + ], + "timeout": "long" + } + ] + ], + "summarizer-create-available.tentative.https.any.js": [ + "c7e27d9766bee9b62d7b8463654dfea7536cb338", + [ + "ai/summarizer/summarizer-create-available.tentative.https.any.html", + { + "script_metadata": [ + [ + "title", + "Summarizer Create Available" + ], + [ + "script", + "../resources/util.js" + ], + [ + "timeout", + "long" + ] + ], + "timeout": "long" + } + ], + [ + "ai/summarizer/summarizer-create-available.tentative.https.any.worker.html", + { + "script_metadata": [ + [ + "title", + "Summarizer Create Available" + ], + [ + "script", + "../resources/util.js" + ], + [ + "timeout", + "long" + ] + ], + "timeout": "long" + } + ] + ], + "summarizer-create.tentative.https.any.js": [ + "328cceefefb11dab0844cfee5773a5194aabd52e", + [ + "ai/summarizer/summarizer-create.tentative.https.any.html", + { + "script_metadata": [ + [ + "title", + "Summarizer Create" + ], + [ + "script", + "../resources/util.js" + ], + [ + "timeout", + "long" + ] + ], + "timeout": "long" + } + ], + [ + "ai/summarizer/summarizer-create.tentative.https.any.worker.html", + { + "script_metadata": [ + [ + "title", + "Summarizer Create" + ], + [ + "script", + "../resources/util.js" + ], + [ + "timeout", + "long" + ] + ], + "timeout": "long" + } + ] + ], + "summarizer-iframe.tentative.https.html": [ + "219811c8831e4008726a6507810405e69756fbd6", + [ + null, + {} + ] + ], + "summarizer-measureInputUsage.tentative.https.any.js": [ + "ce9745acf173c8d94a52427446460a47c6fbb378", [ - "ai/summarizer/summarizer-streaming.tentative.https.any.html", + "ai/summarizer/summarizer-measureInputUsage.tentative.https.any.html", { "script_metadata": [ [ "title", - "Summarizer Streaming" + "Summarizer measureInputUsage" ], [ "script", @@ -549187,12 +550210,12 @@ } ], [ - "ai/summarizer/summarizer-streaming.tentative.https.any.worker.html", + "ai/summarizer/summarizer-measureInputUsage.tentative.https.any.worker.html", { "script_metadata": [ [ "title", - "Summarizer Streaming" + "Summarizer measureInputUsage" ], [ "script", @@ -549207,15 +550230,15 @@ } ] ], - "summarizer.tentative.https.any.js": [ - "50ad4d23709573a50ff2b2b34cf884522ff587cf", + "summarizer-summarize-streaming.tentative.https.any.js": [ + "b88ccb325e2c3ec3e4f9a41986b5a7c7c5e2b91d", [ - "ai/summarizer/summarizer.tentative.https.any.html", + "ai/summarizer/summarizer-summarize-streaming.tentative.https.any.html", { "script_metadata": [ [ "title", - "Summarizer" + "Summarizer Summarize Streaming" ], [ "script", @@ -549230,12 +550253,55 @@ } ], [ - "ai/summarizer/summarizer.tentative.https.any.worker.html", + "ai/summarizer/summarizer-summarize-streaming.tentative.https.any.worker.html", { "script_metadata": [ [ "title", - "Summarizer" + "Summarizer Summarize Streaming" + ], + [ + "script", + "../resources/util.js" + ], + [ + "timeout", + "long" + ] + ], + "timeout": "long" + } + ] + ], + "summarizer-summarize.tentative.https.any.js": [ + "f019746fbdd8f59664a23290b0d914177bcc98dd", + [ + "ai/summarizer/summarizer-summarize.tentative.https.any.html", + { + "script_metadata": [ + [ + "title", + "Summarizer Create Available" + ], + [ + "script", + "../resources/util.js" + ], + [ + "timeout", + "long" + ] + ], + "timeout": "long" + } + ], + [ + "ai/summarizer/summarizer-summarize.tentative.https.any.worker.html", + { + "script_metadata": [ + [ + "title", + "Summarizer Create Available" ], [ "script", @@ -557242,7 +558308,7 @@ } ] ], - "clear-cache-partitioning.https.html": [ + "clear-cache-partitioning.tentative.https.html": [ "2deadeef2d0853d08a559a9af8050646fb8e3163", [ null, @@ -570915,6 +571981,13 @@ } ] ], + "cookieStore_delete.sub.https.html": [ + "8cdfae6776dd88183479f7c1378be814f8c66105", + [ + null, + {} + ] + ], "cookieStore_delete_arguments.https.any.js": [ "37a551b3a9f2511d915bb06b4d2311e3e7979ae2", [ @@ -572720,7 +573793,7 @@ ] ], "non-fully-active.https.html": [ - "508b4325d78b6565f4e0b9b79420b9523a327d83", + "a0a76f0fce102c53fe101ba38d1fbff76d934865", [ null, { @@ -575648,7 +576721,7 @@ ] ], "anchor-size-parse-valid.html": [ - "8e69476512b61d579b3d68927b93c6dda7444bd4", + "312d3c71801353728feeb62f66b8cf658c6f084d", [ null, {} @@ -576993,7 +578066,7 @@ ] ], "animation-range-start-valid.html": [ - "bb1dbe35c04306c96ec4145524492459aaa9d50d", + "311df59b51bfff963a13f1ec15f79a27608bd780", [ null, {} @@ -577056,7 +578129,7 @@ ] ], "animation-trigger-exit-range-start-valid.html": [ - "a9c7b21dc9528a9f6f9a413162a2a17e3f6e9f8a", + "881ad833c4b1427c9c1ff118ded4e27d07557e27", [ null, {} @@ -577105,7 +578178,7 @@ ] ], "animation-trigger-range-start-valid.html": [ - "d48151b6db07693ee7157b44477be8630905a07a", + "6a091fa4d07bd390c56f148977b74a92b5dc7e0c", [ null, {} @@ -580255,7 +581328,7 @@ ] ], "color-valid-relative-color.html": [ - "142f96bcf9b562e399b9b47b5cf1babadcb2ad72", + "f1f31b93d414df9198c9a6612a543ffe79b11afe", [ null, {} @@ -580436,7 +581509,7 @@ }, "css-color-hdr": { "computed.html": [ - "47021144087d8fe6976ee7a06a187e85665b8fdf", + "38a540bd66a91c293d81fd30f4c1cdf47145792c", [ null, {} @@ -580457,7 +581530,7 @@ ] ], "parsing.html": [ - "e165a60d7edb9f7599608f6d4749ca640bfa9635", + "2447891f2c4b163cc30eaaa2c6542d9a80a2b4cf", [ null, {} @@ -586539,23 +587612,39 @@ }, "css-gaps": { "tentative": { + "grid": { + "grid-gap-decorations-028.html": [ + "125a34ca9668ecfc430f76e26365c62da17e3b4b", + [ + null, + {} + ] + ] + }, "parsing": { + "gap-decorations-bidirectional-shorthands.html": [ + "95b5bf6aea84bc27e728b67cfd98ab9842997cbe", + [ + null, + {} + ] + ], "gap-decorations-color-computed.html": [ - "3ef68de73922e853c4d3aa938876064e4b1b6738", + "fbc3c3f4c976b344d48a9bd927547214f072e3ab", [ null, {} ] ], "gap-decorations-color-invalid.html": [ - "e553d24ea7b8bd7aa85bb10dadd1d285f0c2cc56", + "5a0128e2303ebaef9469330ddfdb290ebeeff912", [ null, {} ] ], "gap-decorations-color-valid.html": [ - "af24afc3c98a40a2201e3c09f954bca6771a4454", + "f4cc0156e3f432d6193c1041d65077295496f1c3", [ null, {} @@ -586583,21 +587672,21 @@ ] ], "gap-decorations-width-computed.html": [ - "f24565ba5eede88234d1b8eb3346aa4cfc44a7d5", + "299cbe0f3bbd8bc495912e59f6866b19513da914", [ null, {} ] ], "gap-decorations-width-invalid.html": [ - "902c619affb079feae0dcc6ac0561ee958a1a367", + "025d52636266b1961cd5c0295a552eb612cf6455", [ null, {} ] ], "gap-decorations-width-valid.html": [ - "05d45123fcec5cc595673eceaf05e67b8c430cef", + "bd42d8356234cd51968877986b1927c7af301a12", [ null, {} @@ -586666,6 +587755,15 @@ {} ] ] + }, + "serialization": { + "gap-decorations-properties.html": [ + "4985b5550f25f0ee0a2be125900f16c65c6ec0cf", + [ + null, + {} + ] + ] } } }, @@ -590052,7 +591150,7 @@ ] ], "grid-columns-rows-get-set-multiple.html": [ - "99af0110be7d14ae6a61f612cebf02c4a86be76b", + "c08290af9d573f58299e0a0dc92ec34528de4eb9", [ null, {} @@ -590639,7 +591737,7 @@ ] ], "image-set-parsing.html": [ - "83c0d73ab95439a806da2932f24a961c4cc5bf3a", + "ee57c8599eb421ff5559c2af2aafd791ba948b55", [ null, {} @@ -593909,7 +595007,7 @@ ] }, "resizer-no-size-change.tentative.html": [ - "a8c659dc48d0f83e025c9f7f4abd5c24e3c3aa54", + "61b149e1da10717a93a218eb00ee9779398d4551", [ null, { @@ -593918,7 +595016,7 @@ ] ], "resizer-transform.tentative.html": [ - "7b1af7f8f9029b2e0a98a2f1a45390d28495e24a", + "8dfeac2d35b681235dba80cbcc7d4b3a30ec0316", [ null, { @@ -594148,6 +595246,24 @@ } ] ], + "scroll-marker-inert-001.html": [ + "612a4cb9f4b38d2de37ad7cd5f802c6ea5b7be32", + [ + null, + { + "testdriver": true + } + ] + ], + "scroll-marker-inert-002.html": [ + "bf56426dea36459b427378419d4db6ee24409647", + [ + null, + { + "testdriver": true + } + ] + ], "scroll-marker-navigation-cycles.html": [ "d41b720ed9252b78845efb473d566f447ce71991", [ @@ -606825,7 +607941,7 @@ ] ], "cssTransformValue.tentative.html": [ - "89330b8e1c0c21dd598eb26d7a311dcf8a43ad2c", + "7f9edda3939e559cf4bd4c041dc2a06b80cf69df", [ null, {} @@ -609776,6 +610892,15 @@ ] ] }, + "resize-iframe-3d-transform.tentative.html": [ + "50c894084c7efbfed761a321458a92d8d07620a1", + [ + null, + { + "testdriver": true + } + ] + ], "resize-interactive.html": [ "2a2332d3ef58184aa55114758fa219a51f8fbd78", [ @@ -609785,6 +610910,33 @@ } ] ], + "resize-textarea-relative-to-right-001.tentative.html": [ + "95a0bf189ec32edb445d4a6d81ec97f7092592f1", + [ + null, + { + "testdriver": true + } + ] + ], + "resize-textarea-rtl-001.tentative.html": [ + "dab08fb7514352d123a4cc9a70d4e291f94d8f79", + [ + null, + { + "testdriver": true + } + ] + ], + "resize-textarea-rtl-002.tentative.html": [ + "1715df3bb47d2e5ce7cdf4452e765b79eba424c9", + [ + null, + { + "testdriver": true + } + ] + ], "text-overflow-017.html": [ "7f61a57620c126c9ee99c7a2d41b567d84506bf1", [ @@ -609892,7 +611044,7 @@ ] ], "acos-asin-atan-atan2-computed.html": [ - "76033289a2cef095392731b00e46e732f2e7f4d8", + "cacee588f3cbd6c6342960fab8d7e37f061ca906", [ null, {} @@ -610178,7 +611330,7 @@ ] ], "calc-size-interpolation-expansion.html": [ - "354d108f1daa5a020aa4499933bf1d965dd6573b", + "c3de4d7ab9e1c88ab450c3914039d7fa452bc5f9", [ null, {} @@ -610328,14 +611480,14 @@ ] ], "calc-size-parsing.html": [ - "6db2635e5ef7a841c84ba1ccf379bddb12192da7", + "3d63f0dbe00de8dba9c6701a18044e96a67172cd", [ null, {} ] ], "calc-size-typed-om.html": [ - "8f9600e26a9c2a06e4c6ccf81fe3c040598e0905", + "37400823f9d2ef81fa25442db0835c7d22691b34", [ null, {} @@ -610469,7 +611621,7 @@ ] ], "exp-log-compute.html": [ - "9efc1a7721c754828380deb61b530950f7efcea2", + "4bdd507fa33d90ece79a17560f39b90e03a0d536", [ null, {} @@ -610532,7 +611684,7 @@ ] ], "hypot-pow-sqrt-computed.html": [ - "6ac416c0f5b35b1123722e945bcbc73d6b9de68b", + "19ce1c2d49dfe015126ba5c11a3f4058b7401ebb", [ null, {} @@ -610833,21 +611985,23 @@ ] ], "random-computed.tentative.html": [ - "c6a408040cec4edbf5da1170a3c14594f0e12092", + "b0539acf5936d9bb742f855cae986ee591a919f4", [ null, - {} + { + "timeout": "long" + } ] ], "random-invalid.tentative.html": [ - "f21d36077dc777ace3b2a73d8b7c8bb0fd26fe6c", + "dd428868a2d0172c1cb0263e3467adab1e069b22", [ null, {} ] ], "random-serialize.tentative.html": [ - "43dc3a3f67760316bbdf3c926ffa0a4c9e893450", + "5c0b9601da055ca9a54231080df17b44a602d6dd", [ null, {} @@ -610966,7 +612120,7 @@ ] ], "sin-cos-tan-computed.html": [ - "a19b118f75489d9f9e1ad5b7a6f65d2318f183d8", + "80b4d1972f6b2c0ac38baba22ba7d1cc94eb321e", [ null, {} @@ -611079,6 +612233,27 @@ null, {} ] + ], + "url-request-modifiers-computed.sub.html": [ + "bc8c4ad95df7a33a64b92d240cf68d14594745b2", + [ + null, + {} + ] + ], + "url-request-modifiers-invalid.sub.html": [ + "c30edfbaeaae9f3a610c5c6e12becdae85ff1ebb", + [ + null, + {} + ] + ], + "url-request-modifiers-serialize.sub.html": [ + "cca9f2ccf9b04719e8266d56fde09fb0154fcb47", + [ + null, + {} + ] ] }, "various-values-important.html": [ @@ -611870,7 +613045,7 @@ ] ], "only-child-group.html": [ - "551e8816116c9b54f35dc2afbff57eb5460251f5", + "970a5a501144ddf68cd9d34294a0d48a05a57e4c", [ null, {} @@ -616145,7 +617320,7 @@ ] ], "offset-path-interpolation-008.html": [ - "2af20f78d1f641f49c77afb53eb992705b406504", + "5fb7c7c333c89f4107e2824390c73862be8107d0", [ null, {} @@ -616287,14 +617462,14 @@ ] ], "offset-path-shape-computed.html": [ - "8904eaf16a2771e5a42f5ff9b2d4a5623fe6066b", + "c9ecc3acb06c065913f8b7538fdf81bff6c802df", [ null, {} ] ], "offset-path-shape-parsing.html": [ - "6ca288b660e4a322f7585feba86a776674fa9732", + "013cea2c8211d97a5e90c42379cf5aadfe8b59fd", [ null, {} @@ -618335,36 +619510,6 @@ {} ] ], - "custom-element-registry": { - "define-customized-builtins.html": [ - "b691033871c05b680c13dca7e7cae0f25962f2af", - [ - null, - {} - ] - ], - "define.html": [ - "d3d923bd916fd04576d0de1d809e43a5395b9edb", - [ - null, - {} - ] - ], - "per-global.html": [ - "3570dcf811dbac33ecf60cd845f5b287f65ea550", - [ - null, - {} - ] - ], - "upgrade.html": [ - "e020d95a576852b8a95c1f72a6061571efb6a4af", - [ - null, - {} - ] - ] - }, "customized-built-in-constructor-exceptions.html": [ "fbc1a6fd87480db9f6f90bf78bbe2aabf8a57f83", [ @@ -619074,50 +620219,50 @@ ] ] }, - "revamped-scoped-registry": { - "Construct.tentative.html": [ + "registries": { + "Construct.html": [ "a5e825f439a1f38772f5aa5713d959da970a3412", [ null, {} ] ], - "CustomElementRegistry-define.tentative.html": [ + "CustomElementRegistry-define.html": [ "9ade81bef0ca59a46310c0c19c6f0c1cf0c78168", [ null, {} ] ], - "CustomElementRegistry-initialize.tentative.html": [ + "CustomElementRegistry-initialize.html": [ "142dc56746c4fa3766285796f37cbb91bb8a745c", [ null, {} ] ], - "CustomElementRegistry-multi-register.tentative.html": [ + "CustomElementRegistry-multi-register.html": [ "bd97017308ae627d4922d7818b8d4e6530680e62", [ null, {} ] ], - "CustomElementRegistry-upgrade.tentative.html": [ + "CustomElementRegistry-upgrade.html": [ "0f7a7a835bec5010195bc30f92bdb2f078ddf409", [ null, {} ] ], - "Document-createElement.tentative.html": [ + "Document-createElement.html": [ "c3dd6d9b85782672f3ec97bebf8288c8fe9756f0", [ null, {} ] ], - "Document-createElementNS.tentative.html": [ + "Document-createElementNS.html": [ "d9b21113339505b97fc1bf3f7fabdf51f806e574", [ null, @@ -619131,91 +620276,150 @@ {} ] ], - "Document-importNode.tentative.html": [ + "Document-importNode.html": [ "149a135c41ce80c01ae2d2f1eacbf0eb9365ceb9", [ null, {} ] ], - "Element-customElementRegistry-exceptions.tentative.html": [ + "Element-customElementRegistry-exceptions.html": [ "fb213b1d15ac81bff4feb345d6fdcaa082c1e48b", [ null, {} ] ], - "Element-customElementRegistry.tentative.html": [ + "Element-customElementRegistry.html": [ "72e54bdbaabd1a70aa7b0d1e2bebb767f63f576a", [ null, {} ] ], - "Element-innerHTML.tentative.html": [ + "Element-innerHTML.html": [ "c4f3ad34ddf7573ba8b0154eadc32432ad92c65e", [ null, {} ] ], - "ShadowRoot-init-customElementRegistry.tentative.html": [ + "ShadowRoot-init-customElementRegistry.html": [ "bbf1b414aa0df9ecef458a773d903fd446b5b037", [ null, {} ] ], - "ShadowRoot-innerHTML.tentative.html": [ + "ShadowRoot-innerHTML.html": [ "0d4be66544007805484e7871b64c22d68880c55c", [ null, {} ] ], - "constructor-reentry-with-different-definition.tentative.html": [ + "constructor-reentry-with-different-definition.html": [ "ef104ebe4c1df1affe6540dae1138e40b724432e", [ null, {} ] ], - "initial-about-blank.tentative.window.js": [ + "define-customized-builtins.html": [ + "b691033871c05b680c13dca7e7cae0f25962f2af", + [ + null, + {} + ] + ], + "define.html": [ + "d3d923bd916fd04576d0de1d809e43a5395b9edb", + [ + null, + {} + ] + ], + "initial-about-blank.window.js": [ "b3bb7e139b5c543bae2d4cc86d3f5ebe1fe197f1", [ - "custom-elements/revamped-scoped-registry/initial-about-blank.tentative.window.html", + "custom-elements/registries/initial-about-blank.window.html", + {} + ] + ], + "per-global.html": [ + "3570dcf811dbac33ecf60cd845f5b287f65ea550", + [ + null, + {} + ] + ], + "pseudo-class-defined.window.js": [ + "71c0459e39cb0e06ef1780adbd964b8b25d1bc57", + [ + "custom-elements/registries/pseudo-class-defined.window.html", {} ] ], - "scoped-registry-define-upgrade-criteria.tentative.html": [ + "scoped-registry-define-upgrade-criteria.html": [ "9c9b076aa8d615c43fecaa77c62e404739db8cfc", [ null, {} ] ], - "scoped-registry-define-upgrade-order.tentative.html": [ + "scoped-registry-define-upgrade-order.html": [ "d115522a7b8e19dbbeaea3bcc88121df0d7b4384", [ null, {} ] ], - "scoped-registry-registry-define-get-etc.tentative.html": [ + "scoped-registry-registry-define-get-etc.html": [ "29e11d97052c0683d92089583957c8217a98fa4f", [ null, {} ] ], - "template.tentative.window.js": [ + "template.window.js": [ "7d442a618f846ef30fde5c655e8127028e01beea", [ - "custom-elements/revamped-scoped-registry/template.tentative.window.html", + "custom-elements/registries/template.window.html", + {} + ] + ], + "upgrade.html": [ + "e020d95a576852b8a95c1f72a6061571efb6a4af", + [ + null, {} ] ] }, + "revamped-scoped-registry": { + "idlharness.tentative.window.js": [ + "1f5c776cc2513e651de15b85884ba785027e59b6", + [ + "custom-elements/revamped-scoped-registry/idlharness.tentative.window.html", + { + "script_metadata": [ + [ + "script", + "/resources/WebIDLParser.js" + ], + [ + "script", + "/resources/idlharness.js" + ], + [ + "global", + "window,dedicatedworker,shadowrealm-in-window" + ] + ] + } + ] + ] + }, "state": { "ElementInternals-states.html": [ "1521a8098a36f0c0339fc1e7dceac12d149de385", @@ -619770,7 +620974,7 @@ ] ], "non-fully-active.https.html": [ - "9e617827f6468dfe1b7d91fb2d47db4193f69143", + "3c09b132daf76ec719cadf2fc741d60a2a8d0df2", [ null, { @@ -623580,7 +624784,7 @@ ] ], "attributes-namednodemap.html": [ - "96f9d30703b01dfe446a9acb37ff07a5a1da0cb0", + "0b631c1fb93d9ff32fa012540630791326508269", [ null, {} @@ -624453,7 +625657,7 @@ ] ], "observable-from.any.js": [ - "b5fcb5ed1fc6c89725d3bd26f2702b8156fb159d", + "3caf99052c84162043cbada1dea784a3d0885676", [ "dom/observable/tentative/observable-from.any.html", {} @@ -625071,6 +626275,13 @@ ] ], "xslt": { + "document-element.window.js": [ + "4079533c1e0d9b62bf3d9b244101b6850c9e3935", + [ + "dom/xslt/document-element.window.html", + {} + ] + ], "document-function.window.js": [ "a01f3b37c945d0fcded4a0853d32e97d60bb9696", [ @@ -626230,6 +627441,15 @@ } ] ], + "insert-space-at-beginning-of-wrapped-line.html": [ + "6afedff12b5e89cf02414c1d5821c7d5fe102529", + [ + null, + { + "testdriver": true + } + ] + ], "insert-text-in-void-element.tentative.html": [ "f84d3fce036981bb441e6e5b989341627a166b23", [ @@ -627070,7 +628290,7 @@ ] ], "insertparagraph-in-non-splittable-element.html": [ - "c77862fecb297e86cbe3605057646cc1238fa1d7", + "5ee721758309614a35ea6c385ec60a7d02e0a154", [ null, { @@ -628843,6 +630063,13 @@ } ] ], + "shadow_root_iteration_in_block_style.html": [ + "2a7d8ac178e80d06b6c9384ba32f0056aa9e28b6", + [ + null, + {} + ] + ], "typing-around-link-element-after-joining-paragraphs.html": [ "4934530c9b842dfe9e1259c0d7541427279eb2f2", [ @@ -650216,7 +651443,7 @@ ] ], "mime-type.any.js": [ - "67c9af7da2dd539c219bc5848af45e6baaae65a9", + "ed19309bdb24f199d3a985ec8c1de9a5452a28f3", [ "fetch/api/body/mime-type.any.html", {} @@ -659406,6 +660633,137 @@ } ] ], + "no-vary-search.tentative.any.js": [ + "379da6a059491f89b2cd1dd2e28a6e84144740ce", + [ + "fetch/http-cache/no-vary-search.tentative.any.html", + { + "script_metadata": [ + [ + "global", + "window,worker" + ], + [ + "title", + "NoVarySearch HTTP Cache" + ], + [ + "timeout", + "long" + ], + [ + "script", + "/common/utils.js" + ], + [ + "script", + "/common/get-host-info.sub.js" + ], + [ + "script", + "http-cache.js" + ] + ], + "timeout": "long" + } + ], + [ + "fetch/http-cache/no-vary-search.tentative.any.serviceworker.html", + { + "script_metadata": [ + [ + "global", + "window,worker" + ], + [ + "title", + "NoVarySearch HTTP Cache" + ], + [ + "timeout", + "long" + ], + [ + "script", + "/common/utils.js" + ], + [ + "script", + "/common/get-host-info.sub.js" + ], + [ + "script", + "http-cache.js" + ] + ], + "timeout": "long" + } + ], + [ + "fetch/http-cache/no-vary-search.tentative.any.sharedworker.html", + { + "script_metadata": [ + [ + "global", + "window,worker" + ], + [ + "title", + "NoVarySearch HTTP Cache" + ], + [ + "timeout", + "long" + ], + [ + "script", + "/common/utils.js" + ], + [ + "script", + "/common/get-host-info.sub.js" + ], + [ + "script", + "http-cache.js" + ] + ], + "timeout": "long" + } + ], + [ + "fetch/http-cache/no-vary-search.tentative.any.worker.html", + { + "script_metadata": [ + [ + "global", + "window,worker" + ], + [ + "title", + "NoVarySearch HTTP Cache" + ], + [ + "timeout", + "long" + ], + [ + "script", + "/common/utils.js" + ], + [ + "script", + "/common/get-host-info.sub.js" + ], + [ + "script", + "http-cache.js" + ] + ], + "timeout": "long" + } + ] + ], "partial.any.js": [ "3f23b5930f73799cc6b0029527e800b69774904d", [ @@ -662927,8 +664285,8 @@ ] ], "dangling-markup": { - "dangling-markup-mitigation-allowed-apis.tentative.https.html": [ - "428decfc583d8268ae36bc1ddf832d21c30ea6a6", + "dangling-markup-mitigation-allowed-apis.https.html": [ + "62804283075c68edc2d6b2334f931e908ca2053e", [ null, { @@ -665209,7 +666567,7 @@ ] ], "component-ads.https.window.js": [ - "6fec80102bb94da42a4fffa6bb3f5d5d8ded7d33", + "9e3e6e8878d041aa5f755a191138ebc00855e651", [ "fledge/tentative/component-ads.https.window.html?1-5", { @@ -665630,7 +666988,7 @@ ] ], "cross-origin.https.window.js": [ - "6c95f74c1f597332e2b74d9c5dd18f7808d34124", + "c1119a94d5932f6088fad52e1b8b2d2b785c2dd6", [ "fledge/tentative/cross-origin.https.window.html?1-4", { @@ -669792,7 +671150,7 @@ ] ], "interest-group-update.https.window.js": [ - "041100547446369dd7566d2ab010319edc434135", + "24d814cf0913a9d4f2108b767a6a12f4f031c9b1", [ "fledge/tentative/interest-group-update.https.window.html?1-4", { @@ -670805,7 +672163,7 @@ ] ], "kanon-status-below-threshold.https.window.js": [ - "419b94bd7814756059a2029562510915a1c648ef", + "12e8747af0b3db9695683229b4f5199fd7b4643a", [ "fledge/tentative/kanon-status-below-threshold.https.window.html", { @@ -676227,7 +677585,7 @@ ] ], "trusted-scoring-signals.https.window.js": [ - "ea820d3acf54e7d746d46ae325b2ff61a30c2a82", + "df613facaad1e75f6878515a1031c8b96274632f", [ "fledge/tentative/trusted-scoring-signals.https.window.html?1-5", { @@ -677461,8 +678819,8 @@ {} ] ], - "focus-double-sync-calls.tentative.html": [ - "6dbfa71e735204281eef031f169c2fdac580d12e", + "focus-double-sync-calls.html": [ + "8d5f5c8a79fc6c65556e151fed9610a9cb915f98", [ null, {} @@ -677575,6 +678933,13 @@ {} ] ], + "nested-focus-within-iframe-focus-event.html": [ + "e0daf56386ebd5fd1e8711c1d27954e9b72202c4", + [ + null, + {} + ] + ], "scroll-matches-focus.html": [ "46a58fdf974f53129b62dc1d05f965f02631417b", [ @@ -682052,7 +683417,7 @@ ] ], "fenced-frame-bypass.tentative.https.window.js": [ - "e5d12397a9af11fd9d5dde1d3d484e7c7627192c", + "b84dffb9aa4bfbadc2754d88ef8883a372c18280", [ "html/anonymous-iframe/fenced-frame-bypass.tentative.https.window.html", { @@ -683026,7 +684391,7 @@ ] ], "order-in-bfcache-restore.html": [ - "f453c80a2aee8c2cff5bca12f361a6a7b7683be8", + "fae06df00f67323c70dbdee28d967bc1c289004d", [ null, { @@ -684419,7 +685784,7 @@ ] ], "nav-cancelation-2.sub.html": [ - "c081513b7c86901c73d0648d6972e77ec10d77df", + "21096519503aa84968d639bb6df196e6fbca9b4f", [ null, {} @@ -712114,7 +713479,7 @@ ] ], "blob.https.html": [ - "ce72f247ef7b6fc6b54196dbc47582b5118d54ca", + "e27b281a11d747d9df322483d3d09723ff3891f5", [ null, {} @@ -715495,7 +716860,7 @@ } }, "resource-popup.https.html": [ - "481cceb72f0d0ab47f79dc0cdf84ad442a420509", + "ec2f7af28fe4fee535370a3b3d14afd40d3a60be", [ null, {} @@ -723760,6 +725125,13 @@ ] ] }, + "error-sequence.html": [ + "e2cf412311154f71bfa22420db3ecefdb2554558", + [ + null, + {} + ] + ], "event_canplay.html": [ "e5c632bc17bb8dc95ede1b9456b77dfa56b77b51", [ @@ -737909,15 +739281,6 @@ {} ] ], - "interesttarget-has-interest-pseudo.tentative.html": [ - "2ace6fdcd44e028bf8ddc4bb68f33e67afa403a8", - [ - null, - { - "testdriver": true - } - ] - ], "interesttarget-hide-delay.tentative.html": [ "9ec1c229c01aaca68ca6fb379f56b0b17a383c14", [ @@ -737947,6 +739310,24 @@ } ] ], + "interesttarget-popover-focus.tentative.html": [ + "6cf64d953fea80d0f1a0db88fe7649d0c990e5af", + [ + null, + { + "testdriver": true + } + ] + ], + "interesttarget-pseudo-classes.tentative.html": [ + "348d9ae7310310d23d0afc8116c622fd1b6eb75e", + [ + null, + { + "testdriver": true + } + ] + ], "interesttarget-show-delay.tentative.html": [ "ca47c0f237d1fb0e94589fc2a0dc694bf97dc863", [ @@ -739701,6 +741082,13 @@ {} ] ], + "serializing-lt-gt.tentative.html": [ + "6c74b443a838267be7f0d2ad8a8a80964c57209f", + [ + null, + {} + ] + ], "serializing.html": [ "1bccbf560880d98287c57046e84a449b20c39d90", [ @@ -743664,7 +745052,7 @@ ] ], "roles-contextual.tentative.html": [ - "0f918b24c700c31f399a015d7e0219c3e112640a", + "e3b5f4e925b4721a655623c0ec01f1a85e27483e", [ null, { @@ -744539,7 +745927,7 @@ ] ], "inert-node-is-uneditable.html": [ - "ecb69695793062e46741d19b95dd71bbbf572366", + "18cc079ea4e1d362d7831b0e6507d4beee1f15a6", [ null, { @@ -747790,14 +749178,14 @@ ] ], "observe-cross-origin-animated-image.tentative.html": [ - "49207f9d690b169a5e73d396ce7f4ffc00241780", + "8ef198dac68f71ccccfe1c93178270084bbc0fc0", [ null, {} ] ], "observe-cross-origin-tao-animated-image.tentative.html": [ - "137dde66383f772b06d381e4f6293e15a1d8b88a", + "13181670c16240a6e9efe40136cda0843baec3b3", [ null, {} @@ -750810,6 +752198,13 @@ null, {} ] + ], + "symmetric-largeop.html": [ + "b93ed5214e2039af713b895ceca1a5af0b1a0f14", + [ + null, + {} + ] ] }, "radicals": { @@ -754488,6 +755883,15 @@ } ] ], + "media-session-artwork-fetch.https.html": [ + "758446160ae05dcbdc84ef63f5acb94dd24538b9", + [ + null, + { + "testdriver": true + } + ] + ], "mediametadata.html": [ "8dcf7dc25c6fa460c94d7c91387e826d7464d980", [ @@ -767089,6 +768493,21 @@ } ] ], + "pointerevent_range_input.html": [ + "4a67f4dd65309334ae238b8f69ffdb65ec2ce46b", + [ + "pointerevents/pointerevent_range_input.html?mouse", + { + "testdriver": true + } + ], + [ + "pointerevents/pointerevent_range_input.html?touch", + { + "testdriver": true + } + ] + ], "pointerevent_releasepointercapture_events_to_original_target.html": [ "325b58c85ccdf60a517698330e729f3930634269", [ @@ -768468,7 +769887,7 @@ ] ], "shared-storage-surface-context-id.https.html": [ - "3b0e1b3d740ad56382ace7946304709181e50b39", + "f51f3960550ab4fabb2de7395ae3c441e84883bc", [ null, {} @@ -768489,7 +769908,7 @@ ] ], "shared-storage-surface-filtering-id.https.html": [ - "53ed3a109bc1a025446072e1399f1859053c3d68", + "e79634b7391335212155d1df9c28d69d2c4da79c", [ null, {} @@ -786878,6 +788297,15 @@ {} ] ], + "move-by-word-with-symbol.html": [ + "7a0f9048960c1955f4b1f4edb7d3384bb4185edf", + [ + null, + { + "testdriver": true + } + ] + ], "move-paragraph-cross-editing-boundary.tentative.html": [ "f6a558d7582e73386b9e7f6b1443d31b35efb875", [ @@ -788933,7 +790361,7 @@ ] ], "claim-using-registration.https.html": [ - "8a2a6ff25c82d8d6de26cca521da99f8ef6d5fbf", + "a02f8e9ca6f1ea7b4df36870b7ca46c3b5b5fab2", [ null, {} @@ -790537,7 +791965,7 @@ ] ], "unregister-immediately-before-installed.https.html": [ - "79cdaf062dc729c8029c553b485e59d510b87982", + "c56674c0fb1ba7eb4b2100695ade8b3fd5357dac", [ null, {} @@ -790551,7 +791979,7 @@ ] ], "unregister-immediately.https.html": [ - "54be40a545220d9d58569816feef87a0ee17f891", + "c6a91f8e235fca71563e55164137c6417ced9670", [ null, {} @@ -791089,7 +792517,7 @@ ] ], "event-post-dispatch.html": [ - "a8fe0a24b1d53907f31c7c88787879493297147f", + "0cab1fcc6b47924e6eeed37c6a36ebac56291d4e", [ null, {} @@ -797019,6 +798447,24 @@ ] }, "speculation-tags": { + "cross-site-prefetch.https.html": [ + "b10aecf40350cf9849b6e36e577a29cd9100ee64", + [ + null, + { + "timeout": "long" + } + ] + ], + "cross-site-to-same-site-redirection-prefetch.https.html": [ + "e264572c2f963ed1b1d63515049c33a221551ef5", + [ + null, + { + "timeout": "long" + } + ] + ], "deduped-and-sorted-tags.https.html": [ "3d1baaf1907f047b4cdcb64c598a79a101835f65", [ @@ -797079,6 +798525,15 @@ } ] ], + "same-site-to-cross-site-redirection-prefetch.https.html": [ + "27ece0cfde17716cf2846d18c825d7d1d286d538", + [ + null, + { + "timeout": "long" + } + ] + ], "valid-tags.https.html": [ "f39c2d80235e5a9cad9806ffe47f2bb8b900f4fd", [ @@ -798299,10 +799754,10 @@ } ] ], - "requestStorageAccess-cross-origin-fetch.sub.https.tentative.window.js": [ + "requestStorageAccess-cross-origin-fetch.sub.https.window.js": [ "21592a9225f646e51f935b044a476217f4e1e4f4", [ - "storage-access-api/requestStorageAccess-cross-origin-fetch.sub.https.tentative.window.html", + "storage-access-api/requestStorageAccess-cross-origin-fetch.sub.https.window.html", { "script_metadata": [ [ @@ -798949,6 +800404,24 @@ } ] ], + "storage-access-beyond-cookies.thirdPartyBlobStorage.sub.https.window.js": [ + "5dc67f0c7f1d8553d79ded2f315d0bfd073ec500", + [ + "storage-access-api/storage-access-beyond-cookies.thirdPartyBlobStorage.sub.https.window.html", + { + "script_metadata": [ + [ + "script", + "/resources/testdriver.js" + ], + [ + "script", + "/resources/testdriver-vendor.js" + ] + ] + } + ] + ], "storage-access-beyond-cookies.unpartitioned.sub.https.window.js": [ "ddc5b49f4819fc127a99d30ebc2792244cae3570", [ @@ -820376,7 +821849,7 @@ ] ], "measure-l3.any.js": [ - "642b55ab635e2c021d99c1aaf3e924ca2c5c0c29", + "13511dfbf494e5963186e1f97a5e47f4b1fb0eea", [ "user-timing/measure-l3.any.html", { @@ -820613,7 +822086,7 @@ ] ], "request-video-frame-callback-during-xr-session.https.html": [ - "d5f69ec285c8c8462a93418a9936c4e65cf609b8", + "0c881472547a85fbb49a7ced2425bfba8a231cd3", [ null, {} @@ -831436,7 +832909,7 @@ ] ], "effect-value-context-filling.html": [ - "fcb7f131266c47bb225aa78458ba96b043a47e41", + "499a779b87ffbb24b6cbdd4b84fa6287fd241c7f", [ null, {} @@ -835598,7 +837071,7 @@ ] ], "mediaElementAudioSourceToScriptProcessorTest.html": [ - "56d0787b7673b11d903de23159b49ba15b85c1f4", + "1099ee8d244a9d8a2d0d3e60531d5ae9f516ca57", [ null, {} @@ -840139,7 +841612,7 @@ ] ], "image-decoder.https.any.js": [ - "1b3fabbfc4ae1879f816b01dac2c771d2cec2a69", + "9ca28e49c4a2b5254c2f3c18664809bad9384b05", [ "webcodecs/image-decoder.https.any.html", { @@ -848294,7 +849767,7 @@ ] ], "ceil.https.any.js": [ - "7f31a80ce7a9148431379b09dbcc91e9faab72b6", + "7d487dd65fa708e2a94c83a7278d7693359075bf", [ "webnn/conformance_tests/ceil.https.any.html?cpu", { @@ -848849,7 +850322,7 @@ ] ], "conv_transpose2d.https.any.js": [ - "3a2ac69effe5af4baac10c8d116c73eb3b19ef26", + "67ce5dbaf65cc99ba7f2fdd02aaf2d9b3e9022ce", [ "webnn/conformance_tests/conv_transpose2d.https.any.html?cpu", { @@ -875976,7 +877449,7 @@ ] ], "RTCCertificate.html": [ - "6b7626c92e75c06dba8606558abe003d8d994fd3", + "2662580c95973a9367c605b6230e0e07a0b9d6bd", [ null, {} @@ -894424,6 +895897,13 @@ ] ] }, + "depth_sensing_attributes_throw_not_enabled.https.html": [ + "43adba74a047e926d1d65ec4752533072996274c", + [ + null, + {} + ] + ], "depth_sensing_notEnabled.https.html": [ "23bae35493a651a6a2bd9c424d020825bdf12dcf", [ @@ -894438,6 +895918,13 @@ {} ] ], + "depth_type_request_respected.https.html": [ + "2846c9ce10b433d69f9db8f0864a38bc1cce9b25", + [ + null, + {} + ] + ], "gpu": { "depth_sensing_gpu_dataUnavailable.https.html": [ "018edf7693452d69753758dc0db8e25a36d8615c", @@ -908049,14 +909536,14 @@ ] ], "direction-unicode-bidi-007.xht": [ - "d7f00230f9dfc06ea056f1af11da8ce5e34f8622", + "ff45a8cb230261009da18cefdf79048da311e7a4", [ null, {} ] ], "direction-unicode-bidi-008.xht": [ - "3b5e7299fea1c15991af45ab8df572698459b4cd", + "53c0318839bd03e9cfffcd796c1eee6671b411d8", [ null, {} @@ -923235,7 +924722,7 @@ }, "context_destroyed": { "context_destroyed.py": [ - "8492a4c1a96a4d32f9835006039a10d9c2043be4", + "2fd0cd6bb479ee97b50a2137e7993dbbc8a94ec5", [ null, {} @@ -923731,7 +925218,7 @@ "emulation": { "set_geolocation_override": { "contexts.py": [ - "ea9adabc161db9d477980e8d67d3b635fc2d002a", + "8a0e43475da52609a362bf5f3e0853ceb2a9725f", [ null, {} diff --git a/tests/wpt/meta/content-security-policy/generic/only-valid-whitespaces-are-allowed.html.ini b/tests/wpt/meta/content-security-policy/generic/only-valid-whitespaces-are-allowed.html.ini index ee568553b94..9b5f8ad8451 100644 --- a/tests/wpt/meta/content-security-policy/generic/only-valid-whitespaces-are-allowed.html.ini +++ b/tests/wpt/meta/content-security-policy/generic/only-valid-whitespaces-are-allowed.html.ini @@ -1,55 +1,25 @@ [only-valid-whitespaces-are-allowed.html] expected: TIMEOUT - [Should not load image with 'none' CSP - meta tag] - expected: FAIL - - [Should not load image with 'none' CSP - HTTP header] - expected: FAIL - - [U+0009 TAB should be properly parsed between directive name and value - meta tag] - expected: FAIL - - [U+0009 TAB should be properly parsed between directive name and value - HTTP header] - expected: FAIL - - [U+000C FF should be properly parsed between directive name and value - meta tag] - expected: FAIL - [U+000C FF should be properly parsed between directive name and value - HTTP header] expected: TIMEOUT - [U+000A LF should be properly parsed between directive name and value - meta tag] - expected: FAIL - - [U+000D CR should be properly parsed between directive name and value - meta tag] - expected: FAIL - - [U+0020 SPACE should be properly parsed between directive name and value - meta tag] - expected: FAIL - - [U+0020 SPACE should be properly parsed between directive name and value - HTTP header] - expected: FAIL - - [U+0009 TAB should be properly parsed inside directive value - meta tag] - expected: FAIL + [U+000C FF should be properly parsed inside directive value - HTTP header] + expected: TIMEOUT - [U+0009 TAB should be properly parsed inside directive value - HTTP header] + [Should load image without any CSP - meta tag] expected: FAIL - [U+000C FF should be properly parsed inside directive value - meta tag] + [Should load image without any CSP - HTTP header] expected: FAIL - [U+000C FF should be properly parsed inside directive value - HTTP header] - expected: TIMEOUT - - [U+000A LF should be properly parsed inside directive value - meta tag] + [U+00A0 NBSP should not be parsed between directive name and value - meta tag] expected: FAIL - [U+000D CR should be properly parsed inside directive value - meta tag] + [U+00A0 NBSP should not be parsed between directive name and value - HTTP header] expected: FAIL - [U+0020 SPACE should be properly parsed inside directive value - meta tag] + [U+00A0 NBSP should not be parsed inside directive value - meta tag] expected: FAIL - [U+0020 SPACE should be properly parsed inside directive value - HTTP header] + [U+00A0 NBSP should not be parsed inside directive value - HTTP header] expected: FAIL diff --git a/tests/wpt/meta/css/css-borders/tentative/corner-shape/corner-shape-backdrop-filter-overflow.html.ini b/tests/wpt/meta/css/css-borders/tentative/corner-shape/corner-shape-backdrop-filter-overflow.html.ini new file mode 100644 index 00000000000..71b9b5bd6fd --- /dev/null +++ b/tests/wpt/meta/css/css-borders/tentative/corner-shape/corner-shape-backdrop-filter-overflow.html.ini @@ -0,0 +1,2 @@ +[corner-shape-backdrop-filter-overflow.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-borders/tentative/corner-shape/corner-shape-backdrop-filter.html.ini b/tests/wpt/meta/css/css-borders/tentative/corner-shape/corner-shape-backdrop-filter.html.ini new file mode 100644 index 00000000000..fc97efe37f1 --- /dev/null +++ b/tests/wpt/meta/css/css-borders/tentative/corner-shape/corner-shape-backdrop-filter.html.ini @@ -0,0 +1,2 @@ +[corner-shape-backdrop-filter.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-color-hdr/computed.html.ini b/tests/wpt/meta/css/css-color-hdr/computed.html.ini index 213629ecaad..90290faace4 100644 --- a/tests/wpt/meta/css/css-color-hdr/computed.html.ini +++ b/tests/wpt/meta/css/css-color-hdr/computed.html.ini @@ -115,3 +115,6 @@ [Property dynamic-range-limit value 'dynamic-range-limit-mix(no-limit 10%, dynamic-range-limit-mix(standard 25%, constrained 75%) 20%, dynamic-range-limit-mix(constrained 10%, no-limit 30%) 20%)'] expected: FAIL + + [Property dynamic-range-limit value 'dynamic-range-limit-mix(standard calc(50% * sign(10em - 1px)), constrained 50%)'] + expected: FAIL diff --git a/tests/wpt/meta/css/css-color-hdr/parsing.html.ini b/tests/wpt/meta/css/css-color-hdr/parsing.html.ini index 0d7626461ee..e5d066f8c77 100644 --- a/tests/wpt/meta/css/css-color-hdr/parsing.html.ini +++ b/tests/wpt/meta/css/css-color-hdr/parsing.html.ini @@ -67,3 +67,6 @@ [e.style['dynamic-range-limit'\] = "dynamic-range-limit-mix(dynamic-range-limit-mix(no-limit 1%, standard 2%) 3%, dynamic-range-limit-mix(constrained 5%, no-limit 5%) 6%)" should set the property value] expected: FAIL + + [e.style['dynamic-range-limit'\] = "dynamic-range-limit-mix(standard calc(50% * sign(10em - 1px)), constrained 50%)" should set the property value] + expected: FAIL diff --git a/tests/wpt/meta/css/css-color/parsing/color-valid-relative-color.html.ini b/tests/wpt/meta/css/css-color/parsing/color-valid-relative-color.html.ini index 0c307e06026..8bd889e74dd 100644 --- a/tests/wpt/meta/css/css-color/parsing/color-valid-relative-color.html.ini +++ b/tests/wpt/meta/css/css-color/parsing/color-valid-relative-color.html.ini @@ -532,3 +532,6 @@ [e.style['color'\] = "rgb(from color(srgb 0.4 0.2 0.6) r g b)" should set the property value] expected: FAIL + + [e.style['color'\] = "oklch(from red calc(1 / l) c h)" should set the property value] + expected: FAIL diff --git a/tests/wpt/meta/css/css-gaps/tentative/flex/flex-gap-decorations-012.html.ini b/tests/wpt/meta/css/css-gaps/tentative/flex/flex-gap-decorations-012.html.ini new file mode 100644 index 00000000000..ad9928fe9aa --- /dev/null +++ b/tests/wpt/meta/css/css-gaps/tentative/flex/flex-gap-decorations-012.html.ini @@ -0,0 +1,2 @@ +[flex-gap-decorations-012.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-gaps/tentative/flex/flex-gap-decorations-016.html.ini b/tests/wpt/meta/css/css-gaps/tentative/flex/flex-gap-decorations-016.html.ini new file mode 100644 index 00000000000..8b59b4a6052 --- /dev/null +++ b/tests/wpt/meta/css/css-gaps/tentative/flex/flex-gap-decorations-016.html.ini @@ -0,0 +1,2 @@ +[flex-gap-decorations-016.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-gaps/tentative/flex/flex-gap-decorations-019.html.ini b/tests/wpt/meta/css/css-gaps/tentative/flex/flex-gap-decorations-019.html.ini new file mode 100644 index 00000000000..609484e7af3 --- /dev/null +++ b/tests/wpt/meta/css/css-gaps/tentative/flex/flex-gap-decorations-019.html.ini @@ -0,0 +1,2 @@ +[flex-gap-decorations-019.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-gaps/tentative/grid/grid-gap-decorations-022.html.ini b/tests/wpt/meta/css/css-gaps/tentative/grid/grid-gap-decorations-022.html.ini new file mode 100644 index 00000000000..230b2658f27 --- /dev/null +++ b/tests/wpt/meta/css/css-gaps/tentative/grid/grid-gap-decorations-022.html.ini @@ -0,0 +1,2 @@ +[grid-gap-decorations-022.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-gaps/tentative/grid/grid-gap-decorations-023.html.ini b/tests/wpt/meta/css/css-gaps/tentative/grid/grid-gap-decorations-023.html.ini new file mode 100644 index 00000000000..bdb184d6539 --- /dev/null +++ b/tests/wpt/meta/css/css-gaps/tentative/grid/grid-gap-decorations-023.html.ini @@ -0,0 +1,2 @@ +[grid-gap-decorations-023.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-gaps/tentative/grid/grid-gap-decorations-024.html.ini b/tests/wpt/meta/css/css-gaps/tentative/grid/grid-gap-decorations-024.html.ini new file mode 100644 index 00000000000..af150778186 --- /dev/null +++ b/tests/wpt/meta/css/css-gaps/tentative/grid/grid-gap-decorations-024.html.ini @@ -0,0 +1,2 @@ +[grid-gap-decorations-024.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-gaps/tentative/grid/grid-gap-decorations-025.html.ini b/tests/wpt/meta/css/css-gaps/tentative/grid/grid-gap-decorations-025.html.ini new file mode 100644 index 00000000000..022f9b1d57a --- /dev/null +++ b/tests/wpt/meta/css/css-gaps/tentative/grid/grid-gap-decorations-025.html.ini @@ -0,0 +1,2 @@ +[grid-gap-decorations-025.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-gaps/tentative/grid/grid-gap-decorations-026.html.ini b/tests/wpt/meta/css/css-gaps/tentative/grid/grid-gap-decorations-026.html.ini new file mode 100644 index 00000000000..9d9062851b2 --- /dev/null +++ b/tests/wpt/meta/css/css-gaps/tentative/grid/grid-gap-decorations-026.html.ini @@ -0,0 +1,2 @@ +[grid-gap-decorations-026.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-gaps/tentative/grid/grid-gap-decorations-027.html.ini b/tests/wpt/meta/css/css-gaps/tentative/grid/grid-gap-decorations-027.html.ini new file mode 100644 index 00000000000..2e6b48820cd --- /dev/null +++ b/tests/wpt/meta/css/css-gaps/tentative/grid/grid-gap-decorations-027.html.ini @@ -0,0 +1,2 @@ +[grid-gap-decorations-027.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-gaps/tentative/grid/grid-gap-decorations-028.html.ini b/tests/wpt/meta/css/css-gaps/tentative/grid/grid-gap-decorations-028.html.ini new file mode 100644 index 00000000000..b851b19644a --- /dev/null +++ b/tests/wpt/meta/css/css-gaps/tentative/grid/grid-gap-decorations-028.html.ini @@ -0,0 +1,3 @@ +[grid-gap-decorations-028.html] + [`column-rule-color` should be rgb(0, 255, 0)] + expected: FAIL diff --git a/tests/wpt/meta/css/css-gaps/tentative/parsing/gap-decorations-bidirectional-shorthands.html.ini b/tests/wpt/meta/css/css-gaps/tentative/parsing/gap-decorations-bidirectional-shorthands.html.ini new file mode 100644 index 00000000000..617ef78eb22 --- /dev/null +++ b/tests/wpt/meta/css/css-gaps/tentative/parsing/gap-decorations-bidirectional-shorthands.html.ini @@ -0,0 +1,6 @@ +[gap-decorations-bidirectional-shorthands.html] + [rule-color shorthand computed from longhand values] + expected: FAIL + + [rule-width shorthand computed from longhand values] + expected: FAIL diff --git a/tests/wpt/meta/css/css-gaps/tentative/parsing/gap-decorations-color-computed.html.ini b/tests/wpt/meta/css/css-gaps/tentative/parsing/gap-decorations-color-computed.html.ini index cd5ffa3fb95..5d5ffad0d95 100644 --- a/tests/wpt/meta/css/css-gaps/tentative/parsing/gap-decorations-color-computed.html.ini +++ b/tests/wpt/meta/css/css-gaps/tentative/parsing/gap-decorations-color-computed.html.ini @@ -64,3 +64,36 @@ [Property row-rule-color value 'rgb(from yellow calc(255 - r) calc(255 - g) calc(255 - b))'] expected: FAIL + + [Property rule-color value 'currentcolor'] + expected: FAIL + + [Property rule-color value 'red'] + expected: FAIL + + [Property rule-color value 'repeat(4, yellow)'] + expected: FAIL + + [Property rule-color value 'red green blue'] + expected: FAIL + + [Property rule-color value 'repeat(7, lime) repeat(3, red)'] + expected: FAIL + + [Property rule-color value 'repeat(auto, red)'] + expected: FAIL + + [Property rule-color value 'repeat(calc(5 + 3), salmon)'] + expected: FAIL + + [Property rule-color value 'color-mix(in srgb, red 50%, blue 50%)'] + expected: FAIL + + [Property rule-color value 'color-mix(in srgb, lime 25%, yellow 75%)'] + expected: FAIL + + [Property rule-color value 'repeat(auto, rgb(from lime r g b))'] + expected: FAIL + + [Property rule-color value 'rgb(from yellow calc(255 - r) calc(255 - g) calc(255 - b))'] + expected: FAIL diff --git a/tests/wpt/meta/css/css-gaps/tentative/parsing/gap-decorations-color-valid.html.ini b/tests/wpt/meta/css/css-gaps/tentative/parsing/gap-decorations-color-valid.html.ini index 4c88c2d31e6..8edf4d06199 100644 --- a/tests/wpt/meta/css/css-gaps/tentative/parsing/gap-decorations-color-valid.html.ini +++ b/tests/wpt/meta/css/css-gaps/tentative/parsing/gap-decorations-color-valid.html.ini @@ -88,3 +88,48 @@ [e.style['row-rule-color'\] = "blue repeat(auto, red green) repeat(4, blue red green)" should set the property value] expected: FAIL + + [e.style['rule-color'\] = "repeat(4, blue)" should set the property value] + expected: FAIL + + [e.style['rule-color'\] = "repeat(3, red green blue)" should set the property value] + expected: FAIL + + [e.style['rule-color'\] = "repeat(1, red green blue yellow)" should set the property value] + expected: FAIL + + [e.style['rule-color'\] = "red" should set the property value] + expected: FAIL + + [e.style['rule-color'\] = "repeat(4, cyan)" should set the property value] + expected: FAIL + + [e.style['rule-color'\] = "green blue" should set the property value] + expected: FAIL + + [e.style['rule-color'\] = "red blue green yellow pink" should set the property value] + expected: FAIL + + [e.style['rule-color'\] = "repeat(3, blue) repeat(4, red)" should set the property value] + expected: FAIL + + [e.style['rule-color'\] = "red repeat(3, blue) blue repeat(4, red green cyan)" should set the property value] + expected: FAIL + + [e.style['rule-color'\] = "repeat(4, red green cyan) repeat(5, yellow) blue" should set the property value] + expected: FAIL + + [e.style['rule-color'\] = "repeat(auto, red)" should set the property value] + expected: FAIL + + [e.style['rule-color'\] = "repeat(auto, red green blue)" should set the property value] + expected: FAIL + + [e.style['rule-color'\] = "repeat(auto, red green) red" should set the property value] + expected: FAIL + + [e.style['rule-color'\] = "repeat(4, blue red green) repeat(auto, red)" should set the property value] + expected: FAIL + + [e.style['rule-color'\] = "blue repeat(auto, red green) repeat(4, blue red green)" should set the property value] + expected: FAIL diff --git a/tests/wpt/meta/css/css-gaps/tentative/parsing/gap-decorations-width-computed.html.ini b/tests/wpt/meta/css/css-gaps/tentative/parsing/gap-decorations-width-computed.html.ini index a95dbc9a917..9a94074889e 100644 --- a/tests/wpt/meta/css/css-gaps/tentative/parsing/gap-decorations-width-computed.html.ini +++ b/tests/wpt/meta/css/css-gaps/tentative/parsing/gap-decorations-width-computed.html.ini @@ -46,3 +46,27 @@ [Property row-rule-width value 'repeat(auto, min(5px, 10px)) repeat(5, 10px) calc(10px + 0.5em)'] expected: FAIL + + [Property rule-width value 'calc(10px + 0.5em)'] + expected: FAIL + + [Property rule-width value 'calc(10px - 0.5em)'] + expected: FAIL + + [Property rule-width value '2px 4px 6px'] + expected: FAIL + + [Property rule-width value 'repeat(4, 2px)'] + expected: FAIL + + [Property rule-width value 'repeat(auto, 10px)'] + expected: FAIL + + [Property rule-width value 'repeat(calc(5 + 3), 10px)'] + expected: FAIL + + [Property rule-width value 'repeat(5, 10px calc(10px + 0.5em))'] + expected: FAIL + + [Property rule-width value 'repeat(auto, min(5px, 10px)) repeat(5, 10px) calc(10px + 0.5em)'] + expected: FAIL diff --git a/tests/wpt/meta/css/css-gaps/tentative/parsing/gap-decorations-width-valid.html.ini b/tests/wpt/meta/css/css-gaps/tentative/parsing/gap-decorations-width-valid.html.ini index 5efa682891c..b70d55a67e8 100644 --- a/tests/wpt/meta/css/css-gaps/tentative/parsing/gap-decorations-width-valid.html.ini +++ b/tests/wpt/meta/css/css-gaps/tentative/parsing/gap-decorations-width-valid.html.ini @@ -88,3 +88,48 @@ [e.style['row-rule-width'\] = "10px repeat(auto, 20px 30px) repeat(4, thin 50px 60px)" should set the property value] expected: FAIL + + [e.style['rule-width'\] = "repeat(4, thin)" should set the property value] + expected: FAIL + + [e.style['rule-width'\] = "repeat(3, thin medium thick)" should set the property value] + expected: FAIL + + [e.style['rule-width'\] = "repeat(1, 10px thin medium thick)" should set the property value] + expected: FAIL + + [e.style['rule-width'\] = "10px" should set the property value] + expected: FAIL + + [e.style['rule-width'\] = "repeat(4, medium)" should set the property value] + expected: FAIL + + [e.style['rule-width'\] = "10px 15px" should set the property value] + expected: FAIL + + [e.style['rule-width'\] = "10px 15px 20px 25px 30px" should set the property value] + expected: FAIL + + [e.style['rule-width'\] = "repeat(3, 10px) repeat(4, 15px)" should set the property value] + expected: FAIL + + [e.style['rule-width'\] = "10px repeat(3, 20px) 30px repeat(4, thin medium thick)" should set the property value] + expected: FAIL + + [e.style['rule-width'\] = "repeat(4, 10px 20px 30px) repeat(5, 40px) 50px" should set the property value] + expected: FAIL + + [e.style['rule-width'\] = "repeat(auto, thin)" should set the property value] + expected: FAIL + + [e.style['rule-width'\] = "repeat(auto, 10px 20px 30px)" should set the property value] + expected: FAIL + + [e.style['rule-width'\] = "repeat(auto, 10px 20px) 30px" should set the property value] + expected: FAIL + + [e.style['rule-width'\] = "repeat(4, 10px 20px 30px) repeat(auto, 40px)" should set the property value] + expected: FAIL + + [e.style['rule-width'\] = "10px repeat(auto, 20px 30px) repeat(4, thin 50px 60px)" should set the property value] + expected: FAIL diff --git a/tests/wpt/meta/css/css-gaps/tentative/serialization/gap-decorations-properties.html.ini b/tests/wpt/meta/css/css-gaps/tentative/serialization/gap-decorations-properties.html.ini new file mode 100644 index 00000000000..bc4c6eb5666 --- /dev/null +++ b/tests/wpt/meta/css/css-gaps/tentative/serialization/gap-decorations-properties.html.ini @@ -0,0 +1,189 @@ +[gap-decorations-properties.html] + [gap-rule-paint-order] + expected: FAIL + + [gap-rule-paint-order.row-over-column] + expected: FAIL + + [gap-rule-paint-order.column-over-row] + expected: FAIL + + [column-rule-break] + expected: FAIL + + [column-rule-break.none] + expected: FAIL + + [column-rule-break.spanning-item] + expected: FAIL + + [column-rule-break.intersection] + expected: FAIL + + [column-rule-color] + expected: FAIL + + [column-rule-color.red] + expected: FAIL + + [column-rule-color.blue] + expected: FAIL + + [column-rule-color.repeat(4, blue red green) repeat(auto, red)] + expected: FAIL + + [column-rule-color.blue red] + expected: FAIL + + [column-rule-outset] + expected: FAIL + + [column-rule-outset.10px] + expected: FAIL + + [column-rule-outset.50%] + expected: FAIL + + [column-rule-style] + expected: FAIL + + [column-rule-style.none] + expected: FAIL + + [column-rule-style.hidden] + expected: FAIL + + [column-rule-style.dotted] + expected: FAIL + + [column-rule-style.dashed] + expected: FAIL + + [column-rule-style.solid] + expected: FAIL + + [column-rule-style.double] + expected: FAIL + + [column-rule-style.groove] + expected: FAIL + + [column-rule-style.ridge] + expected: FAIL + + [column-rule-style.inset] + expected: FAIL + + [column-rule-style.outset] + expected: FAIL + + [column-rule-style.dotted dashed] + expected: FAIL + + [column-rule-style.repeat(3, dotted)] + expected: FAIL + + [column-rule-width] + expected: FAIL + + [column-rule-width.10px] + expected: FAIL + + [column-rule-width.thin] + expected: FAIL + + [column-rule-width.medium] + expected: FAIL + + [column-rule-width.thick] + expected: FAIL + + [row-rule-break] + expected: FAIL + + [row-rule-break.none] + expected: FAIL + + [row-rule-break.spanning-item] + expected: FAIL + + [row-rule-break.intersection] + expected: FAIL + + [row-rule-color] + expected: FAIL + + [row-rule-color.red] + expected: FAIL + + [row-rule-color.blue] + expected: FAIL + + [row-rule-color.repeat(4, blue red green) repeat(auto, red)] + expected: FAIL + + [row-rule-color.blue red] + expected: FAIL + + [row-rule-outset] + expected: FAIL + + [row-rule-outset.10px] + expected: FAIL + + [row-rule-outset.50%] + expected: FAIL + + [row-rule-style] + expected: FAIL + + [row-rule-style.none] + expected: FAIL + + [row-rule-style.hidden] + expected: FAIL + + [row-rule-style.dotted] + expected: FAIL + + [row-rule-style.dashed] + expected: FAIL + + [row-rule-style.solid] + expected: FAIL + + [row-rule-style.double] + expected: FAIL + + [row-rule-style.groove] + expected: FAIL + + [row-rule-style.ridge] + expected: FAIL + + [row-rule-style.inset] + expected: FAIL + + [row-rule-style.outset] + expected: FAIL + + [row-rule-style.dotted dashed] + expected: FAIL + + [row-rule-style.repeat(3, dotted)] + expected: FAIL + + [row-rule-width] + expected: FAIL + + [row-rule-width.10px] + expected: FAIL + + [row-rule-width.thin] + expected: FAIL + + [row-rule-width.medium] + expected: FAIL + + [row-rule-width.thick] + expected: FAIL diff --git a/tests/wpt/meta/css/css-grid/alignment/grid-content-alignment-with-abspos-001.html.ini b/tests/wpt/meta/css/css-grid/alignment/grid-content-alignment-with-abspos-001.html.ini new file mode 100644 index 00000000000..efff2a2620a --- /dev/null +++ b/tests/wpt/meta/css/css-grid/alignment/grid-content-alignment-with-abspos-001.html.ini @@ -0,0 +1,3 @@ +[grid-content-alignment-with-abspos-001.html] + [.grid 1] + expected: FAIL diff --git a/tests/wpt/meta/css/css-images/image-set/image-set-parsing.html.ini b/tests/wpt/meta/css/css-images/image-set/image-set-parsing.html.ini index 82e2394b4cf..212d2366f4b 100644 --- a/tests/wpt/meta/css/css-images/image-set/image-set-parsing.html.ini +++ b/tests/wpt/meta/css/css-images/image-set/image-set-parsing.html.ini @@ -4,3 +4,15 @@ [e.style['content'\] = "-webkit-image-set(linear-gradient(black, white) 1x, 'example.png' 4x)" should set the property value] expected: FAIL + + [e.style['background-image'\] = "image-set(url(\\"example.png\\") calc(1dppx * sibling-index()))" should set the property value] + expected: FAIL + + [e.style['background-image'\] = "-webkit-image-set(url(\\"example.png\\") calc(1dppx * sibling-index()))" should set the property value] + expected: FAIL + + [e.style['background-image'\] = "image-set(url(\\"example.png\\") calc(1dppx * sign(1em - 10px)))" should set the property value] + expected: FAIL + + [e.style['background-image'\] = "-webkit-image-set(url(\\"example.png\\") calc(1dppx * sign(1em - 10px)))" should set the property value] + expected: FAIL diff --git a/tests/wpt/meta/css/css-tables/table-cell-overflow-auto-scrolled.html.ini b/tests/wpt/meta/css/css-tables/table-cell-overflow-auto-scrolled.html.ini deleted file mode 100644 index 55805c45ee2..00000000000 --- a/tests/wpt/meta/css/css-tables/table-cell-overflow-auto-scrolled.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[table-cell-overflow-auto-scrolled.html] - expected: FAIL diff --git a/tests/wpt/meta/css/css-values/acos-asin-atan-atan2-computed.html.ini b/tests/wpt/meta/css/css-values/acos-asin-atan-atan2-computed.html.ini index f62e0c34b6a..e755dd98bcb 100644 --- a/tests/wpt/meta/css/css-values/acos-asin-atan-atan2-computed.html.ini +++ b/tests/wpt/meta/css/css-values/acos-asin-atan-atan2-computed.html.ini @@ -10,3 +10,12 @@ [atan2(1vh + 0px, -1vh + 0px) should be used-value-equivalent to 135deg] expected: FAIL + + [calc(asin(sin(180deg * sibling-index()))) should be used-value-equivalent to 0deg] + expected: FAIL + + [calc(acos(cos(180deg * sibling-index()))) should be used-value-equivalent to 180deg] + expected: FAIL + + [calc(atan(tan(180deg * sibling-index()))) should be used-value-equivalent to 0deg] + expected: FAIL diff --git a/tests/wpt/meta/css/css-values/calc-size/animation/calc-size-interpolation-expansion.html.ini b/tests/wpt/meta/css/css-values/calc-size/animation/calc-size-interpolation-expansion.html.ini index c948860b7a6..dfa15d5b1d3 100644 --- a/tests/wpt/meta/css/css-values/calc-size/animation/calc-size-interpolation-expansion.html.ini +++ b/tests/wpt/meta/css/css-values/calc-size/animation/calc-size-interpolation-expansion.html.ini @@ -34,3 +34,21 @@ [value at progress 0.75 in animation of "width" from "calc-size(80px, size)" to "calc-size(calc-size(any, 20px), size + 20px)"] expected: FAIL + + [value at progress 0.75 in animation of "height" from "0px" to "calc-size(calc-size(min-content, size + 20px), 2 * size)"] + expected: FAIL + + [value at progress 0.75 in animation of "height" from "calc-size(min-content, size * 4)" to "calc-size(calc-size(min-content, size + 20px), 2 * size)"] + expected: FAIL + + [value at progress 0.75 in animation of "width" from "calc-size(fit-content, 20px)" to "calc-size(calc-size(fit-content, 3 * size + 10px), min(size + 20px, 2 * size - 30px) + 2 * size + 80px)"] + expected: FAIL + + [value at progress 0.75 in animation of "width" from "calc-size(50%, size)" to "calc-size(calc-size(45%, (2 * size)), size + 20px)"] + expected: FAIL + + [value at progress 0.75 in animation of "width" from "calc-size(40%, size)" to "calc-size(calc-size(10px, (2 * size)), size + 20px)"] + expected: FAIL + + [value at progress 0.75 in animation of "width" from "calc-size(80px, size)" to "calc-size(calc-size(10px, (2 * size)), size + 20px)"] + expected: FAIL diff --git a/tests/wpt/meta/css/css-values/exp-log-compute.html.ini b/tests/wpt/meta/css/css-values/exp-log-compute.html.ini index 6e8f24dad15..2c175897064 100644 --- a/tests/wpt/meta/css/css-values/exp-log-compute.html.ini +++ b/tests/wpt/meta/css/css-values/exp-log-compute.html.ini @@ -1,3 +1,6 @@ [exp-log-compute.html] [calc(log(1) + exp(0)) should be used-value-equivalent to 2] expected: FAIL + + [calc(e - exp(sibling-index())) should be used-value-equivalent to 0] + expected: FAIL diff --git a/tests/wpt/meta/css/css-values/hypot-pow-sqrt-computed.html.ini b/tests/wpt/meta/css/css-values/hypot-pow-sqrt-computed.html.ini index 28233a80012..fcb8199c11d 100644 --- a/tests/wpt/meta/css/css-values/hypot-pow-sqrt-computed.html.ini +++ b/tests/wpt/meta/css/css-values/hypot-pow-sqrt-computed.html.ini @@ -1,3 +1,12 @@ [hypot-pow-sqrt-computed.html] [calc(3px * pow(200, 4)) should be used-value-equivalent to 33554428px] expected: FAIL + + [sqrt(sibling-index()) should be used-value-equivalent to 2] + expected: FAIL + + [calc(1px * sqrt(sibling-index())) should be used-value-equivalent to 2px] + expected: FAIL + + [sqrt(pow(sibling-index(), 2)) should be used-value-equivalent to 4] + expected: FAIL diff --git a/tests/wpt/meta/css/css-values/random-computed.tentative.html.ini b/tests/wpt/meta/css/css-values/random-computed.tentative.html.ini index 1735b61c1c3..010c9699754 100644 --- a/tests/wpt/meta/css/css-values/random-computed.tentative.html.ini +++ b/tests/wpt/meta/css/css-values/random-computed.tentative.html.ini @@ -193,3 +193,138 @@ [Uses of a style rule on multiple elements with 'random(per-element, ...)'] expected: FAIL + + [Property scale value 'random(--foo element-shared, 3, 13)'] + expected: FAIL + + [Property scale value 'random(element-shared --foo, 4, 14)'] + expected: FAIL + + [Property scale value 'random(0, 10, 5)'] + expected: FAIL + + [Property scale value 'random(--foo, 10, 20, 5)'] + expected: FAIL + + [Property scale value 'random(--foo element-shared, 20, 30, 5)'] + expected: FAIL + + [Property scale value 'random(element-shared --foo, 30, 40, 5)'] + expected: FAIL + + [Property scale value 'random(40, 50, -5)'] + expected: FAIL + + [Property scale value 'random(NaN, 100, 10)'] + expected: FAIL + + [Property scale value 'random(10, NaN, 10)'] + expected: FAIL + + [Property scale value 'random(NaN, NaN, 10)'] + expected: FAIL + + [Property scale value 'random(NaN, 100, NaN)'] + expected: FAIL + + [Property scale value 'random(10, NaN, NaN)'] + expected: FAIL + + [Property scale value 'random(NaN, NaN, NaN)'] + expected: FAIL + + [Property scale value 'random(10, 100, NaN)'] + expected: FAIL + + [Property scale value 'calc(10 + random(NaN, 100, 10))'] + expected: FAIL + + [Property scale value 'calc(10 + random(10, NaN, 10))'] + expected: FAIL + + [Property scale value 'calc(10 + random(NaN, NaN, 10))'] + expected: FAIL + + [Property scale value 'calc(10 + random(NaN, 100, NaN))'] + expected: FAIL + + [Property scale value 'calc(10 + random(10, NaN, NaN))'] + expected: FAIL + + [Property scale value 'calc(10 + random(NaN, NaN, NaN))'] + expected: FAIL + + [Property scale value 'calc(10 + random(10, 100, NaN))'] + expected: FAIL + + [Property scale value 'random(infinity, 100, 10)'] + expected: FAIL + + [Property scale value 'random(infinity, infinity, 10)'] + expected: FAIL + + [Property scale value 'random(infinity, 100, infinity)'] + expected: FAIL + + [Property scale value 'random(infinity, infinity, infinity)'] + expected: FAIL + + [Property scale value 'calc(10 + random(infinity, infinity, 10))'] + expected: FAIL + + [Property scale value 'calc(10 + random(infinity, 100, infinity))'] + expected: FAIL + + [Property scale value 'calc(10 + random(infinity, infinity, infinity))'] + expected: FAIL + + [Property scale value 'calc(10 + random(infinity, 100, 10))'] + expected: FAIL + + [Property scale value 'random(10, infinity, 10)'] + expected: FAIL + + [Property scale value 'random(10, infinity, infinity)'] + expected: FAIL + + [Property scale value 'calc(10 + random(10, infinity, 10))'] + expected: FAIL + + [Property scale value 'calc(10 + random(10, infinity, infinity))'] + expected: FAIL + + [Property scale value 'random(10, 100, infinity)'] + expected: FAIL + + [Property scale value 'calc(10 + random(10, 100, infinity))'] + expected: FAIL + + [Property scale value 'random(10, 100, -infinity)'] + expected: FAIL + + [Property scale value 'calc(10 + random(10, 100, -infinity))'] + expected: FAIL + + [Property scale value on pseudo element '::before' 'random(element-shared, 9, 19)'] + expected: FAIL + + [Property scale value on pseudo element '::before' 'random(element-shared --foo, 10, 20)'] + expected: FAIL + + [Property translate value 'random(10%, 100%)'] + expected: FAIL + + [Maximum random: 'random(a, b)'] + expected: FAIL + + [Maximum random - shorthand: random(a, b))] + expected: FAIL + + [Shared by name within an element: 'random(--identifier, a, b)'] + expected: FAIL + + [Shared globally: random(--identifier element-shared, a, b)] + expected: FAIL + + [Fixed: random(fixed <number>, a, b)] + expected: FAIL diff --git a/tests/wpt/meta/css/css-values/random-serialize.tentative.html.ini b/tests/wpt/meta/css/css-values/random-serialize.tentative.html.ini index fd37a632766..69cd25283c3 100644 --- a/tests/wpt/meta/css/css-values/random-serialize.tentative.html.ini +++ b/tests/wpt/meta/css/css-values/random-serialize.tentative.html.ini @@ -61,3 +61,63 @@ [e.style['transition-delay'\] = "random(25ms, 50s, by 5s)" should set the property value] expected: FAIL + + [e.style['width'\] = "random(0px, 100px, 50px)" should set the property value] + expected: FAIL + + [e.style['width'\] = "random(auto, 0px, 100px)" should set the property value] + expected: FAIL + + [e.style['width'\] = "random(--foo element-shared, 0px, 100px)" should set the property value] + expected: FAIL + + [e.style['width'\] = "random(auto element-shared, 0px, 100px)" should set the property value] + expected: FAIL + + [e.style['width'\] = "random(element-shared --foo, 0px, 100px)" should set the property value] + expected: FAIL + + [e.style['width'\] = "random(element-shared auto, 0px, 100px)" should set the property value] + expected: FAIL + + [e.style['width'\] = "random(fixed 0.5, 0px, 100px)" should set the property value] + expected: FAIL + + [e.style['width'\] = "random(--foo, 0px, 100px, 50px)" should set the property value] + expected: FAIL + + [e.style['width'\] = "random(auto, 0px, 100px, 50px)" should set the property value] + expected: FAIL + + [e.style['width'\] = "random(--foo element-shared, 0px, 100px, 50px)" should set the property value] + expected: FAIL + + [e.style['width'\] = "random(auto element-shared, 0px, 100px, 50px)" should set the property value] + expected: FAIL + + [e.style['width'\] = "random(element-shared --foo, 0px, 100px, 50px)" should set the property value] + expected: FAIL + + [e.style['width'\] = "random(element-shared auto, 0px, 100px, 50px)" should set the property value] + expected: FAIL + + [e.style['width'\] = "random(fixed 0.5, 0px, 100px, 50px)" should set the property value] + expected: FAIL + + [e.style['width'\] = "random(-100px, -10px, -5px)" should set the property value] + expected: FAIL + + [e.style['width'\] = "random(fixed calc(2 / 4), 0px, 100px)" should set the property value] + expected: FAIL + + [e.style['max-lines'\] = "random(25, 50, 5)" should set the property value] + expected: FAIL + + [e.style['scale'\] = "random(0.5, 2.5, 0.1)" should set the property value] + expected: FAIL + + [e.style['rotate'\] = "random(25deg, 1turn, 5deg)" should set the property value] + expected: FAIL + + [e.style['transition-delay'\] = "random(25ms, 50s, 5s)" should set the property value] + expected: FAIL diff --git a/tests/wpt/meta/css/css-values/sin-cos-tan-computed.html.ini b/tests/wpt/meta/css/css-values/sin-cos-tan-computed.html.ini new file mode 100644 index 00000000000..1b9a2e265db --- /dev/null +++ b/tests/wpt/meta/css/css-values/sin-cos-tan-computed.html.ini @@ -0,0 +1,18 @@ +[sin-cos-tan-computed.html] + [calc(sin(pi * sibling-index()) should be used-value-equivalent to 0] + expected: FAIL + + [calc(cos(pi * sibling-index()) should be used-value-equivalent to -1] + expected: FAIL + + [calc(tan(pi * sibling-index()) should be used-value-equivalent to 0] + expected: FAIL + + [calc(sin(180deg * sibling-index()) should be used-value-equivalent to 0] + expected: FAIL + + [calc(cos(180deg * sibling-index()) should be used-value-equivalent to -1] + expected: FAIL + + [calc(tan(180deg * sibling-index()) should be used-value-equivalent to 0] + expected: FAIL diff --git a/tests/wpt/meta/css/css-values/urls/cross-origin/url-image-crossorigin-anonymous.sub.html.ini b/tests/wpt/meta/css/css-values/urls/cross-origin/url-image-crossorigin-anonymous.sub.html.ini new file mode 100644 index 00000000000..b61e7e43793 --- /dev/null +++ b/tests/wpt/meta/css/css-values/urls/cross-origin/url-image-crossorigin-anonymous.sub.html.ini @@ -0,0 +1,2 @@ +[url-image-crossorigin-anonymous.sub.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-values/urls/cross-origin/url-image-crossorigin-use-credentials.sub.html.ini b/tests/wpt/meta/css/css-values/urls/cross-origin/url-image-crossorigin-use-credentials.sub.html.ini new file mode 100644 index 00000000000..0da9d8aefde --- /dev/null +++ b/tests/wpt/meta/css/css-values/urls/cross-origin/url-image-crossorigin-use-credentials.sub.html.ini @@ -0,0 +1,2 @@ +[url-image-crossorigin-use-credentials.sub.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-values/urls/referrer-policy/no-referrer-when-downgrade/url-image-referrerpolicy-cross-origin.sub.html.ini b/tests/wpt/meta/css/css-values/urls/referrer-policy/no-referrer-when-downgrade/url-image-referrerpolicy-cross-origin.sub.html.ini new file mode 100644 index 00000000000..3b9d69761e7 --- /dev/null +++ b/tests/wpt/meta/css/css-values/urls/referrer-policy/no-referrer-when-downgrade/url-image-referrerpolicy-cross-origin.sub.html.ini @@ -0,0 +1,2 @@ +[url-image-referrerpolicy-cross-origin.sub.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-values/urls/referrer-policy/no-referrer-when-downgrade/url-image-referrerpolicy-same-origin.sub.html.ini b/tests/wpt/meta/css/css-values/urls/referrer-policy/no-referrer-when-downgrade/url-image-referrerpolicy-same-origin.sub.html.ini new file mode 100644 index 00000000000..26917cf20d2 --- /dev/null +++ b/tests/wpt/meta/css/css-values/urls/referrer-policy/no-referrer-when-downgrade/url-image-referrerpolicy-same-origin.sub.html.ini @@ -0,0 +1,2 @@ +[url-image-referrerpolicy-same-origin.sub.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-values/urls/referrer-policy/no-referrer/url-image-referrerpolicy-cross-origin.sub.html.ini b/tests/wpt/meta/css/css-values/urls/referrer-policy/no-referrer/url-image-referrerpolicy-cross-origin.sub.html.ini new file mode 100644 index 00000000000..3b9d69761e7 --- /dev/null +++ b/tests/wpt/meta/css/css-values/urls/referrer-policy/no-referrer/url-image-referrerpolicy-cross-origin.sub.html.ini @@ -0,0 +1,2 @@ +[url-image-referrerpolicy-cross-origin.sub.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-values/urls/referrer-policy/no-referrer/url-image-referrerpolicy-same-origin.sub.html.ini b/tests/wpt/meta/css/css-values/urls/referrer-policy/no-referrer/url-image-referrerpolicy-same-origin.sub.html.ini new file mode 100644 index 00000000000..26917cf20d2 --- /dev/null +++ b/tests/wpt/meta/css/css-values/urls/referrer-policy/no-referrer/url-image-referrerpolicy-same-origin.sub.html.ini @@ -0,0 +1,2 @@ +[url-image-referrerpolicy-same-origin.sub.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-values/urls/referrer-policy/origin-when-cross-origin/url-image-referrerpolicy-cross-origin.sub.html.ini b/tests/wpt/meta/css/css-values/urls/referrer-policy/origin-when-cross-origin/url-image-referrerpolicy-cross-origin.sub.html.ini new file mode 100644 index 00000000000..3b9d69761e7 --- /dev/null +++ b/tests/wpt/meta/css/css-values/urls/referrer-policy/origin-when-cross-origin/url-image-referrerpolicy-cross-origin.sub.html.ini @@ -0,0 +1,2 @@ +[url-image-referrerpolicy-cross-origin.sub.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-values/urls/referrer-policy/origin-when-cross-origin/url-image-referrerpolicy-same-origin.sub.html.ini b/tests/wpt/meta/css/css-values/urls/referrer-policy/origin-when-cross-origin/url-image-referrerpolicy-same-origin.sub.html.ini new file mode 100644 index 00000000000..26917cf20d2 --- /dev/null +++ b/tests/wpt/meta/css/css-values/urls/referrer-policy/origin-when-cross-origin/url-image-referrerpolicy-same-origin.sub.html.ini @@ -0,0 +1,2 @@ +[url-image-referrerpolicy-same-origin.sub.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-values/urls/referrer-policy/origin/url-image-referrerpolicy-cross-origin.sub.html.ini b/tests/wpt/meta/css/css-values/urls/referrer-policy/origin/url-image-referrerpolicy-cross-origin.sub.html.ini new file mode 100644 index 00000000000..3b9d69761e7 --- /dev/null +++ b/tests/wpt/meta/css/css-values/urls/referrer-policy/origin/url-image-referrerpolicy-cross-origin.sub.html.ini @@ -0,0 +1,2 @@ +[url-image-referrerpolicy-cross-origin.sub.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-values/urls/referrer-policy/origin/url-image-referrerpolicy-same-origin.sub.html.ini b/tests/wpt/meta/css/css-values/urls/referrer-policy/origin/url-image-referrerpolicy-same-origin.sub.html.ini new file mode 100644 index 00000000000..26917cf20d2 --- /dev/null +++ b/tests/wpt/meta/css/css-values/urls/referrer-policy/origin/url-image-referrerpolicy-same-origin.sub.html.ini @@ -0,0 +1,2 @@ +[url-image-referrerpolicy-same-origin.sub.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-values/urls/referrer-policy/same-origin/url-image-referrerpolicy-cross-origin.sub.html.ini b/tests/wpt/meta/css/css-values/urls/referrer-policy/same-origin/url-image-referrerpolicy-cross-origin.sub.html.ini new file mode 100644 index 00000000000..3b9d69761e7 --- /dev/null +++ b/tests/wpt/meta/css/css-values/urls/referrer-policy/same-origin/url-image-referrerpolicy-cross-origin.sub.html.ini @@ -0,0 +1,2 @@ +[url-image-referrerpolicy-cross-origin.sub.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-values/urls/referrer-policy/same-origin/url-image-referrerpolicy-same-origin.sub.html.ini b/tests/wpt/meta/css/css-values/urls/referrer-policy/same-origin/url-image-referrerpolicy-same-origin.sub.html.ini new file mode 100644 index 00000000000..26917cf20d2 --- /dev/null +++ b/tests/wpt/meta/css/css-values/urls/referrer-policy/same-origin/url-image-referrerpolicy-same-origin.sub.html.ini @@ -0,0 +1,2 @@ +[url-image-referrerpolicy-same-origin.sub.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-values/urls/referrer-policy/strict-origin-when-cross-origin/url-image-referrerpolicy-cross-origin.sub.html.ini b/tests/wpt/meta/css/css-values/urls/referrer-policy/strict-origin-when-cross-origin/url-image-referrerpolicy-cross-origin.sub.html.ini new file mode 100644 index 00000000000..3b9d69761e7 --- /dev/null +++ b/tests/wpt/meta/css/css-values/urls/referrer-policy/strict-origin-when-cross-origin/url-image-referrerpolicy-cross-origin.sub.html.ini @@ -0,0 +1,2 @@ +[url-image-referrerpolicy-cross-origin.sub.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-values/urls/referrer-policy/strict-origin-when-cross-origin/url-image-referrerpolicy-same-origin.sub.html.ini b/tests/wpt/meta/css/css-values/urls/referrer-policy/strict-origin-when-cross-origin/url-image-referrerpolicy-same-origin.sub.html.ini new file mode 100644 index 00000000000..26917cf20d2 --- /dev/null +++ b/tests/wpt/meta/css/css-values/urls/referrer-policy/strict-origin-when-cross-origin/url-image-referrerpolicy-same-origin.sub.html.ini @@ -0,0 +1,2 @@ +[url-image-referrerpolicy-same-origin.sub.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-values/urls/referrer-policy/strict-origin/url-image-referrerpolicy-cross-origin.sub.html.ini b/tests/wpt/meta/css/css-values/urls/referrer-policy/strict-origin/url-image-referrerpolicy-cross-origin.sub.html.ini new file mode 100644 index 00000000000..3b9d69761e7 --- /dev/null +++ b/tests/wpt/meta/css/css-values/urls/referrer-policy/strict-origin/url-image-referrerpolicy-cross-origin.sub.html.ini @@ -0,0 +1,2 @@ +[url-image-referrerpolicy-cross-origin.sub.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-values/urls/referrer-policy/strict-origin/url-image-referrerpolicy-same-origin.sub.html.ini b/tests/wpt/meta/css/css-values/urls/referrer-policy/strict-origin/url-image-referrerpolicy-same-origin.sub.html.ini new file mode 100644 index 00000000000..26917cf20d2 --- /dev/null +++ b/tests/wpt/meta/css/css-values/urls/referrer-policy/strict-origin/url-image-referrerpolicy-same-origin.sub.html.ini @@ -0,0 +1,2 @@ +[url-image-referrerpolicy-same-origin.sub.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-values/urls/referrer-policy/unsafe-url/url-image-referrerpolicy-cross-origin.sub.html.ini b/tests/wpt/meta/css/css-values/urls/referrer-policy/unsafe-url/url-image-referrerpolicy-cross-origin.sub.html.ini new file mode 100644 index 00000000000..3b9d69761e7 --- /dev/null +++ b/tests/wpt/meta/css/css-values/urls/referrer-policy/unsafe-url/url-image-referrerpolicy-cross-origin.sub.html.ini @@ -0,0 +1,2 @@ +[url-image-referrerpolicy-cross-origin.sub.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-values/urls/referrer-policy/unsafe-url/url-image-referrerpolicy-same-origin.sub.html.ini b/tests/wpt/meta/css/css-values/urls/referrer-policy/unsafe-url/url-image-referrerpolicy-same-origin.sub.html.ini new file mode 100644 index 00000000000..26917cf20d2 --- /dev/null +++ b/tests/wpt/meta/css/css-values/urls/referrer-policy/unsafe-url/url-image-referrerpolicy-same-origin.sub.html.ini @@ -0,0 +1,2 @@ +[url-image-referrerpolicy-same-origin.sub.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-values/urls/url-request-modifiers-computed.sub.html.ini b/tests/wpt/meta/css/css-values/urls/url-request-modifiers-computed.sub.html.ini new file mode 100644 index 00000000000..74e74468e0d --- /dev/null +++ b/tests/wpt/meta/css/css-values/urls/url-request-modifiers-computed.sub.html.ini @@ -0,0 +1,66 @@ +[url-request-modifiers-computed.sub.html] + [Property background-image value 'url("http://web-platform.test:8000/css/support/1x1-green.png" crossorigin(anonymous))'] + expected: FAIL + + [Property background-image value 'url("http://web-platform.test:8000/css/support/1x1-green.png" crossorigin(use-credentials))'] + expected: FAIL + + [Property background-image value 'url("http://web-platform.test:8000/css/support/1x1-green.png" integrity("sha384-foobar"))'] + expected: FAIL + + [Property background-image value 'url("http://web-platform.test:8000/css/support/1x1-green.png" integrity(""))'] + expected: FAIL + + [Property background-image value 'url("http://web-platform.test:8000/css/support/1x1-green.png" referrerpolicy(no-referrer))'] + expected: FAIL + + [Property background-image value 'url("http://web-platform.test:8000/css/support/1x1-green.png" referrerpolicy(no-referrer-when-downgrade))'] + expected: FAIL + + [Property background-image value 'url("http://web-platform.test:8000/css/support/1x1-green.png" referrerpolicy(same-origin))'] + expected: FAIL + + [Property background-image value 'url("http://web-platform.test:8000/css/support/1x1-green.png" referrerpolicy(origin))'] + expected: FAIL + + [Property background-image value 'url("http://web-platform.test:8000/css/support/1x1-green.png" referrerpolicy(strict-origin))'] + expected: FAIL + + [Property background-image value 'url("http://web-platform.test:8000/css/support/1x1-green.png" referrerpolicy(origin-when-cross-origin))'] + expected: FAIL + + [Property background-image value 'url("http://web-platform.test:8000/css/support/1x1-green.png" referrerpolicy(strict-origin-when-cross-origin))'] + expected: FAIL + + [Property background-image value 'url("http://web-platform.test:8000/css/support/1x1-green.png" referrerpolicy(unsafe-url))'] + expected: FAIL + + [Property background-image value 'url("http://web-platform.test:8000/css/support/1x1-green.png" crossorigin(anonymous) integrity("sha384-foobar"))'] + expected: FAIL + + [Property background-image value 'url("http://web-platform.test:8000/css/support/1x1-green.png" integrity("sha384-foobar") crossorigin(anonymous))'] + expected: FAIL + + [Property background-image value 'url("http://web-platform.test:8000/css/support/1x1-green.png" integrity("sha384-foobar") referrerpolicy(no-referrer))'] + expected: FAIL + + [Property background-image value 'url("http://web-platform.test:8000/css/support/1x1-green.png" referrerpolicy(no-referrer) integrity("sha384-foobar"))'] + expected: FAIL + + [Property background-image value 'url("http://web-platform.test:8000/css/support/1x1-green.png" crossorigin(anonymous) referrerpolicy(no-referrer))'] + expected: FAIL + + [Property background-image value 'url("http://web-platform.test:8000/css/support/1x1-green.png" referrerpolicy(no-referrer) crossorigin(anonymous))'] + expected: FAIL + + [Property background-image value 'url("http://web-platform.test:8000/css/support/1x1-green.png" crossorigin(anonymous) integrity("sha384-foobar") referrerpolicy(no-referrer))'] + expected: FAIL + + [Property background-image value 'url("http://web-platform.test:8000/css/support/1x1-green.png" integrity("sha384-foobar") referrerpolicy(no-referrer) crossorigin(anonymous))'] + expected: FAIL + + [Property background-image value 'url("http://web-platform.test:8000/css/support/1x1-green.png" referrerpolicy(no-referrer) crossorigin(anonymous) integrity("sha384-foobar"))'] + expected: FAIL + + [Property background-image value 'url("http://web-platform.test:8000/css/support/1x1-green.png" referrerpolicy(no-referrer) integrity("sha384-foobar") crossorigin(anonymous))'] + expected: FAIL diff --git a/tests/wpt/meta/css/css-values/urls/url-request-modifiers-serialize.sub.html.ini b/tests/wpt/meta/css/css-values/urls/url-request-modifiers-serialize.sub.html.ini new file mode 100644 index 00000000000..836bcf624e6 --- /dev/null +++ b/tests/wpt/meta/css/css-values/urls/url-request-modifiers-serialize.sub.html.ini @@ -0,0 +1,66 @@ +[url-request-modifiers-serialize.sub.html] + [e.style['background-image'\] = "url(\\"http://web-platform.test:8000/css/support/1x1-green.png\\" crossorigin(anonymous))" should set the property value] + expected: FAIL + + [e.style['background-image'\] = "url(\\"http://web-platform.test:8000/css/support/1x1-green.png\\" crossorigin(use-credentials))" should set the property value] + expected: FAIL + + [e.style['background-image'\] = "url(\\"http://web-platform.test:8000/css/support/1x1-green.png\\" integrity(\\"sha384-foobar\\"))" should set the property value] + expected: FAIL + + [e.style['background-image'\] = "url(\\"http://web-platform.test:8000/css/support/1x1-green.png\\" integrity(\\"\\"))" should set the property value] + expected: FAIL + + [e.style['background-image'\] = "url(\\"http://web-platform.test:8000/css/support/1x1-green.png\\" referrerpolicy(no-referrer))" should set the property value] + expected: FAIL + + [e.style['background-image'\] = "url(\\"http://web-platform.test:8000/css/support/1x1-green.png\\" referrerpolicy(no-referrer-when-downgrade))" should set the property value] + expected: FAIL + + [e.style['background-image'\] = "url(\\"http://web-platform.test:8000/css/support/1x1-green.png\\" referrerpolicy(same-origin))" should set the property value] + expected: FAIL + + [e.style['background-image'\] = "url(\\"http://web-platform.test:8000/css/support/1x1-green.png\\" referrerpolicy(origin))" should set the property value] + expected: FAIL + + [e.style['background-image'\] = "url(\\"http://web-platform.test:8000/css/support/1x1-green.png\\" referrerpolicy(strict-origin))" should set the property value] + expected: FAIL + + [e.style['background-image'\] = "url(\\"http://web-platform.test:8000/css/support/1x1-green.png\\" referrerpolicy(origin-when-cross-origin))" should set the property value] + expected: FAIL + + [e.style['background-image'\] = "url(\\"http://web-platform.test:8000/css/support/1x1-green.png\\" referrerpolicy(strict-origin-when-cross-origin))" should set the property value] + expected: FAIL + + [e.style['background-image'\] = "url(\\"http://web-platform.test:8000/css/support/1x1-green.png\\" referrerpolicy(unsafe-url))" should set the property value] + expected: FAIL + + [e.style['background-image'\] = "url(\\"http://web-platform.test:8000/css/support/1x1-green.png\\" crossorigin(anonymous) integrity(\\"sha384-foobar\\"))" should set the property value] + expected: FAIL + + [e.style['background-image'\] = "url(\\"http://web-platform.test:8000/css/support/1x1-green.png\\" integrity(\\"sha384-foobar\\") crossorigin(anonymous))" should set the property value] + expected: FAIL + + [e.style['background-image'\] = "url(\\"http://web-platform.test:8000/css/support/1x1-green.png\\" integrity(\\"sha384-foobar\\") referrerpolicy(no-referrer))" should set the property value] + expected: FAIL + + [e.style['background-image'\] = "url(\\"http://web-platform.test:8000/css/support/1x1-green.png\\" referrerpolicy(no-referrer) integrity(\\"sha384-foobar\\"))" should set the property value] + expected: FAIL + + [e.style['background-image'\] = "url(\\"http://web-platform.test:8000/css/support/1x1-green.png\\" crossorigin(anonymous) referrerpolicy(no-referrer))" should set the property value] + expected: FAIL + + [e.style['background-image'\] = "url(\\"http://web-platform.test:8000/css/support/1x1-green.png\\" referrerpolicy(no-referrer) crossorigin(anonymous))" should set the property value] + expected: FAIL + + [e.style['background-image'\] = "url(\\"http://web-platform.test:8000/css/support/1x1-green.png\\" crossorigin(anonymous) integrity(\\"sha384-foobar\\") referrerpolicy(no-referrer))" should set the property value] + expected: FAIL + + [e.style['background-image'\] = "url(\\"http://web-platform.test:8000/css/support/1x1-green.png\\" integrity(\\"sha384-foobar\\") referrerpolicy(no-referrer) crossorigin(anonymous))" should set the property value] + expected: FAIL + + [e.style['background-image'\] = "url(\\"http://web-platform.test:8000/css/support/1x1-green.png\\" referrerpolicy(no-referrer) crossorigin(anonymous) integrity(\\"sha384-foobar\\"))" should set the property value] + expected: FAIL + + [e.style['background-image'\] = "url(\\"http://web-platform.test:8000/css/support/1x1-green.png\\" referrerpolicy(no-referrer) integrity(\\"sha384-foobar\\") crossorigin(anonymous))" should set the property value] + expected: FAIL diff --git a/tests/wpt/meta/css/filter-effects/empty-element-with-filter-004.html.ini b/tests/wpt/meta/css/filter-effects/empty-element-with-filter-004.html.ini new file mode 100644 index 00000000000..8c94e529496 --- /dev/null +++ b/tests/wpt/meta/css/filter-effects/empty-element-with-filter-004.html.ini @@ -0,0 +1,2 @@ +[empty-element-with-filter-004.html] + expected: FAIL diff --git a/tests/wpt/meta/custom-elements/revamped-scoped-registry/Construct.tentative.html.ini b/tests/wpt/meta/custom-elements/registries/Construct.html.ini index b05c535fd9e..00901c2c5b4 100644 --- a/tests/wpt/meta/custom-elements/revamped-scoped-registry/Construct.tentative.html.ini +++ b/tests/wpt/meta/custom-elements/registries/Construct.html.ini @@ -1,4 +1,4 @@ -[Construct.tentative.html] +[Construct.html] [A constructor with only a scoped custom element registry definition should fail upon construction] expected: FAIL diff --git a/tests/wpt/meta/custom-elements/revamped-scoped-registry/CustomElementRegistry-define.tentative.html.ini b/tests/wpt/meta/custom-elements/registries/CustomElementRegistry-define.html.ini index 9f82a56caf8..f3a508799d7 100644 --- a/tests/wpt/meta/custom-elements/revamped-scoped-registry/CustomElementRegistry-define.tentative.html.ini +++ b/tests/wpt/meta/custom-elements/registries/CustomElementRegistry-define.html.ini @@ -1,4 +1,4 @@ -[CustomElementRegistry-define.tentative.html] +[CustomElementRegistry-define.html] [Create a CustomElementRegistry not identically equal to window.customElements] expected: FAIL diff --git a/tests/wpt/meta/custom-elements/revamped-scoped-registry/CustomElementRegistry-initialize.tentative.html.ini b/tests/wpt/meta/custom-elements/registries/CustomElementRegistry-initialize.html.ini index 4a95d715009..f15268ae654 100644 --- a/tests/wpt/meta/custom-elements/revamped-scoped-registry/CustomElementRegistry-initialize.tentative.html.ini +++ b/tests/wpt/meta/custom-elements/registries/CustomElementRegistry-initialize.html.ini @@ -1,30 +1,21 @@ -[CustomElementRegistry-initialize.tentative.html] +[CustomElementRegistry-initialize.html] [initialize is a function on both global and scoped CustomElementRegistry] expected: FAIL - [initialize sets element.customElements to the global registry] + [initialize sets element.customElementRegistry to the global registry] expected: FAIL [initialize does not set the registry of nested shadow tree to the global registry] expected: FAIL - [initialize sets element.customElements to a scoped registry] + [initialize sets element.customElementRegistry to a scoped registry] expected: FAIL [initialize does not set the registry of nested shadow tree to a scoped registry] expected: FAIL - [initialize sets element.customElements permantently] + [initialize sets element.customElementRegistry permantently] expected: FAIL [initialize is no-op on a subtree with a non-null registry] expected: FAIL - - [initialize sets element.customElementRegistry to the global registry] - expected: FAIL - - [initialize sets element.customElementRegistry to a scoped registry] - expected: FAIL - - [initialize sets element.customElementRegistry permantently] - expected: FAIL diff --git a/tests/wpt/meta/custom-elements/revamped-scoped-registry/CustomElementRegistry-multi-register.tentative.html.ini b/tests/wpt/meta/custom-elements/registries/CustomElementRegistry-multi-register.html.ini index 6823e0597a6..a3a9b97cef0 100644 --- a/tests/wpt/meta/custom-elements/revamped-scoped-registry/CustomElementRegistry-multi-register.tentative.html.ini +++ b/tests/wpt/meta/custom-elements/registries/CustomElementRegistry-multi-register.html.ini @@ -1,4 +1,4 @@ -[CustomElementRegistry-multi-register.tentative.html] +[CustomElementRegistry-multi-register.html] [Same constructor can be registered to different registries] expected: FAIL diff --git a/tests/wpt/meta/custom-elements/revamped-scoped-registry/CustomElementRegistry-upgrade.tentative.html.ini b/tests/wpt/meta/custom-elements/registries/CustomElementRegistry-upgrade.html.ini index 365618e2f81..8f5497a46ca 100644 --- a/tests/wpt/meta/custom-elements/revamped-scoped-registry/CustomElementRegistry-upgrade.tentative.html.ini +++ b/tests/wpt/meta/custom-elements/registries/CustomElementRegistry-upgrade.html.ini @@ -1,4 +1,4 @@ -[CustomElementRegistry-upgrade.tentative.html] +[CustomElementRegistry-upgrade.html] [upgrade is a function on both global and scoped CustomElementRegistry] expected: FAIL diff --git a/tests/wpt/meta/custom-elements/registries/Document-createElement.html.ini b/tests/wpt/meta/custom-elements/registries/Document-createElement.html.ini new file mode 100644 index 00000000000..1867ea7e6b9 --- /dev/null +++ b/tests/wpt/meta/custom-elements/registries/Document-createElement.html.ini @@ -0,0 +1,2 @@ +[Document-createElement.html] + expected: ERROR diff --git a/tests/wpt/meta/custom-elements/registries/Document-createElementNS.html.ini b/tests/wpt/meta/custom-elements/registries/Document-createElementNS.html.ini new file mode 100644 index 00000000000..44a90a38b12 --- /dev/null +++ b/tests/wpt/meta/custom-elements/registries/Document-createElementNS.html.ini @@ -0,0 +1,2 @@ +[Document-createElementNS.html] + expected: ERROR diff --git a/tests/wpt/meta/custom-elements/revamped-scoped-registry/Document-customElementRegistry.html.ini b/tests/wpt/meta/custom-elements/registries/Document-customElementRegistry.html.ini index fc4c3a1d674..fc4c3a1d674 100644 --- a/tests/wpt/meta/custom-elements/revamped-scoped-registry/Document-customElementRegistry.html.ini +++ b/tests/wpt/meta/custom-elements/registries/Document-customElementRegistry.html.ini diff --git a/tests/wpt/meta/custom-elements/registries/Document-importNode.html.ini b/tests/wpt/meta/custom-elements/registries/Document-importNode.html.ini new file mode 100644 index 00000000000..12d4cc44da9 --- /dev/null +++ b/tests/wpt/meta/custom-elements/registries/Document-importNode.html.ini @@ -0,0 +1,2 @@ +[Document-importNode.html] + expected: ERROR diff --git a/tests/wpt/meta/custom-elements/revamped-scoped-registry/Element-customElementRegistry-exceptions.tentative.html.ini b/tests/wpt/meta/custom-elements/registries/Element-customElementRegistry-exceptions.html.ini index 3f91bed79a9..91d4fac698d 100644 --- a/tests/wpt/meta/custom-elements/revamped-scoped-registry/Element-customElementRegistry-exceptions.tentative.html.ini +++ b/tests/wpt/meta/custom-elements/registries/Element-customElementRegistry-exceptions.html.ini @@ -1,4 +1,4 @@ -[Element-customElementRegistry-exceptions.tentative.html] +[Element-customElementRegistry-exceptions.html] [customElementRegistry on a failed custom element created by calling createElement on CustomElementRegistry should return the registry] expected: FAIL diff --git a/tests/wpt/meta/custom-elements/revamped-scoped-registry/Element-customElementRegistry.tentative.html.ini b/tests/wpt/meta/custom-elements/registries/Element-customElementRegistry.html.ini index ac17cdb1e38..e5a8d9736ea 100644 --- a/tests/wpt/meta/custom-elements/revamped-scoped-registry/Element-customElementRegistry.tentative.html.ini +++ b/tests/wpt/meta/custom-elements/registries/Element-customElementRegistry.html.ini @@ -1,4 +1,4 @@ -[Element-customElementRegistry.tentative.html] +[Element-customElementRegistry.html] [customElementRegistry on a newly constrcuted element should return window.customElements by default] expected: FAIL diff --git a/tests/wpt/meta/custom-elements/revamped-scoped-registry/Element-innerHTML.tentative.html.ini b/tests/wpt/meta/custom-elements/registries/Element-innerHTML.html.ini index 838d726b586..00b7afc465a 100644 --- a/tests/wpt/meta/custom-elements/revamped-scoped-registry/Element-innerHTML.tentative.html.ini +++ b/tests/wpt/meta/custom-elements/registries/Element-innerHTML.html.ini @@ -1,4 +1,4 @@ -[Element-innerHTML.tentative.html] +[Element-innerHTML.html] [innerHTML on a disconnected element should use the scoped registry it was created with] expected: FAIL diff --git a/tests/wpt/meta/custom-elements/revamped-scoped-registry/ShadowRoot-init-customElementRegistry.tentative.html.ini b/tests/wpt/meta/custom-elements/registries/ShadowRoot-init-customElementRegistry.html.ini index c8173a2d655..816737280ed 100644 --- a/tests/wpt/meta/custom-elements/revamped-scoped-registry/ShadowRoot-init-customElementRegistry.tentative.html.ini +++ b/tests/wpt/meta/custom-elements/registries/ShadowRoot-init-customElementRegistry.html.ini @@ -1,4 +1,4 @@ -[ShadowRoot-init-customElementRegistry.tentative.html] +[ShadowRoot-init-customElementRegistry.html] [A newly attached disconnected ShadowRoot should use the global registry by default] expected: FAIL diff --git a/tests/wpt/meta/custom-elements/revamped-scoped-registry/ShadowRoot-innerHTML.tentative.html.ini b/tests/wpt/meta/custom-elements/registries/ShadowRoot-innerHTML.html.ini index 1d83cf7f2e0..b0d227521cd 100644 --- a/tests/wpt/meta/custom-elements/revamped-scoped-registry/ShadowRoot-innerHTML.tentative.html.ini +++ b/tests/wpt/meta/custom-elements/registries/ShadowRoot-innerHTML.html.ini @@ -1,4 +1,4 @@ -[ShadowRoot-innerHTML.tentative.html] +[ShadowRoot-innerHTML.html] [innerHTML on a shadow root should use the scoped registry] expected: FAIL diff --git a/tests/wpt/meta/custom-elements/revamped-scoped-registry/constructor-reentry-with-different-definition.tentative.html.ini b/tests/wpt/meta/custom-elements/registries/constructor-reentry-with-different-definition.html.ini index 5a9fc287227..2169b2e7f71 100644 --- a/tests/wpt/meta/custom-elements/revamped-scoped-registry/constructor-reentry-with-different-definition.tentative.html.ini +++ b/tests/wpt/meta/custom-elements/registries/constructor-reentry-with-different-definition.html.ini @@ -1,4 +1,4 @@ -[constructor-reentry-with-different-definition.tentative.html] +[constructor-reentry-with-different-definition.html] [Re-entry via upgrade before calling super()] expected: FAIL diff --git a/tests/wpt/meta/custom-elements/revamped-scoped-registry/initial-about-blank.tentative.window.js.ini b/tests/wpt/meta/custom-elements/registries/initial-about-blank.window.js.ini index a589a91de22..40b0c57028d 100644 --- a/tests/wpt/meta/custom-elements/revamped-scoped-registry/initial-about-blank.tentative.window.js.ini +++ b/tests/wpt/meta/custom-elements/registries/initial-about-blank.window.js.ini @@ -1,3 +1,3 @@ -[initial-about-blank.tentative.window.html] +[initial-about-blank.window.html] [Each navigable document has its own registry] expected: FAIL diff --git a/tests/wpt/meta/custom-elements/custom-element-registry/per-global.html.ini b/tests/wpt/meta/custom-elements/registries/per-global.html.ini index ed02ddb6100..ed02ddb6100 100644 --- a/tests/wpt/meta/custom-elements/custom-element-registry/per-global.html.ini +++ b/tests/wpt/meta/custom-elements/registries/per-global.html.ini diff --git a/tests/wpt/meta/custom-elements/registries/pseudo-class-defined.window.js.ini b/tests/wpt/meta/custom-elements/registries/pseudo-class-defined.window.js.ini new file mode 100644 index 00000000000..480bdb54402 --- /dev/null +++ b/tests/wpt/meta/custom-elements/registries/pseudo-class-defined.window.js.ini @@ -0,0 +1,9 @@ +[pseudo-class-defined.window.html] + ["uncustomized" :defined doesn't care about your registry'] + expected: FAIL + + ["custom" :defined doesn't care about your registry] + expected: FAIL + + [pseudo-class-defined] + expected: FAIL diff --git a/tests/wpt/meta/custom-elements/revamped-scoped-registry/scoped-registry-define-upgrade-criteria.tentative.html.ini b/tests/wpt/meta/custom-elements/registries/scoped-registry-define-upgrade-criteria.html.ini index 430c566a2aa..1e2293b249e 100644 --- a/tests/wpt/meta/custom-elements/revamped-scoped-registry/scoped-registry-define-upgrade-criteria.tentative.html.ini +++ b/tests/wpt/meta/custom-elements/registries/scoped-registry-define-upgrade-criteria.html.ini @@ -1,4 +1,4 @@ -[scoped-registry-define-upgrade-criteria.tentative.html] +[scoped-registry-define-upgrade-criteria.html] [Adding definition to global registry should not affect shadow roots using scoped registry] expected: FAIL diff --git a/tests/wpt/meta/custom-elements/revamped-scoped-registry/scoped-registry-define-upgrade-order.tentative.html.ini b/tests/wpt/meta/custom-elements/registries/scoped-registry-define-upgrade-order.html.ini index 8a6ec8f3e04..8fef8d0e42f 100644 --- a/tests/wpt/meta/custom-elements/revamped-scoped-registry/scoped-registry-define-upgrade-order.tentative.html.ini +++ b/tests/wpt/meta/custom-elements/registries/scoped-registry-define-upgrade-order.html.ini @@ -1,4 +1,4 @@ -[scoped-registry-define-upgrade-order.tentative.html] +[scoped-registry-define-upgrade-order.html] [Upgrade in tree order in the same tree scope] expected: FAIL diff --git a/tests/wpt/meta/custom-elements/revamped-scoped-registry/scoped-registry-registry-define-get-etc.tentative.html.ini b/tests/wpt/meta/custom-elements/registries/scoped-registry-registry-define-get-etc.html.ini index ef885f7b00b..df8446a2f98 100644 --- a/tests/wpt/meta/custom-elements/revamped-scoped-registry/scoped-registry-registry-define-get-etc.tentative.html.ini +++ b/tests/wpt/meta/custom-elements/registries/scoped-registry-registry-define-get-etc.html.ini @@ -1,4 +1,4 @@ -[scoped-registry-registry-define-get-etc.tentative.html] +[scoped-registry-registry-define-get-etc.html] [Custom element registries with a registered custom element return the class in their get method, and the name in their getName method] expected: FAIL diff --git a/tests/wpt/meta/custom-elements/revamped-scoped-registry/template.tentative.window.js.ini b/tests/wpt/meta/custom-elements/registries/template.window.js.ini index fef1ec63910..9f97ee65f99 100644 --- a/tests/wpt/meta/custom-elements/revamped-scoped-registry/template.tentative.window.js.ini +++ b/tests/wpt/meta/custom-elements/registries/template.window.js.ini @@ -1,5 +1,5 @@ -[template.tentative.window.html] - [shadowRootCustomElements reflects as string] +[template.window.html] + [shadowRootCustomElementRegistry reflects as string] expected: FAIL [Serializing a ShadowRoot with a null registry] @@ -7,6 +7,3 @@ [Serializing a ShadowRoot with a registry that differs from its host] expected: FAIL - - [shadowRootCustomElementRegistry reflects as string] - expected: FAIL diff --git a/tests/wpt/meta/custom-elements/revamped-scoped-registry/Document-createElement.tentative.html.ini b/tests/wpt/meta/custom-elements/revamped-scoped-registry/Document-createElement.tentative.html.ini deleted file mode 100644 index 2ce6b5aec9a..00000000000 --- a/tests/wpt/meta/custom-elements/revamped-scoped-registry/Document-createElement.tentative.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[Document-createElement.tentative.html] - expected: ERROR diff --git a/tests/wpt/meta/custom-elements/revamped-scoped-registry/Document-createElementNS.tentative.html.ini b/tests/wpt/meta/custom-elements/revamped-scoped-registry/Document-createElementNS.tentative.html.ini deleted file mode 100644 index 80cb597dd8d..00000000000 --- a/tests/wpt/meta/custom-elements/revamped-scoped-registry/Document-createElementNS.tentative.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[Document-createElementNS.tentative.html] - expected: ERROR diff --git a/tests/wpt/meta/custom-elements/revamped-scoped-registry/Document-importNode.tentative.html.ini b/tests/wpt/meta/custom-elements/revamped-scoped-registry/Document-importNode.tentative.html.ini deleted file mode 100644 index f80dd2728f0..00000000000 --- a/tests/wpt/meta/custom-elements/revamped-scoped-registry/Document-importNode.tentative.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[Document-importNode.tentative.html] - expected: ERROR diff --git a/tests/wpt/meta/custom-elements/revamped-scoped-registry/idlharness.tentative.window.js.ini b/tests/wpt/meta/custom-elements/revamped-scoped-registry/idlharness.tentative.window.js.ini new file mode 100644 index 00000000000..de769452cbf --- /dev/null +++ b/tests/wpt/meta/custom-elements/revamped-scoped-registry/idlharness.tentative.window.js.ini @@ -0,0 +1,42 @@ +[idlharness.tentative.window.html] + [idl_test setup] + expected: FAIL + + [idl_test validation] + expected: FAIL + + [Partial interface CustomElementRegistry: member names are unique] + expected: FAIL + + [Partial interface HTMLTemplateElement: member names are unique] + expected: FAIL + + [Partial interface Element: member names are unique] + expected: FAIL + + [Partial dictionary ShadowRootInit: member names are unique] + expected: FAIL + + [Partial dictionary ElementCreationOptions: member names are unique] + expected: FAIL + + [Document includes DocumentOrShadowRoot: member names are unique] + expected: FAIL + + [ShadowRoot includes DocumentOrShadowRoot: member names are unique] + expected: FAIL + + [HTMLTemplateElement interface: attribute shadowRootCustomElementRegistry] + expected: FAIL + + [CustomElementRegistry interface: operation initialize(Node)] + expected: FAIL + + [Document interface: attribute customElementRegistry] + expected: FAIL + + [ShadowRoot interface: attribute customElementRegistry] + expected: FAIL + + [Element interface: attribute customElementRegistry] + expected: FAIL diff --git a/tests/wpt/meta/dom/idlharness.window.js.ini b/tests/wpt/meta/dom/idlharness.window.js.ini index 0e40be437e7..f66b84985ad 100644 --- a/tests/wpt/meta/dom/idlharness.window.js.ini +++ b/tests/wpt/meta/dom/idlharness.window.js.ini @@ -436,3 +436,24 @@ [Element interface: calling moveBefore(Node, Node?) on element with too few arguments must throw TypeError] expected: FAIL + + [Document interface: attribute customElementRegistry] + expected: FAIL + + [Document interface: new Document() must inherit property "customElementRegistry" with the proper type] + expected: FAIL + + [Document interface: xmlDoc must inherit property "customElementRegistry" with the proper type] + expected: FAIL + + [ShadowRoot interface: attribute customElementRegistry] + expected: FAIL + + [Element interface: attribute customElementRegistry] + expected: FAIL + + [Element interface: element must inherit property "customElementRegistry" with the proper type] + expected: FAIL + + +[idlharness.window.html?include=Node] diff --git a/tests/wpt/meta/dom/xslt/document-element.window.js.ini b/tests/wpt/meta/dom/xslt/document-element.window.js.ini new file mode 100644 index 00000000000..b2f6ebba0e2 --- /dev/null +++ b/tests/wpt/meta/dom/xslt/document-element.window.js.ini @@ -0,0 +1,2 @@ +[document-element.window.html] + expected: ERROR diff --git a/tests/wpt/meta/fetch/http-cache/no-vary-search.tentative.any.js.ini b/tests/wpt/meta/fetch/http-cache/no-vary-search.tentative.any.js.ini new file mode 100644 index 00000000000..48ef0549bc3 --- /dev/null +++ b/tests/wpt/meta/fetch/http-cache/no-vary-search.tentative.any.js.ini @@ -0,0 +1,15 @@ +[no-vary-search.tentative.any.html] + [When params is set to true, URL differs only by their parameters (other than `dispatch` and `uuid`) should not be cached as different entries.] + expected: FAIL + + +[no-vary-search.tentative.any.sharedworker.html] + expected: ERROR + +[no-vary-search.tentative.any.worker.html] + [When params is set to true, URL differs only by their parameters (other than `dispatch` and `uuid`) should not be cached as different entries.] + expected: FAIL + + +[no-vary-search.tentative.any.serviceworker.html] + expected: ERROR diff --git a/tests/wpt/meta/fetch/metadata/generated/css-font-face.https.sub.tentative.html.ini b/tests/wpt/meta/fetch/metadata/generated/css-font-face.https.sub.tentative.html.ini index 12a2314e747..a02fcf871ab 100644 --- a/tests/wpt/meta/fetch/metadata/generated/css-font-face.https.sub.tentative.html.ini +++ b/tests/wpt/meta/fetch/metadata/generated/css-font-face.https.sub.tentative.html.ini @@ -52,6 +52,3 @@ [sec-fetch-storage-access - Cross-site] expected: FAIL - - [sec-fetch-user] - expected: FAIL diff --git a/tests/wpt/meta/fetch/security/dangling-markup/dangling-markup-mitigation-allowed-apis.https.html.ini b/tests/wpt/meta/fetch/security/dangling-markup/dangling-markup-mitigation-allowed-apis.https.html.ini new file mode 100644 index 00000000000..0f7f7c420c2 --- /dev/null +++ b/tests/wpt/meta/fetch/security/dangling-markup/dangling-markup-mitigation-allowed-apis.https.html.ini @@ -0,0 +1,25 @@ +[dangling-markup-mitigation-allowed-apis.https.html] + expected: TIMEOUT + [Does not block window.open(`resources/empty.html?\n<`,'_self')] + expected: FAIL + + [Setup controlled frame] + expected: TIMEOUT + + [Does not block xhr] + expected: NOTRUN + + [Does not block EventSource] + expected: NOTRUN + + [Does not block fetch] + expected: NOTRUN + + [Does not block Worker] + expected: NOTRUN + + [Does not block importScripts] + expected: NOTRUN + + [Clean up iframe] + expected: NOTRUN diff --git a/tests/wpt/meta/fetch/security/dangling-markup/dangling-markup-mitigation-allowed-apis.tentative.https.html.ini b/tests/wpt/meta/fetch/security/dangling-markup/dangling-markup-mitigation-allowed-apis.tentative.https.html.ini deleted file mode 100644 index c3f91472029..00000000000 --- a/tests/wpt/meta/fetch/security/dangling-markup/dangling-markup-mitigation-allowed-apis.tentative.https.html.ini +++ /dev/null @@ -1,18 +0,0 @@ -[dangling-markup-mitigation-allowed-apis.tentative.https.html] - [Does not block window.open(`resources/empty.html?\n<`,'_self')] - expected: FAIL - - [Does not block xhr] - expected: FAIL - - [Does not block EventSource] - expected: FAIL - - [Does not block fetch] - expected: FAIL - - [Does not block Worker] - expected: FAIL - - [Does not block importScripts] - expected: FAIL diff --git a/tests/wpt/meta/focus/nested-focus-within-iframe-focus-event.html.ini b/tests/wpt/meta/focus/nested-focus-within-iframe-focus-event.html.ini new file mode 100644 index 00000000000..fb2988e26ee --- /dev/null +++ b/tests/wpt/meta/focus/nested-focus-within-iframe-focus-event.html.ini @@ -0,0 +1,4 @@ +[nested-focus-within-iframe-focus-event.html] + expected: ERROR + [dialog.focus() in navigable's focus handler] + expected: TIMEOUT diff --git a/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/008.html.ini b/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/008.html.ini deleted file mode 100644 index c253f779d78..00000000000 --- a/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/008.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[008.html] - [Link with onclick form submit to javascript url and href navigation ] - expected: FAIL diff --git a/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/empty-iframe-load-event.html.ini b/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/empty-iframe-load-event.html.ini new file mode 100644 index 00000000000..3e07e6b7d1f --- /dev/null +++ b/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/empty-iframe-load-event.html.ini @@ -0,0 +1,6 @@ +[empty-iframe-load-event.html] + [Check execution order from nested timeout] + expected: FAIL + + [Check execution order on load handler] + expected: FAIL diff --git a/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini b/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini index 277436ffad2..5f9a07f92f0 100644 --- a/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini +++ b/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini @@ -1,3 +1,6 @@ [iframe-src-aboutblank-navigate-immediately.html] [Navigating to a different document with window.open] expected: FAIL + + [Navigating to a different document with form submission] + expected: FAIL diff --git a/tests/wpt/meta/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini b/tests/wpt/meta/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini deleted file mode 100644 index a03a8322165..00000000000 --- a/tests/wpt/meta/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[traverse_the_history_3.html] - [Multiple history traversals, last would be aborted] - expected: FAIL diff --git a/tests/wpt/meta/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_access_details.sub.html.ini b/tests/wpt/meta/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_access_details.sub.html.ini index ac4a3af4b00..4db5975ba24 100644 --- a/tests/wpt/meta/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_access_details.sub.html.ini +++ b/tests/wpt/meta/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_access_details.sub.html.ini @@ -11,9 +11,6 @@ [Access is revoked to Window object when we stop being same effective script origin due to document.domain.] expected: FAIL - [Access is revoked to Location object when we stop being same effective script origin due to document.domain.] - expected: FAIL - [Access evolves correctly for non-cross-origin objects when we join up via document.domain and then diverge again.] expected: FAIL diff --git a/tests/wpt/meta/html/dom/idlharness.https.html.ini b/tests/wpt/meta/html/dom/idlharness.https.html.ini index 29cbc17c7e3..23b8e353fb0 100644 --- a/tests/wpt/meta/html/dom/idlharness.https.html.ini +++ b/tests/wpt/meta/html/dom/idlharness.https.html.ini @@ -5801,6 +5801,9 @@ [ImageData interface: new ImageData(10, 10) must inherit property "pixelFormat" with the proper type] expected: FAIL + [CustomElementRegistry interface: operation initialize(Node)] + expected: FAIL + [idlharness.https.html?include=HTML.+] [HTMLAllCollection interface: existence and properties of interface object] @@ -7848,3 +7851,9 @@ [HTMLButtonElement interface: document.createElement("button") must inherit property "commandForElement" with the proper type] expected: FAIL + + [HTMLTemplateElement interface: attribute shadowRootCustomElementRegistry] + expected: FAIL + + [HTMLTemplateElement interface: document.createElement("template") must inherit property "shadowRootCustomElementRegistry" with the proper type] + expected: FAIL diff --git a/tests/wpt/meta/html/semantics/embedded-content/media-elements/error-sequence.html.ini b/tests/wpt/meta/html/semantics/embedded-content/media-elements/error-sequence.html.ini new file mode 100644 index 00000000000..4faa017d9e5 --- /dev/null +++ b/tests/wpt/meta/html/semantics/embedded-content/media-elements/error-sequence.html.ini @@ -0,0 +1,30 @@ +[error-sequence.html] + [empty src attribute] + expected: FAIL + + [urlRecord failure] + expected: FAIL + + [fetch resource] + expected: FAIL + + [error event while HAVE_NOTHING] + expected: FAIL + + [error attribute while HAVE_NOTHING] + expected: FAIL + + [play() promise while HAVE_NOTHING] + expected: FAIL + + [play() promise after error event while HAVE_NOTHING] + expected: FAIL + + [error event while HAVE_METADATA] + expected: FAIL + + [error event after HAVE_FUTURE_DATA] + expected: FAIL + + [error attribute after DECODE_ERROR] + expected: FAIL diff --git a/tests/wpt/meta/html/semantics/embedded-content/media-elements/track/track-element/track-cues-sorted-before-dispatch.html.ini b/tests/wpt/meta/html/semantics/embedded-content/media-elements/track/track-element/track-cues-sorted-before-dispatch.html.ini index d8b5fe6b0d1..5472f6d7f70 100644 --- a/tests/wpt/meta/html/semantics/embedded-content/media-elements/track/track-element/track-cues-sorted-before-dispatch.html.ini +++ b/tests/wpt/meta/html/semantics/embedded-content/media-elements/track/track-element/track-cues-sorted-before-dispatch.html.ini @@ -2,4 +2,3 @@ expected: TIMEOUT [All events are triggered in chronological order] expected: TIMEOUT - diff --git a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini index 56f11f614da..24903b5f66f 100644 --- a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini +++ b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini @@ -1,3 +1,4 @@ [iframe_sandbox_popups_escaping-1.html] + expected: TIMEOUT [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] expected: TIMEOUT diff --git a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini index e8872b3585b..62a6e7fc812 100644 --- a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini +++ b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini @@ -1,4 +1,4 @@ [iframe_sandbox_popups_nonescaping-1.html] - expected: TIMEOUT + expected: CRASH [Check that popups from a sandboxed iframe do not escape the sandbox] expected: NOTRUN diff --git a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini index 4034793cc72..c6f1e5d7d84 100644 --- a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini +++ b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini @@ -1,3 +1,4 @@ [iframe_sandbox_popups_nonescaping-2.html] + expected: TIMEOUT [Check that popups from a sandboxed iframe do not escape the sandbox] - expected: FAIL + expected: NOTRUN diff --git a/tests/wpt/meta/html/semantics/forms/form-submission-0/jsurl-form-submit.tentative.html.ini b/tests/wpt/meta/html/semantics/forms/form-submission-0/jsurl-form-submit.tentative.html.ini new file mode 100644 index 00000000000..640bea3a8dd --- /dev/null +++ b/tests/wpt/meta/html/semantics/forms/form-submission-0/jsurl-form-submit.tentative.html.ini @@ -0,0 +1,3 @@ +[jsurl-form-submit.tentative.html] + [Verifies that form submissions scheduled inside javascript: urls take precedence over the javascript: url's return value.] + expected: FAIL diff --git a/tests/wpt/meta/html/semantics/forms/historical.html.ini b/tests/wpt/meta/html/semantics/forms/historical.html.ini new file mode 100644 index 00000000000..5d8289307cc --- /dev/null +++ b/tests/wpt/meta/html/semantics/forms/historical.html.ini @@ -0,0 +1,3 @@ +[historical.html] + [<input name=isindex> should not be supported] + expected: FAIL diff --git a/tests/wpt/meta/html/semantics/scripting-1/the-script-element/module/dynamic-import/code-cache-nonce.html.ini b/tests/wpt/meta/html/semantics/scripting-1/the-script-element/module/dynamic-import/code-cache-nonce.html.ini new file mode 100644 index 00000000000..ccad3276c85 --- /dev/null +++ b/tests/wpt/meta/html/semantics/scripting-1/the-script-element/module/dynamic-import/code-cache-nonce.html.ini @@ -0,0 +1,9 @@ +[code-cache-nonce.html] + [First dynamic import should use nonce=abc] + expected: FAIL + + [Second dynamic import should use nonce=def] + expected: FAIL + + [Third dynamic import should use nonce=ghi] + expected: FAIL diff --git a/tests/wpt/meta/html/semantics/scripting-1/the-script-element/module/dynamic-import/propagate-nonce-external-classic.html.ini b/tests/wpt/meta/html/semantics/scripting-1/the-script-element/module/dynamic-import/propagate-nonce-external-classic.html.ini new file mode 100644 index 00000000000..0080e7908e9 --- /dev/null +++ b/tests/wpt/meta/html/semantics/scripting-1/the-script-element/module/dynamic-import/propagate-nonce-external-classic.html.ini @@ -0,0 +1,3 @@ +[propagate-nonce-external-classic.html] + [Dynamically imported module should eval when imported from script w/ a valid nonce.] + expected: FAIL diff --git a/tests/wpt/meta/html/semantics/scripting-1/the-script-element/module/dynamic-import/propagate-nonce-inline-classic.html.ini b/tests/wpt/meta/html/semantics/scripting-1/the-script-element/module/dynamic-import/propagate-nonce-inline-classic.html.ini new file mode 100644 index 00000000000..74b32cc06dd --- /dev/null +++ b/tests/wpt/meta/html/semantics/scripting-1/the-script-element/module/dynamic-import/propagate-nonce-inline-classic.html.ini @@ -0,0 +1,3 @@ +[propagate-nonce-inline-classic.html] + [Dynamically imported module should eval when imported from script w/ a valid nonce.] + expected: FAIL diff --git a/tests/wpt/meta/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-classic.html.ini b/tests/wpt/meta/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-classic.html.ini index 6c4f4e4311b..9b3e3358ad3 100644 --- a/tests/wpt/meta/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-classic.html.ini +++ b/tests/wpt/meta/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-classic.html.ini @@ -1,6 +1,18 @@ [string-compilation-nonce-classic.html] [reflected inline event handlers must not inherit the nonce from the triggering script, thus fail] - expected: FAIL + expected: PASS [inline event handlers triggered via UA code must not inherit the nonce from the triggering script, thus fail] + expected: PASS + + [setTimeout must inherit the nonce from the triggering script, thus execute] + expected: FAIL + + [direct eval must inherit the nonce from the triggering script, thus execute] + expected: FAIL + + [indirect eval must inherit the nonce from the triggering script, thus execute] expected: FAIL + + [the Function constructor must inherit the nonce from the triggering script, thus execute] + expected: FAIL
\ No newline at end of file diff --git a/tests/wpt/meta/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-module.html.ini b/tests/wpt/meta/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-module.html.ini index aef6f76d69e..1d3b047b68b 100644 --- a/tests/wpt/meta/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-module.html.ini +++ b/tests/wpt/meta/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-module.html.ini @@ -1,9 +1,9 @@ [string-compilation-nonce-module.html] [reflected inline event handlers must not inherit the nonce from the triggering script, thus fail] - expected: FAIL + expected: PASS [inline event handlers triggered via UA code must not inherit the nonce from the triggering script, thus fail] - expected: FAIL + expected: PASS [direct eval must inherit the nonce from the triggering script, thus execute] expected: FAIL @@ -13,3 +13,6 @@ [the Function constructor must inherit the nonce from the triggering script, thus execute] expected: FAIL + + [setTimeout must inherit the nonce from the triggering script, thus execute] + expected: FAIL
\ No newline at end of file diff --git a/tests/wpt/meta/html/semantics/scripting-1/the-script-element/module/dynamic-import/v8-code-cache.html.ini b/tests/wpt/meta/html/semantics/scripting-1/the-script-element/module/dynamic-import/v8-code-cache.html.ini new file mode 100644 index 00000000000..64413107401 --- /dev/null +++ b/tests/wpt/meta/html/semantics/scripting-1/the-script-element/module/dynamic-import/v8-code-cache.html.ini @@ -0,0 +1,30 @@ +[v8-code-cache.html] + [text/javascript: Run #1] + expected: FAIL + + [text/javascript: Run #2] + expected: FAIL + + [text/javascript: Run #3] + expected: FAIL + + [text/javascript: Run #4] + expected: FAIL + + [text/javascript: Run #5] + expected: FAIL + + [module: Run #1] + expected: FAIL + + [module: Run #2] + expected: FAIL + + [module: Run #3] + expected: FAIL + + [module: Run #4] + expected: FAIL + + [module: Run #5] + expected: FAIL diff --git a/tests/wpt/meta/html/syntax/serializing-html-fragments/serializing-lt-gt.tentative.html.ini b/tests/wpt/meta/html/syntax/serializing-html-fragments/serializing-lt-gt.tentative.html.ini new file mode 100644 index 00000000000..932fc486676 --- /dev/null +++ b/tests/wpt/meta/html/syntax/serializing-html-fragments/serializing-lt-gt.tentative.html.ini @@ -0,0 +1,6 @@ +[serializing-lt-gt.tentative.html] + [innerHTML] + expected: FAIL + + [outerHTML] + expected: FAIL diff --git a/tests/wpt/meta/resize-observer/eventloop.html.ini b/tests/wpt/meta/resize-observer/eventloop.html.ini new file mode 100644 index 00000000000..6ed748ec951 --- /dev/null +++ b/tests/wpt/meta/resize-observer/eventloop.html.ini @@ -0,0 +1,3 @@ +[eventloop.html] + [test0: multiple notifications inside same event loop] + expected: FAIL diff --git a/tests/wpt/meta/service-workers/service-worker/claim-using-registration.https.html.ini b/tests/wpt/meta/service-workers/service-worker/claim-using-registration.https.html.ini index 0c764649961..29f201e5f08 100644 --- a/tests/wpt/meta/service-workers/service-worker/claim-using-registration.https.html.ini +++ b/tests/wpt/meta/service-workers/service-worker/claim-using-registration.https.html.ini @@ -4,3 +4,6 @@ [Test for the waiting worker claims a client which is using the the same registration] expected: FAIL + + [Test for the waiting worker claims a client which is using the same registration] + expected: FAIL diff --git a/tests/wpt/meta/shadow-dom/declarative/declarative-shadow-dom-basic.html.ini b/tests/wpt/meta/shadow-dom/declarative/declarative-shadow-dom-basic.html.ini deleted file mode 100644 index 9ea3d57e32a..00000000000 --- a/tests/wpt/meta/shadow-dom/declarative/declarative-shadow-dom-basic.html.ini +++ /dev/null @@ -1,6 +0,0 @@ -[declarative-shadow-dom-basic.html] - [Declarative Shadow DOM: Basic test] - expected: FAIL - - [Declarative Shadow DOM: Fragment parser basic test] - expected: FAIL diff --git a/tests/wpt/meta/shadow-dom/declarative/declarative-shadow-dom-repeats.html.ini b/tests/wpt/meta/shadow-dom/declarative/declarative-shadow-dom-repeats.html.ini deleted file mode 100644 index 4fad73d8d8c..00000000000 --- a/tests/wpt/meta/shadow-dom/declarative/declarative-shadow-dom-repeats.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[declarative-shadow-dom-repeats.html] - [Calling attachShadow() on declarative shadow root must match all parameters] - expected: FAIL diff --git a/tests/wpt/meta/shadow-dom/declarative/declarative-shadow-dom-write-to-iframe.html.ini b/tests/wpt/meta/shadow-dom/declarative/declarative-shadow-dom-write-to-iframe.html.ini deleted file mode 100644 index 81cb59eb03e..00000000000 --- a/tests/wpt/meta/shadow-dom/declarative/declarative-shadow-dom-write-to-iframe.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[declarative-shadow-dom-write-to-iframe.html] - [`document.write` on inner iframe handles declarative shadow DOM] - expected: FAIL diff --git a/tests/wpt/meta/user-timing/measure-l3.any.js.ini b/tests/wpt/meta/user-timing/measure-l3.any.js.ini index 87c754baad1..1c69f43643e 100644 --- a/tests/wpt/meta/user-timing/measure-l3.any.js.ini +++ b/tests/wpt/meta/user-timing/measure-l3.any.js.ini @@ -8,6 +8,9 @@ [When start and end mark are both given, the start time and end time of the measure entry should be the the marks' time, repectively] expected: FAIL + [When start and end mark are both given, the start time and end time of the measure entry should be the marks' time, repectively] + expected: FAIL + [measure-l3.any.worker.html] [When the end mark is given and the start is unprovided, the end time of the measure entry should be the end mark's time, the start time should be 0.] @@ -18,3 +21,6 @@ [When start and end mark are both given, the start time and end time of the measure entry should be the the marks' time, repectively] expected: FAIL + + [When start and end mark are both given, the start time and end time of the measure entry should be the marks' time, repectively] + expected: FAIL diff --git a/tests/wpt/meta/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini b/tests/wpt/meta/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini index 2e7e757a26a..86e64b24eff 100644 --- a/tests/wpt/meta/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini +++ b/tests/wpt/meta/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini @@ -739,3 +739,15 @@ [X SNR (-252.76486335943366 dB) is not greater than or equal to 65.737. Got -252.76486335943366.] expected: FAIL + + [X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[14680\]\t1.3930612396961806e-7\t2.0512369275093079e-1\t2.0512355344480682e-1\t9.9999932086770615e-1\t3.8985999999999999e-3\n\t[14681\]\t1.1480505578219891e-2\t1.4340442419052124e-1\t1.3192391861230135e-1\t9.1994315626575540e-1\t3.8985999999999999e-3\n\tMax AbsError of 2.0512355344480682e-1 at index of 14680.\n\tMax RelError of 9.9999932086770615e-1 at index of 14680.\n] + expected: FAIL + + [X SNR (55.28432239726872 dB) is not greater than or equal to 65.737. Got 55.28432239726872.] + expected: FAIL + + [X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[14680\]\t2.5208540364800000e+12\t2.0512369275093079e-1\t2.5208540364797949e+12\t1.2289433768827059e+13\t3.8985999999999999e-3\n\t[14681\]\t1.1480505578219891e-2\t1.4340442419052124e-1\t1.3192391861230135e-1\t9.1994315626575540e-1\t3.8985999999999999e-3\n\tMax AbsError of 2.5208540364797949e+12 at index of 14680.\n\tMax RelError of 1.2289433768827059e+13 at index of 14680.\n] + expected: FAIL + + [X SNR (-204.5968680501149 dB) is not greater than or equal to 65.737. Got -204.5968680501149.] + expected: FAIL diff --git a/tests/wpt/meta/webaudio/the-audio-api/the-audiocontext-interface/audiocontextoptions.html.ini b/tests/wpt/meta/webaudio/the-audio-api/the-audiocontext-interface/audiocontextoptions.html.ini index c69bb0828b7..03757f49690 100644 --- a/tests/wpt/meta/webaudio/the-audio-api/the-audiocontext-interface/audiocontextoptions.html.ini +++ b/tests/wpt/meta/webaudio/the-audio-api/the-audiocontext-interface/audiocontextoptions.html.ini @@ -1,5 +1,4 @@ [audiocontextoptions.html] - expected: CRASH [X context = new AudioContext({sampleRate: 1}) did not throw an exception.] expected: FAIL diff --git a/tests/wpt/meta/webxr/depth-sensing/depth_sensing_attributes_throw_not_enabled.https.html.ini b/tests/wpt/meta/webxr/depth-sensing/depth_sensing_attributes_throw_not_enabled.https.html.ini new file mode 100644 index 00000000000..210402e756c --- /dev/null +++ b/tests/wpt/meta/webxr/depth-sensing/depth_sensing_attributes_throw_not_enabled.https.html.ini @@ -0,0 +1,18 @@ +[depth_sensing_attributes_throw_not_enabled.https.html] + [XRSession.depthUsage rejects if depth sensing is not enabled on a session - webgl] + expected: FAIL + + [XRSession.depthUsage rejects if depth sensing is not enabled on a session - webgl2] + expected: FAIL + + [XRSession.depthDataFormat rejects if depth sensing is not enabled on a session - webgl] + expected: FAIL + + [XRSession.depthDataFormat rejects if depth sensing is not enabled on a session - webgl2] + expected: FAIL + + [XRSession.depthType rejects if depth sensing is not enabled on a session - webgl] + expected: FAIL + + [XRSession.depthType rejects if depth sensing is not enabled on a session - webgl2] + expected: FAIL diff --git a/tests/wpt/meta/webxr/depth-sensing/depth_type_request_respected.https.html.ini b/tests/wpt/meta/webxr/depth-sensing/depth_type_request_respected.https.html.ini new file mode 100644 index 00000000000..65f6a3d5d38 --- /dev/null +++ b/tests/wpt/meta/webxr/depth-sensing/depth_type_request_respected.https.html.ini @@ -0,0 +1,24 @@ +[depth_type_request_respected.https.html] + [Can grant sessions that request a raw depth type - webgl] + expected: FAIL + + [Can grant sessions that request a raw depth type - webgl2] + expected: FAIL + + [Can grant sessions that request a smooth depth type - webgl] + expected: FAIL + + [Can grant sessions that request a smooth depth type - webgl2] + expected: FAIL + + [Can grant sessions that request empty depth type - webgl] + expected: FAIL + + [Can grant sessions that request empty depth type - webgl2] + expected: FAIL + + [Can grant sessions that don't request depth type - webgl] + expected: FAIL + + [Can grant sessions that don't request depth type - webgl2] + expected: FAIL diff --git a/tests/wpt/meta/webxr/render_state_update.https.html.ini b/tests/wpt/meta/webxr/render_state_update.https.html.ini deleted file mode 100644 index 0e57356683e..00000000000 --- a/tests/wpt/meta/webxr/render_state_update.https.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[render_state_update.https.html] - expected: ERROR diff --git a/tests/wpt/mozilla/meta/MANIFEST.json b/tests/wpt/mozilla/meta/MANIFEST.json index b6782318356..2ef84bb18a6 100644 --- a/tests/wpt/mozilla/meta/MANIFEST.json +++ b/tests/wpt/mozilla/meta/MANIFEST.json @@ -14178,6 +14178,13 @@ {} ] ], + "video_poster_csp.sub.html": [ + "cc5dfd54c1e39904d5c919f6bd6840d65dcc0fa8", + [ + null, + {} + ] + ], "weakref.html": [ "4deccbe1e26a3f921eea85a4395394a55cc88be4", [ diff --git a/tests/wpt/mozilla/meta/__dir__.ini b/tests/wpt/mozilla/meta/__dir__.ini index a57c0286b12..925f07e1c50 100644 --- a/tests/wpt/mozilla/meta/__dir__.ini +++ b/tests/wpt/mozilla/meta/__dir__.ini @@ -1,3 +1,4 @@ prefs: [ "dom_urlpattern_enabled:true", + "media_testing_enabled:true", ] diff --git a/tests/wpt/mozilla/meta/mozilla/video_poster_frame.html.ini b/tests/wpt/mozilla/meta/mozilla/video_poster_frame.html.ini deleted file mode 100644 index a8b5c2da0c5..00000000000 --- a/tests/wpt/mozilla/meta/mozilla/video_poster_frame.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[video_poster_frame.html] - expected: TIMEOUT diff --git a/tests/wpt/mozilla/tests/mozilla/video_poster_csp.sub.html b/tests/wpt/mozilla/tests/mozilla/video_poster_csp.sub.html new file mode 100644 index 00000000000..cc5dfd54c1e --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/video_poster_csp.sub.html @@ -0,0 +1,25 @@ +<!doctype html> +<meta http-equiv="content-security-policy" content="img-src 'self'"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video></video> +<img></img> +<script> + // This test sets up a cross-origin image URL for the video poster + // and verifies that the poster image is not shown. + // It also uses a separate image load to control when to end the test, + // since Servo doesn't fire any event handler if a poster image has an + // error (https://github.com/whatwg/html/issues/8445). + async_test(t => { + const pathparts = location.pathname.split('/'); + const testfile = pathparts[pathparts.length - 1]; + const url = location.href.replace(location.hostname, "{{hosts[alt][]}}").replace(testfile, "poster.png"); + let img = document.querySelector("img"); + img.src = url; + img.onload = t.unreached_func(); + img.onerror = t.step_timeout(() => t.done(), 500); + let video = document.querySelector("video"); + video.onpostershown = t.unreached_func(); + video.poster = url; + }); +</script> diff --git a/tests/wpt/tests/IndexedDB/worker-termination-aborts-upgrade.window.js b/tests/wpt/tests/IndexedDB/worker-termination-aborts-upgrade.window.js index e84ca2c2a64..c2d8d91787e 100644 --- a/tests/wpt/tests/IndexedDB/worker-termination-aborts-upgrade.window.js +++ b/tests/wpt/tests/IndexedDB/worker-termination-aborts-upgrade.window.js @@ -50,7 +50,7 @@ promise_test(async t => { // At this point we know that the open request was issued on the worker // worker thread. An ordering concern at this point is that IDB only - // specifies that the the connection opening algorithm is run in parallel and + // specifies that the connection opening algorithm is run in parallel and // we are not guaranteed that when we go "in parallel" here that our operation // won't run first. As such, it may be necessary to add some kind of // arbitrary delay in the future if implementations do not effectively diff --git a/tests/wpt/tests/accname/name/comp_labeledby_non_standard.html b/tests/wpt/tests/accname/name/comp_labeledby_non_standard.html new file mode 100644 index 00000000000..f86a62b34ef --- /dev/null +++ b/tests/wpt/tests/accname/name/comp_labeledby_non_standard.html @@ -0,0 +1,37 @@ +<!doctype html> +<html> +<head> + <title>Name Comp: aria-labeledby (non-standard)</title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/resources/testdriver.js"></script> + <script src="/resources/testdriver-vendor.js"></script> + <script src="/resources/testdriver-actions.js"></script> + <script src="/wai-aria/scripts/aria-utils.js"></script> +</head> +<body> + +<p>Tests that the non-standard (misspelled) attribute name <code>aria-labeledby</code> is not supported.</p> + +<h2>Tests for <code>aria-labeledby</code></h2> + +<div role="group" aria-labeledby="h" class="ex" data-expectedlabel="" data-testname="div group with aria-labeledby"> + <h2 id="h">first heading</h2> + <p>text inside div group</p> +</div> + +<div role="group" aria-label="self label" id="g2" aria-labeledby="g2 h2" class="ex" data-expectedlabel="self label" data-testname="div group with aria-label and aria-labeledby"> + <h2 id="h2">+ first heading</h2> + <p>text inside div group</p> +</div> + +<div role="group" aria-labeledby="h2" aria-labelledby="p3" class="ex" data-expectedlabel="text inside div group" data-testname="div group with aria-labeledby and aria-labelledby"> + <h2 id="h3">+ first heading</h2> + <p id="p3">text inside div group</p> +</div> + +<script> +AriaUtils.verifyLabelsBySelector(".ex"); +</script> +</body> +</html> diff --git a/tests/wpt/tests/ai/language_detection/detector-iframe.tentative.https.html b/tests/wpt/tests/ai/language_detection/detector-iframe.tentative.https.html new file mode 100644 index 00000000000..3e90d36b5aa --- /dev/null +++ b/tests/wpt/tests/ai/language_detection/detector-iframe.tentative.https.html @@ -0,0 +1,89 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/get-host-info.sub.js"></script> +<body></body> +<script> +'use strict'; + +const { HTTPS_ORIGIN, HTTPS_NOTSAMESITE_ORIGIN } = get_host_info(); +const PATH = location.pathname.substring(0, location.pathname.lastIndexOf('/') + 1); +const IFRAME_PATH = PATH + 'resources/iframe-helper.html'; + +function run_iframe_test(iframe, test_name) { + iframe.contentWindow.postMessage({type: test_name}, '*'); + const {promise, resolve, reject} = Promise.withResolvers(); + + window.onmessage = message => { + if (message.data.success) { + resolve(message.data.success); + } else { + reject(message.data.err) + } + } + + return promise; +} + +function load_iframe(src, permission_policy) { + let iframe = document.createElement('iframe'); + return new Promise((resolve, reject) => { + iframe.onload = () => { + resolve(iframe); + } + iframe.src = src; + iframe.allow = permission_policy; + document.body.appendChild(iframe); + }); +} + +promise_test(async t => { + const src = HTTPS_NOTSAMESITE_ORIGIN + IFRAME_PATH; + const iframe = await load_iframe(src, /*permission_policy=*/""); + await promise_rejects_dom(t, 'NotAllowedError', + run_iframe_test(iframe, "LanguageDetectorCreate")); +}, "Throw a 'NotAllowedError' when creating Language Detector within cross-origin iframe"); + +promise_test(async t => { + const src = HTTPS_NOTSAMESITE_ORIGIN + IFRAME_PATH; + const iframe = await load_iframe(src, "languageDetector"); + + assert_equals( + await run_iframe_test(iframe, "LanguageDetectorCreate"), 'Success'); +}, "Language Detector can be created within cross-origin iframe with permission policy"); + +promise_test(async t => { + const src = HTTPS_ORIGIN + IFRAME_PATH; + const iframe = await load_iframe(src, /*permission_policy=*/""); + + assert_equals( + await run_iframe_test(iframe, "LanguageDetectorCreate"), 'Success'); +}, "Language Detector can be used within same-origin iframe"); + +promise_test(async t => { + const src = HTTPS_NOTSAMESITE_ORIGIN + IFRAME_PATH; + const iframe = await load_iframe(src, /*permission_policy=*/""); + + assert_equals( + await run_iframe_test(iframe, "LanguageDetectorAvailability"), 'unavailable'); +}, "Language Detector is unavailable within cross-origin iframe"); + +promise_test(async t => { + const src = HTTPS_NOTSAMESITE_ORIGIN + IFRAME_PATH; + const iframe = await load_iframe(src, "languageDetector"); + + assert_in_array( + await run_iframe_test(iframe, "LanguageDetectorAvailability"), + ['downloadable', 'downloading', 'available']); +}, "Language Detector is available within cross-origin iframe with permission policy"); + +promise_test(async t => { + const src = HTTPS_ORIGIN + IFRAME_PATH; + const iframe = await load_iframe(src, /*permission_policy=*/""); + + assert_in_array( + await run_iframe_test(iframe, "LanguageDetectorAvailability"), + ['downloadable', 'downloading', 'available']); +}, "LanguageDetector is available within same-origin iframe"); + +</script>
\ No newline at end of file diff --git a/tests/wpt/tests/ai/language_detection/detector-locale.https.tentative.any.js b/tests/wpt/tests/ai/language_detection/detector-locale.https.tentative.any.js new file mode 100644 index 00000000000..1991ac3ecfb --- /dev/null +++ b/tests/wpt/tests/ai/language_detection/detector-locale.https.tentative.any.js @@ -0,0 +1,83 @@ +// META: title=Detect english +// META: global=window +// META: script=../resources/util.js +// META: script=../resources/locale-util.js + +'use strict'; + +function getAvailability(expectedInputLanguages) { + return LanguageDetector.availability({expectedInputLanguages}); +} + +function assert_availability_consistent( + language_subtag_availability, base_availability) { + if (base_availability == 'unavailable') { + // If the language subtag is not available then no variation of it should + // be available. + assert_equals(language_subtag_availability, 'unavailable'); + } else { + // If the language subtag is available, then it definitely shouldn't be + // unavailable since whatever backing it has could support any variation of + // it. A variation could have a different availability if a more specific + // backing is required. + assert_in_array( + language_subtag_availability, + ['downloadable', 'downloading', 'available']); + } +} + +promise_test(async t => { + for (const [languageSubtag, variations] of Object.entries( + valid_language_tags)) { + const languageSubtagAvailability = await getAvailability([languageSubtag]); + + // Test each variation individually. + for (const variation of variations) { + assert_availability_consistent( + await getAvailability([variation]), languageSubtagAvailability); + } + + // Test all variations. + assert_availability_consistent( + await getAvailability(variations), languageSubtagAvailability); + } +}, 'LanguageDetector.availability() is consistent between language tag variations'); + + +async function getExpectedInputLanguages(expectedInputLanguages) { + return (await LanguageDetector.create({expectedInputLanguages})) + .expectedInputLanguages; +} + +async function assert_valid_expected_input_languages(language) { + const expectedInputLanguages = await getExpectedInputLanguages([language]); + assert_equals(expectedInputLanguages.length, 1); + assert_is_variation(language, expectedInputLanguages[0]); + assert_is_canonical(expectedInputLanguages[0]); +} + +function uniqueCount(array) { + return (new Set(array)).size; +} + +promise_test(async t => { + for (const [languageSubtag, variations] of Object.entries( + valid_language_tags)) { + await assert_valid_expected_input_languages(languageSubtag) + + for (const variation of variations) { + await assert_valid_expected_input_languages(variation) + } + + const expectedInputLanguages = await getExpectedInputLanguages(variations); + + // There should be no duplicates. + assert_equals( + expectedInputLanguages.length, uniqueCount(expectedInputLanguages)); + + for (const language of expectedInputLanguages) { + assert_is_canonical(language); + assert_is_variation(language, languageSubtag); + } + } +}, 'LanguageDetector has valid expectedInputLanguages'); diff --git a/tests/wpt/tests/ai/language_detection/detector.https.tentative.any.js b/tests/wpt/tests/ai/language_detection/detector.https.tentative.any.js index 8e4bedd05bb..bdff2364b0b 100644 --- a/tests/wpt/tests/ai/language_detection/detector.https.tentative.any.js +++ b/tests/wpt/tests/ai/language_detection/detector.https.tentative.any.js @@ -16,13 +16,48 @@ promise_test(async t => { const results = await detector.detect('this string is in English'); // "en" should be highest confidence. assert_equals(results[0].detectedLanguage, 'en'); - // Results should be from high to low confidence. - for (let i = 0; i < results.length - 1; i++) { - assert_greater_than_equal(results[i].confidence, results[i + 1].confidence); + + + // The last result should be 'und'. + const undResult = results.pop(); + assert_equals(undResult.detectedLanguage, 'und'); + assert_greater_than(undResult.confidence, 0); + + let total_confidence_without_und = 0; + let last_confidence = 1; + for (const {confidence} of results) { + assert_greater_than(confidence, 0); + + total_confidence_without_und += confidence; + + // Except for 'und', results should be from high to low confidence. + assert_greater_than_equal(last_confidence, confidence); + last_confidence = confidence; } + + // Confidences, excluding both 'und' and the last non-'und' result, should be + // less than 0.99. + assert_less_than( + total_confidence_without_und - results.at(-1).confidence, 0.99); + + // Confidences, including 'und', should add up to 1. + assert_equals(total_confidence_without_und + undResult.confidence, 1); }, 'Simple LanguageDetector.detect() call'); promise_test(async t => { + const error = new Error('CreateMonitorCallback threw an error'); + function monitor(m) { + m.addEventListener('downloadprogress', e => { + assert_unreached( + 'This should never be reached since monitor throws an error.'); + }); + throw error; + } + + await promise_rejects_exactly(t, error, LanguageDetector.create({monitor})); +}, 'If monitor throws an error, LanguageDetector.create() rejects with that error'); + +promise_test(async t => { testMonitor(LanguageDetector.create); }, 'LanguageDetector.create() notifies its monitor on downloadprogress'); @@ -42,6 +77,38 @@ promise_test(async t => { }, 'Aborting LanguageDetector.create().'); promise_test(async t => { + const detector = await LanguageDetector.create(); + + const text = 'this string is in English'; + const promises = [detector.detect(text), detector.measureInputUsage(text)]; + + detector.destroy(); + + promises.push(detector.detect(text), detector.measureInputUsage(text)); + + for (const promise of promises) { + await promise_rejects_dom(t, 'AbortError', promise); + } +}, 'Calling LanguageDetector.destroy() aborts calls to detect and measureInputUsage.'); + +promise_test(async t => { + const controller = new AbortController(); + const detector = await LanguageDetector.create({signal: controller.signal}); + + const text = 'this string is in English'; + const promises = [detector.detect(text), detector.measureInputUsage(text)]; + + const error = new Error('The create abort signal was aborted.'); + controller.abort(error); + + promises.push(detector.detect(text), detector.measureInputUsage(text)); + + for (const promise of promises) { + await promise_rejects_exactly(t, error, promise); + } +}, 'LanguageDetector.create()\'s abort signal destroys its LanguageDetector after creation.'); + +promise_test(async t => { const controller = new AbortController(); controller.abort(); diff --git a/tests/wpt/tests/ai/language_detection/resources/iframe-helper.html b/tests/wpt/tests/ai/language_detection/resources/iframe-helper.html new file mode 100644 index 00000000000..fe07de3f8ab --- /dev/null +++ b/tests/wpt/tests/ai/language_detection/resources/iframe-helper.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML> +<meta charset="utf-8"> +<script> +window.onmessage = async message => { + switch (message.data.type) { + case 'LanguageDetectorCreate': + LanguageDetector.create() + .then(t => parent.postMessage({success: 'Success'})) + .catch(err => parent.postMessage({err})); + break; + case 'LanguageDetectorAvailability': + LanguageDetector.availability() + .then(t => parent.postMessage({success: availability})) + .catch(err => parent.postMessage({err})); + break; + }; +}; +</script> diff --git a/tests/wpt/tests/ai/resources/locale-util.js b/tests/wpt/tests/ai/resources/locale-util.js new file mode 100644 index 00000000000..87d32ae620b --- /dev/null +++ b/tests/wpt/tests/ai/resources/locale-util.js @@ -0,0 +1,27 @@ +const valid_language_tags = { + en: [ + 'en-Latn', + 'en-Latn-GB', + 'en-GB', + 'en-fonipa-scouse', + 'en-Latn-fonipa-scouse', + 'en-Latn-GB-fonipa-scouse', + 'en-Latn-x-this-is-a-private-use-extensio-n', + ], + es: [ + 'es-419', + 'es-ES', + 'es-ES-1979', + ], +}; + +function assert_is_canonical(language_tag) { + const locale = new Intl.Locale(language_tag); + assert_equals(locale.toString(), language_tag); +} + +function assert_is_variation(variation_language_tag, expected_language_tag) { + const variation_locale = new Intl.Locale(variation_language_tag); + const expected_locale = new Intl.Locale(expected_language_tag); + assert_equals(variation_locale.language, expected_locale.language); +} diff --git a/tests/wpt/tests/ai/resources/util.js b/tests/wpt/tests/ai/resources/util.js index ea113b15bda..0cbdc68e260 100644 --- a/tests/wpt/tests/ai/resources/util.js +++ b/tests/wpt/tests/ai/resources/util.js @@ -1,5 +1,49 @@ +const kValidAvailabilities = + ['unavailable', 'downloadable', 'downloading', 'available']; +const kAvailableAvailabilities = ['downloadable', 'downloading', 'available']; + const kTestPrompt = 'Please write a sentence in English.'; +// Takes an array of dictionaries mapping keys to value arrays, e.g.: +// [ {Shape: ["Square", "Circle", undefined]}, {Count: [1, 2]} ] +// Returns an array of dictionaries with all value combinations, i.e.: +// [ {Shape: "Square", Count: 1}, {Shape: "Square", Count: 2}, +// {Shape: "Circle", Count: 1}, {Shape: "Circle", Count: 2}, +// {Shape: undefined, Count: 1}, {Shape: undefined, Count: 2} ] +// Omits dictionary members when the value is undefined; supports array values. +const generateOptionCombinations = + (optionsSpec) => { + // 1. Extract keys from the input specification. + const keys = optionsSpec.map(o => Object.keys(o)[0]); + // 2. Extract the arrays of possible values for each key. + const valueArrays = optionsSpec.map(o => Object.values(o)[0]); + // 3. Compute the Cartesian product of the value arrays using reduce. + const valueCombinations = + valueArrays.reduce((accumulator, currentValues) => { + // Init the empty accumulator (first iteration), with single-element + // arrays. + if (accumulator.length === 0) { + return currentValues.map(value => [value]); + } + // Otherwise, expand existing combinations with current values. + return accumulator.flatMap( + existingCombo => currentValues.map( + currentValue => [...existingCombo, currentValue])); + }, []); + + // 4. Map each value combination to a result dictionary, skipping + // undefined. + return valueCombinations.map(combination => { + const result = {}; + keys.forEach((key, index) => { + if (combination[index] !== undefined) { + result[key] = combination[index]; + } + }); + return result; + }); + } + // The method should take the AbortSignal as an option and return a promise. const testAbortPromise = async (t, method) => { // Test abort signal without custom error. @@ -28,7 +72,8 @@ const testAbortPromise = async (t, method) => { } }; -// The method should take the AbortSignal as an option and return a ReadableStream. +// The method should take the AbortSignal as an option and return a +// ReadableStream. const testAbortReadableStream = async (t, method) => { // Test abort signal without custom error. { @@ -36,32 +81,27 @@ const testAbortReadableStream = async (t, method) => { const stream = method(controller.signal); controller.abort(); let writableStream = new WritableStream(); - await promise_rejects_dom( - t, "AbortError", stream.pipeTo(writableStream) - ); + await promise_rejects_dom(t, 'AbortError', stream.pipeTo(writableStream)); // Using the same aborted controller will get the `AbortError` as well. - await promise_rejects_dom( - t, "AbortError", new Promise(() => { method(controller.signal); }) - ); + await promise_rejects_dom(t, 'AbortError', new Promise(() => { + method(controller.signal); + })); } // Test abort signal with custom error. { - const error = new DOMException("test", "VersionError"); + const error = new DOMException('test', 'VersionError'); const controller = new AbortController(); const stream = method(controller.signal); controller.abort(error); let writableStream = new WritableStream(); - await promise_rejects_exactly( - t, error, - stream.pipeTo(writableStream) - ); + await promise_rejects_exactly(t, error, stream.pipeTo(writableStream)); // Using the same aborted controller will get the same error. - await promise_rejects_exactly( - t, error, new Promise(() => { method(controller.signal); }) - ); + await promise_rejects_exactly(t, error, new Promise(() => { + method(controller.signal); + })); } }; @@ -77,7 +117,7 @@ async function testMonitor(createFunc, options = {}) { }); } - await createFunc({...options, monitor}); + result = await createFunc({...options, monitor}); created = true; assert_greater_than_equal(progressEvents.length, 2); @@ -86,11 +126,16 @@ async function testMonitor(createFunc, options = {}) { let lastProgressEventLoaded = -1; for (const progressEvent of progressEvents) { + assert_equals(progressEvent.lengthComputable, true); assert_equals(progressEvent.total, 1); assert_less_than_equal(progressEvent.loaded, progressEvent.total); + // `loaded` must be rounded to the nearest 0x10000th. + assert_equals(progressEvent.loaded % (1 / 0x10000), 0); + // Progress events should have monotonically increasing `loaded` values. assert_greater_than(progressEvent.loaded, lastProgressEventLoaded); lastProgressEventLoaded = progressEvent.loaded; } + return result; } diff --git a/tests/wpt/tests/ai/summarizer/resources/iframe-helper.html b/tests/wpt/tests/ai/summarizer/resources/iframe-helper.html new file mode 100644 index 00000000000..8db84705a2b --- /dev/null +++ b/tests/wpt/tests/ai/summarizer/resources/iframe-helper.html @@ -0,0 +1,21 @@ +<!DOCTYPE HTML> +<meta charset="utf-8"> +<script> +window.onmessage = async message => { + switch (message.data.type) { + case 'SummarizerCreate': + Summarizer.create() + .then(t => parent.postMessage('Success', '*')) + .catch(err => parent.postMessage('Failure: ' + err.name, '*')); + break; + case 'SummarizerAvailability': + Summarizer.availability({ + type: "tl;dr", + format: "plain-text", + length: "medium"}) + .then(availability => parent.postMessage(availability, '*')) + .catch(err => parent.postMessage('Failure: ' + err.name, '*')); + break; + }; +}; +</script> diff --git a/tests/wpt/tests/ai/summarizer/summarizer-availability-available.tentative.https.any.js b/tests/wpt/tests/ai/summarizer/summarizer-availability-available.tentative.https.any.js new file mode 100644 index 00000000000..31c21ca777f --- /dev/null +++ b/tests/wpt/tests/ai/summarizer/summarizer-availability-available.tentative.https.any.js @@ -0,0 +1,34 @@ +// META: title=Summarizer Availability Available +// META: script=../resources/util.js +// META: timeout=long + +'use strict'; + +promise_test(async () => { + const availability = await Summarizer.availability(); + assert_in_array(availability, kAvailableAvailabilities); +}, 'Summarizer.availability() is available with no options'); + +promise_test(async () => { + const availability = await Summarizer.availability({ + type: 'tl;dr', + format: 'plain-text', + length: 'medium', + expectedInputLanguages: ['en-GB'], + expectedContextLanguages: ['en'], + outputLanguage: 'en', + }); + assert_in_array(availability, kAvailableAvailabilities); +}, 'Summarizer.availability() returns available with supported options'); + +promise_test(async () => { + const availability = await Summarizer.availability({ + type: 'tl;dr', + format: 'plain-text', + length: 'medium', + expectedInputLanguages: ['es'], // not supported + expectedContextLanguages: ['en'], + outputLanguage: 'es', // not supported + }); + assert_equals(availability, 'unavailable'); +}, 'Summarizer.availability() returns unavailable for unsupported languages'); diff --git a/tests/wpt/tests/ai/summarizer/summarizer-availability.tentative.https.any.js b/tests/wpt/tests/ai/summarizer/summarizer-availability.tentative.https.any.js new file mode 100644 index 00000000000..8691765f693 --- /dev/null +++ b/tests/wpt/tests/ai/summarizer/summarizer-availability.tentative.https.any.js @@ -0,0 +1,31 @@ +// META: title=Summarizer Availability +// META: script=../resources/util.js +// META: timeout=long + +'use strict'; + +promise_test(async () => { + assert_true(!!Summarizer); + assert_equals(typeof Summarizer.availability, 'function'); +}, 'Summarizer.availability() is defined'); + +promise_test(async () => { + const availability = await Summarizer.availability(); + assert_in_array(availability, kValidAvailabilities); +}, 'Summarizer.availability() returns a valid value with no options'); + +promise_test(async () => { + // An array of plausible test option values. + const kCreateOptionsSpec = [ + {type: [undefined, 'tl;dr', 'teaser', 'key-points', 'headline']}, + {format: [undefined, 'plain-text', 'markdown']}, + {length: [undefined, 'short', 'medium', 'long']}, + {expectedInputLanguages: [[], ['en'], ['es'], ['jp', 'fr']]}, + {expectedContextLanguages: [[], ['en'], ['es'], ['jp', 'fr']]}, + {outputLanguage: [undefined, 'en', 'es', 'jp', 'fr']} + ]; + for (const options of generateOptionCombinations(kCreateOptionsSpec)) { + const availability = await Summarizer.availability(options); + assert_in_array(availability, kValidAvailabilities, options); + } +}, 'Summarizer.availability() returns a valid value with plausible options'); diff --git a/tests/wpt/tests/ai/summarizer/summarizer-create-available.tentative.https.any.js b/tests/wpt/tests/ai/summarizer/summarizer-create-available.tentative.https.any.js new file mode 100644 index 00000000000..c7e27d9766b --- /dev/null +++ b/tests/wpt/tests/ai/summarizer/summarizer-create-available.tentative.https.any.js @@ -0,0 +1,83 @@ +// META: title=Summarizer Create Available +// META: script=../resources/util.js +// META: timeout=long + +'use strict'; + +promise_test(async () => { + const summarizer = await Summarizer.create(); + assert_equals(typeof summarizer, 'object'); + + assert_equals(typeof summarizer.summarize, 'function'); + assert_equals(typeof summarizer.summarizeStreaming, 'function'); + assert_equals(typeof summarizer.measureInputUsage, 'function'); + assert_equals(typeof summarizer.destroy, 'function'); + + assert_equals(typeof summarizer.expectedContextLanguages, 'object'); + assert_equals(typeof summarizer.expectedInputLanguages, 'object'); + assert_equals(typeof summarizer.inputQuota, 'number'); + assert_equals(typeof summarizer.outputLanguage, 'object'); + assert_equals(typeof summarizer.sharedContext, 'string'); + + assert_equals(typeof summarizer.type, 'string'); + assert_equals(typeof summarizer.format, 'string'); + assert_equals(typeof summarizer.length, 'string'); + + assert_equals(summarizer.type, 'key-points'); + assert_equals(summarizer.format, 'markdown'); + assert_equals(summarizer.length, 'short'); +}, 'Summarizer.create() returns a valid object with default options'); + +promise_test(async () => { + const summarizer = await testMonitor(Summarizer.create); + assert_equals(typeof summarizer, 'object'); +}, 'Summarizer.create() notifies its monitor on downloadprogress'); + +promise_test(async () => { + const sharedContext = 'This is a shared context string'; + const summarizer = await Summarizer.create({sharedContext: sharedContext}); + assert_equals(summarizer.sharedContext, sharedContext); +}, 'Summarizer.sharedContext'); + +promise_test(async () => { + const summarizer = await Summarizer.create({type: 'headline'}); + assert_equals(summarizer.type, 'headline'); +}, 'Summarizer.type'); + +promise_test(async () => { + const summarizer = await Summarizer.create({format: 'plain-text'}); + assert_equals(summarizer.format, 'plain-text'); +}, 'Summarizer.format'); + +promise_test(async () => { + const summarizer = await Summarizer.create({length: 'medium'}); + assert_equals(summarizer.length, 'medium'); +}, 'Summarizer.length'); + +promise_test(async () => { + const summarizer = await Summarizer.create({ + expectedInputLanguages: ['en'] + }); + assert_array_equals(summarizer.expectedInputLanguages, ['en']); +}, 'Summarizer.expectedInputLanguages'); + +promise_test(async () => { + const summarizer = await Summarizer.create({ + expectedContextLanguages: ['en'] + }); + assert_array_equals(summarizer.expectedContextLanguages, ['en']); +}, 'Summarizer.expectedContextLanguages'); + +promise_test(async () => { + const summarizer = await Summarizer.create({ + outputLanguage: 'en' + }); + assert_equals(summarizer.outputLanguage, 'en'); +}, 'Summarizer.outputLanguage'); + +promise_test(async () => { + const summarizer = await Summarizer.create(); + assert_equals(summarizer.expectedInputLanguages, null); + assert_equals(summarizer.expectedContextLanguages, null); + assert_equals(summarizer.outputLanguage, null); +}, 'Summarizer optional attributes return null'); diff --git a/tests/wpt/tests/ai/summarizer/summarizer-create.tentative.https.any.js b/tests/wpt/tests/ai/summarizer/summarizer-create.tentative.https.any.js new file mode 100644 index 00000000000..328cceefefb --- /dev/null +++ b/tests/wpt/tests/ai/summarizer/summarizer-create.tentative.https.any.js @@ -0,0 +1,10 @@ +// META: title=Summarizer Create +// META: script=../resources/util.js +// META: timeout=long + +'use strict'; + +promise_test(async () => { + assert_true(!!Summarizer); + assert_equals(typeof Summarizer.create, 'function'); +}, 'Summarizer.create() is defined'); diff --git a/tests/wpt/tests/ai/summarizer/summarizer-iframe.tentative.https.html b/tests/wpt/tests/ai/summarizer/summarizer-iframe.tentative.https.html new file mode 100644 index 00000000000..219811c8831 --- /dev/null +++ b/tests/wpt/tests/ai/summarizer/summarizer-iframe.tentative.https.html @@ -0,0 +1,115 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/get-host-info.sub.js"></script> +<body></body> +<script> +'use strict'; + +const { HTTPS_ORIGIN, HTTPS_NOTSAMESITE_ORIGIN } = get_host_info(); +const PATH = location.pathname.substring(0, location.pathname.lastIndexOf('/') + 1); +const IFRAME_PATH = PATH + 'resources/iframe-helper.html'; + +function load_iframe(src, permission_policy, test_name) { + let iframe = document.createElement('iframe'); + return new Promise((resolve, reject) => { + iframe.onload = () => { + iframe.contentWindow.postMessage({type: test_name}, '*'); + resolve(iframe); + } + iframe.src = src; + iframe.allow = permission_policy; + document.body.appendChild(iframe); + }); +} + +promise_test(async t => { + const src = HTTPS_NOTSAMESITE_ORIGIN + IFRAME_PATH; + await load_iframe(src, /*permission_policy=*/"", "SummarizerCreate"); + return new Promise((resolve, reject) => { + window.onmessage = message => { + if (message.data == 'Failure: NotAllowedError') { + resolve(); + } else { + reject(message.data) + } + } + }); +}, "Throw a 'NotAllowedError' when creating Summarizer within cross-origin iframe"); + +promise_test(async t => { + const src = HTTPS_NOTSAMESITE_ORIGIN + IFRAME_PATH; + load_iframe(src, "summarizer", "SummarizerCreate"); + + return new Promise((resolve, reject) => { + window.onmessage = message => { + if (message.data == 'Success') { + resolve(); + } else { + reject(message.data) + } + } + }); +}, "Summarizer can be created within cross-origin iframe with permission policy"); + +promise_test(async t => { + const src = HTTPS_ORIGIN + IFRAME_PATH; + load_iframe(src, /*permission_policy=*/"", "SummarizerCreate"); + + return new Promise((resolve, reject) => { + window.onmessage = message => { + if (message.data == 'Success') { + resolve(); + } else { + reject(message.data) + } + } + }); +}, "Summarizer can be used within same-origin iframe"); + +promise_test(async t => { + const src = HTTPS_NOTSAMESITE_ORIGIN + IFRAME_PATH; + load_iframe(src, /*permission_policy=*/"", "SummarizerAvailability"); + + return new Promise((resolve, reject) => { + window.onmessage = message => { + if (message.data == 'unavailable') { + resolve(); + } else { + reject(message.data) + } + } + }); +}, "Summarizer is unavailable within cross-origin iframe"); + +promise_test(async t => { + const src = HTTPS_NOTSAMESITE_ORIGIN + IFRAME_PATH; + load_iframe(src, "summarizer", "SummarizerAvailability"); + + return new Promise((resolve, reject) => { + window.onmessage = message => { + if (message.data != 'unavailable') { + resolve(); + } else { + reject(message.data) + } + } + }); +}, "Summarizer is available within cross-origin iframe with permission policy"); + +promise_test(async t => { + const src = HTTPS_ORIGIN + IFRAME_PATH; + load_iframe(src, /*permission_policy=*/"", "SummarizerAvailability"); + + return new Promise((resolve, reject) => { + window.onmessage = message => { + if (message.data != 'unavailable') { + resolve(); + } else { + reject(message.data) + } + } + }); +}, "Summarizer is available within same-origin iframe"); + +</script> diff --git a/tests/wpt/tests/ai/summarizer/summarizer-measureInputUsage.tentative.https.any.js b/tests/wpt/tests/ai/summarizer/summarizer-measureInputUsage.tentative.https.any.js new file mode 100644 index 00000000000..ce9745acf17 --- /dev/null +++ b/tests/wpt/tests/ai/summarizer/summarizer-measureInputUsage.tentative.https.any.js @@ -0,0 +1,12 @@ +// META: title=Summarizer measureInputUsage +// META: script=../resources/util.js +// META: timeout=long + +'use strict'; + +promise_test(async () => { + const summarizer = await Summarizer.create(); + const result = await summarizer.measureInputUsage(kTestPrompt); + assert_equals(typeof result, 'number'); + assert_greater_than(result, 0); +}, 'Summarizer.measureInputUsage() returns non-empty result'); diff --git a/tests/wpt/tests/ai/summarizer/summarizer-streaming.tentative.https.any.js b/tests/wpt/tests/ai/summarizer/summarizer-summarize-streaming.tentative.https.any.js index 6a1ff8b5a69..b88ccb325e2 100644 --- a/tests/wpt/tests/ai/summarizer/summarizer-streaming.tentative.https.any.js +++ b/tests/wpt/tests/ai/summarizer/summarizer-summarize-streaming.tentative.https.any.js @@ -1,4 +1,4 @@ -// META: title=Summarizer Streaming +// META: title=Summarizer Summarize Streaming // META: script=../resources/util.js // META: timeout=long diff --git a/tests/wpt/tests/ai/summarizer/summarizer-summarize.tentative.https.any.js b/tests/wpt/tests/ai/summarizer/summarizer-summarize.tentative.https.any.js new file mode 100644 index 00000000000..f019746fbdd --- /dev/null +++ b/tests/wpt/tests/ai/summarizer/summarizer-summarize.tentative.https.any.js @@ -0,0 +1,12 @@ +// META: title=Summarizer Create Available +// META: script=../resources/util.js +// META: timeout=long + +'use strict'; + +promise_test(async () => { + const summarizer = await Summarizer.create(); + const result = await summarizer.summarize(kTestPrompt); + assert_equals(typeof result, 'string'); + assert_greater_than(result.length, 0); +}, 'Summarizer.summarize() returns non-empty result'); diff --git a/tests/wpt/tests/ai/summarizer/summarizer.tentative.https.any.js b/tests/wpt/tests/ai/summarizer/summarizer.tentative.https.any.js deleted file mode 100644 index 50ad4d23709..00000000000 --- a/tests/wpt/tests/ai/summarizer/summarizer.tentative.https.any.js +++ /dev/null @@ -1,108 +0,0 @@ -// META: title=Summarizer -// META: script=../resources/util.js -// META: timeout=long - -'use strict'; - -promise_test(async () => { - assert_true(!!Summarizer); -}, 'Summarizer must be defined.'); - -promise_test(async () => { - const availability = await Summarizer.availability({ - type: "tl;dr", - format: "plain-text", - length: "medium", - }); - assert_not_equals(availability, "unavailable"); -}, 'Summarizer.availability() is available'); - -promise_test(async () => { - const availability = await Summarizer.availability({ - type: "tl;dr", - format: "plain-text", - length: "medium", - expectedInputLanguages: ["en-GB"], - expectedContextLanguages: ["en"], - outputLanguage: "en", - }); - assert_not_equals(availability, "unavailable"); -}, 'Summarizer.availability() is available for supported languages'); - -promise_test(async () => { - const availability = await Summarizer.availability({ - type: "tl;dr", - format: "plain-text", - length: "medium", - expectedInputLanguages: ["es"], // not supported - expectedContextLanguages: ["en"], - outputLanguage: "es", // not supported - }); - assert_equals(availability, "unavailable"); -}, 'Summarizer.availability() returns no for unsupported languages'); - -promise_test(async () => { - await testMonitor(Summarizer.create); -}, 'Summarizer.create() notifies its monitor on downloadprogress'); - -promise_test(async () => { - const summarizer = await Summarizer.create({}); - const result = await summarizer.summarize(kTestPrompt); - assert_equals(typeof result, "string"); - assert_greater_than(result.length, 0); -}, 'Summarizer.summarize() returns non-empty result'); - -promise_test(async () => { - const summarizer = await Summarizer.create({}); - const result = await summarizer.measureInputUsage(kTestPrompt); - assert_greater_than(result, 0); -}, 'Summarizer.measureInputUsage() returns non-empty result'); - -promise_test(async () => { - const sharedContext = 'This is a shared context string'; - const summarizer = await Summarizer.create({sharedContext: sharedContext}); - assert_equals(summarizer.sharedContext, sharedContext); -}, 'Summarizer.sharedContext'); - -promise_test(async () => { - const summarizer = await Summarizer.create({type: 'headline'}); - assert_equals(summarizer.type, 'headline'); -}, 'Summarizer.type'); - -promise_test(async () => { - const summarizer = await Summarizer.create({format: 'markdown'}); - assert_equals(summarizer.format, 'markdown'); -}, 'Summarizer.format'); - -promise_test(async () => { - const summarizer = await Summarizer.create({length: 'medium'}); - assert_equals(summarizer.length, 'medium'); -}, 'Summarizer.length'); - -promise_test(async () => { - const summarizer = await Summarizer.create({ - expectedInputLanguages: ['en'] - }); - assert_array_equals(summarizer.expectedInputLanguages, ['en']); -}, 'Summarizer.expectedInputLanguages'); - -promise_test(async () => { - const summarizer = await Summarizer.create({ - expectedContextLanguages: ['en'] - }); - assert_array_equals(summarizer.expectedContextLanguages, ['en']); -}, 'Summarizer.expectedContextLanguages'); - -promise_test(async () => { - const summarizer = await Summarizer.create({ - outputLanguage: 'en' - }); - assert_equals(summarizer.outputLanguage, 'en'); -}, 'Summarizer.outputLanguage'); - -promise_test(async () => { - const summarizer = await Summarizer.create({}); - assert_equals(summarizer.expectedInputLanguages, null); - assert_equals(summarizer.expectedContextLanguages, null); - assert_equals(summarizer.outputLanguage, null); -}, 'Summarizer optional attributes return null'); diff --git a/tests/wpt/tests/bluetooth/resources/bluetooth-test.js b/tests/wpt/tests/bluetooth/resources/bluetooth-test.js index bd597efd01b..05981c07e15 100644 --- a/tests/wpt/tests/bluetooth/resources/bluetooth-test.js +++ b/tests/wpt/tests/bluetooth/resources/bluetooth-test.js @@ -370,7 +370,7 @@ function assert_promise_resolves_after_event( } /** - * Returns a promise that resolves after 100ms unless the the event is fired on + * Returns a promise that resolves after 100ms unless the event is fired on * the object in which case the promise rejects. * @param {EventTarget} object The target object to listen for events. * @param {string} event_name The event type to listen for. diff --git a/tests/wpt/tests/clear-site-data/clear-cache-partitioning.https.html b/tests/wpt/tests/clear-site-data/clear-cache-partitioning.tentative.https.html index 2deadeef2d0..2deadeef2d0 100644 --- a/tests/wpt/tests/clear-site-data/clear-cache-partitioning.https.html +++ b/tests/wpt/tests/clear-site-data/clear-cache-partitioning.tentative.https.html diff --git a/tests/wpt/tests/cookie-store/cookieStore_delete.sub.https.html b/tests/wpt/tests/cookie-store/cookieStore_delete.sub.https.html new file mode 100644 index 00000000000..8cdfae6776d --- /dev/null +++ b/tests/wpt/tests/cookie-store/cookieStore_delete.sub.https.html @@ -0,0 +1,65 @@ +<!doctype html> +<meta charset='utf-8'> +<title>Async Cookies: cookieStore basic API across origins</title> +<link rel='help' href='https://github.com/WICG/cookie-store'> +<link rel='author' href='jarrydg@chromium.org' title='Jarryd Goodman'> +<script src='/resources/testharness.js'></script> +<script src='/resources/testharnessreport.js'></script> +<script src='resources/helpers.js'></script> +<style>iframe { display: none; }</style> + +<script> +'use strict'; + +const kPath = '/cookie-store/resources/helper_iframe.sub.html'; +const kCorsBase = `https://{{domains[www1]}}:{{ports[https][0]}}`; +const kCorsUrl = `${kCorsBase}${kPath}`; + +promise_test(async t => { + const iframe = await createIframe(kCorsUrl, t); + assert_true(iframe != null); + + iframe.contentWindow.postMessage({ + opname: 'set-cookie-without-domain-attr', + name: 'cookie-name', + value: 'cookie-value', + }, kCorsBase); + t.add_cleanup(async () => { + await cookieStore.delete({ name: 'cookie-name', domain: '{{host}}' }); + }); + await waitForMessage(); + + iframe.contentWindow.postMessage({ + opname: 'get-cookie', + name: 'cookie-name', + options: {} + }, '*'); + + { + const message = await waitForMessage(); + const { frameCookie } = message; + assert_not_equals(frameCookie, null); + assert_equals(frameCookie.name, 'cookie-name'); + assert_equals(frameCookie.value, 'cookie-value'); + } + + iframe.contentWindow.postMessage({ + opname: 'delete-cookie-without-domain-attr', + name: 'cookie-name', + }, kCorsBase); + + await waitForMessage(); + + iframe.contentWindow.postMessage({ + opname: 'get-cookie', + name: 'cookie-name', + options: {} + }, '*'); + + { + const message = await waitForMessage(); + const { frameCookie } = message; + assert_equals(frameCookie, null); + } +}); +</script> diff --git a/tests/wpt/tests/cookie-store/resources/helper_iframe.sub.html b/tests/wpt/tests/cookie-store/resources/helper_iframe.sub.html index 750f19b56d3..3bd1843d574 100644 --- a/tests/wpt/tests/cookie-store/resources/helper_iframe.sub.html +++ b/tests/wpt/tests/cookie-store/resources/helper_iframe.sub.html @@ -22,10 +22,21 @@ domain: '{{host}}', }); event.source.postMessage('Cookie has been set', event.origin); + } else if (opname === 'set-cookie-without-domain-attr') { + const { name, value } = event.data + await cookieStore.set({ + name, + value, + }); + event.source.postMessage('Cookie has been set', event.origin); } else if (opname === 'get-cookie') { const { name, options } = event.data const frameCookie = await cookieStore.get(name, options); event.source.postMessage({frameCookie}, event.origin); + } else if (opname === 'delete-cookie-without-domain-attr') { + const { name } = event.data + await cookieStore.delete({name}); + event.source.postMessage('Cookie has been deleted', event.origin); } else if (opname === 'push-state') { history.pushState("foo", null, "some/path"); event.source.postMessage('pushState called'); diff --git a/tests/wpt/tests/credential-management/non-fully-active.https.html b/tests/wpt/tests/credential-management/non-fully-active.https.html index 508b4325d78..a0a76f0fce1 100644 --- a/tests/wpt/tests/credential-management/non-fully-active.https.html +++ b/tests/wpt/tests/credential-management/non-fully-active.https.html @@ -26,7 +26,7 @@ const iframe = document.querySelector("iframe"); // The signal check happens after the fully active check. - // This allows us to confirm the the right error is thrown + // This allows us to confirm the right error is thrown // and in the right order. const controller = new iframe.contentWindow.AbortController(); const signal = controller.signal; diff --git a/tests/wpt/tests/css/CSS2/css1/c414-flt-ln-002.xht b/tests/wpt/tests/css/CSS2/css1/c414-flt-ln-002.xht index 99965439661..ef5448c4893 100644 --- a/tests/wpt/tests/css/CSS2/css1/c414-flt-ln-002.xht +++ b/tests/wpt/tests/css/CSS2/css1/c414-flt-ln-002.xht @@ -30,7 +30,7 @@ <p>Test passes if for each matching pair of colored boxes either:</p> <ul> <li>the top of the small box is level with the top of the big box <em>or</em></li> - <li>the top of the big box is level with the bottom of the the small box + <li>the top of the big box is level with the bottom of the small box and either <ul> <li>the small box crosses into the righthand region marked by the yellow box or</li> diff --git a/tests/wpt/tests/css/CSS2/i18n/visuren/direction-unicode-bidi-007.xht b/tests/wpt/tests/css/CSS2/i18n/visuren/direction-unicode-bidi-007.xht index d7f00230f9d..ff45a8cb230 100644 --- a/tests/wpt/tests/css/CSS2/i18n/visuren/direction-unicode-bidi-007.xht +++ b/tests/wpt/tests/css/CSS2/i18n/visuren/direction-unicode-bidi-007.xht @@ -6,7 +6,7 @@ <link rel='author' title='Richard Ishida' href='http://rishida.net' /> <link rel='help' href='http://www.w3.org/TR/CSS21/visuren.html#direction' /> <link rel='alternate' href='http://www.w3.org/International/tests/tests-html-css/tests-direction-unicode-bidi/generate?test=7' /> -<meta name="assert" content="In a RTL context, if direction:ltr and unicode-bidi:embed are applied to an inline element containing mixed direction text, the the inline element will interact with surrounding ltr text as a LTR directional run." /> +<meta name="assert" content="In a RTL context, if direction:ltr and unicode-bidi:embed are applied to an inline element containing mixed direction text, the inline element will interact with surrounding ltr text as a LTR directional run." /> <style type='text/css'> .test { direction: rtl; } .test span { direction: ltr; unicode-bidi: embed; } diff --git a/tests/wpt/tests/css/CSS2/i18n/visuren/direction-unicode-bidi-008.xht b/tests/wpt/tests/css/CSS2/i18n/visuren/direction-unicode-bidi-008.xht index 3b5e7299fea..53c0318839b 100644 --- a/tests/wpt/tests/css/CSS2/i18n/visuren/direction-unicode-bidi-008.xht +++ b/tests/wpt/tests/css/CSS2/i18n/visuren/direction-unicode-bidi-008.xht @@ -6,7 +6,7 @@ <link rel='author' title='Richard Ishida' href='http://rishida.net' /> <link rel='help' href='http://www.w3.org/TR/CSS21/visuren.html#direction' /> <link rel='alternate' href='http://www.w3.org/International/tests/tests-html-css/tests-direction-unicode-bidi/generate?test=8' /> -<meta name="assert" content="In a LTR context, if direction:rtl and unicode-bidi:embed are applied to an inline element containing mixed direction text, the the inline element will interact with surrounding rtl text as a RTL directional run." /> +<meta name="assert" content="In a LTR context, if direction:rtl and unicode-bidi:embed are applied to an inline element containing mixed direction text, the inline element will interact with surrounding rtl text as a RTL directional run." /> <style type='text/css'> .test { direction: ltr; } .test span { direction: rtl; unicode-bidi: embed; } diff --git a/tests/wpt/tests/css/css-anchor-position/anchor-size-parse-valid.html b/tests/wpt/tests/css/css-anchor-position/anchor-size-parse-valid.html index 8e69476512b..312d3c71801 100644 --- a/tests/wpt/tests/css/css-anchor-position/anchor-size-parse-valid.html +++ b/tests/wpt/tests/css/css-anchor-position/anchor-size-parse-valid.html @@ -102,7 +102,7 @@ test_valid_value('width', 'anchor-size(10px)'); for (const prop of ['width', 'max-width', 'margin-left']) { test_valid_value(prop, 'calc((anchor-size(--foo width) + anchor-size(--bar height)) / 2)', 'calc(0.5 * (anchor-size(--foo width) + anchor-size(--bar height)))'); test_valid_value(prop, 'calc(0.5 * (anchor-size(--foo width) + anchor-size(--bar height)))'); - test_valid_value(prop, 'anchor-size(--foo width, calc(anchor-size(--bar height) * 0.5))'); + test_valid_value(prop, 'anchor-size(--foo width, calc(0.5 * anchor-size(--bar height)))'); test_valid_value(prop, 'min(100px, 10%, anchor-size(--foo width), anchor-size(--bar height))'); } </script> diff --git a/tests/wpt/tests/css/css-animations/parsing/animation-range-start-valid.html b/tests/wpt/tests/css/css-animations/parsing/animation-range-start-valid.html index bb1dbe35c04..311df59b51b 100644 --- a/tests/wpt/tests/css/css-animations/parsing/animation-range-start-valid.html +++ b/tests/wpt/tests/css/css-animations/parsing/animation-range-start-valid.html @@ -29,5 +29,5 @@ test_valid_value("animation-range-start", "cover"); test_valid_value("animation-range-start", "contain"); test_valid_value("animation-range-start", "entry"); test_valid_value("animation-range-start", "exit"); -test_valid_value("animation-range-start", "cover calc(sign(100em - 1px) * 1%)"); +test_valid_value("animation-range-start", "cover calc(sign(100em - 1px) * 1%)", "cover calc(1% * sign(100em - 1px))"); </script> diff --git a/tests/wpt/tests/css/css-animations/parsing/animation-trigger-exit-range-start-valid.html b/tests/wpt/tests/css/css-animations/parsing/animation-trigger-exit-range-start-valid.html index a9c7b21dc95..881ad833c4b 100644 --- a/tests/wpt/tests/css/css-animations/parsing/animation-trigger-exit-range-start-valid.html +++ b/tests/wpt/tests/css/css-animations/parsing/animation-trigger-exit-range-start-valid.html @@ -31,5 +31,5 @@ test_valid_value("animation-trigger-exit-range-start", "cover"); test_valid_value("animation-trigger-exit-range-start", "contain"); test_valid_value("animation-trigger-exit-range-start", "entry"); test_valid_value("animation-trigger-exit-range-start", "exit"); -test_valid_value("animation-trigger-exit-range-start", "cover calc(sign(100em - 1px) * 1%)"); +test_valid_value("animation-trigger-exit-range-start", "cover calc(sign(100em - 1px) * 1%)", "cover calc(1% * sign(100em - 1px))"); </script> diff --git a/tests/wpt/tests/css/css-animations/parsing/animation-trigger-range-start-valid.html b/tests/wpt/tests/css/css-animations/parsing/animation-trigger-range-start-valid.html index d48151b6db0..6a091fa4d07 100644 --- a/tests/wpt/tests/css/css-animations/parsing/animation-trigger-range-start-valid.html +++ b/tests/wpt/tests/css/css-animations/parsing/animation-trigger-range-start-valid.html @@ -30,5 +30,5 @@ test_valid_value("animation-trigger-range-start", "cover"); test_valid_value("animation-trigger-range-start", "contain"); test_valid_value("animation-trigger-range-start", "entry"); test_valid_value("animation-trigger-range-start", "exit"); -test_valid_value("animation-trigger-range-start", "cover calc(sign(100em - 1px) * 1%)"); +test_valid_value("animation-trigger-range-start", "cover calc(sign(100em - 1px) * 1%)", "cover calc(1% * sign(100em - 1px))"); </script> diff --git a/tests/wpt/tests/css/css-backgrounds/border-image-width-005.xht b/tests/wpt/tests/css/css-backgrounds/border-image-width-005.xht index eeceedef90e..1e93b7219d4 100644 --- a/tests/wpt/tests/css/css-backgrounds/border-image-width-005.xht +++ b/tests/wpt/tests/css/css-backgrounds/border-image-width-005.xht @@ -34,7 +34,7 @@ border-width: 0px; /* so the border belt (or border area) of the element is 0px tall and 0px wide */ border-image-source: url("support/outline-5px-10px-15px-20px-green.png"); border-image-slice: 5% 10% 15% 20%; /* <number> Percentages are relative to the size of the image: the width of the image for the horizontal offsets, the height for vertical offsets. */ - border-image-width: 50px; /* The four values of ‘border-image-width’ specify offsets that are used to divide the border image area into nine parts. They represent inward distances from the the top, right, bottom, and left sides of the area, respectively. */ + border-image-width: 50px; /* The four values of ‘border-image-width’ specify offsets that are used to divide the border image area into nine parts. They represent inward distances from the top, right, bottom, and left sides of the area, respectively. */ border-image-outset: 25px 25px 25px 25px; /* The border-image-outset values specify the amount by which the border image area *_ extends beyond the border box_*. */ height: 20px; margin-left: 25px; /* == border-image-outset . This margin-left value is just to position the rendered layout to accurately match the reference file . */ diff --git a/tests/wpt/tests/css/css-backgrounds/border-image-width-006.xht b/tests/wpt/tests/css/css-backgrounds/border-image-width-006.xht index aa487b76c53..bd046c25876 100644 --- a/tests/wpt/tests/css/css-backgrounds/border-image-width-006.xht +++ b/tests/wpt/tests/css/css-backgrounds/border-image-width-006.xht @@ -34,7 +34,7 @@ border-width: 0px; /* so the border belt (or border area) of the element is 0px tall and 0px wide */ border-image-source: url("support/outline-5px-10px-15px-20px-green.png"); border-image-slice: 5% 10% 15% 20%; /* <number> Percentages are relative to the size of the image: the width of the image for the horizontal offsets, the height for vertical offsets. */ - border-image-width: 50px; /* The four values of ‘border-image-width’ specify offsets that are used to divide the border image area into nine parts. They represent inward distances from the the top, right, bottom, and left sides of the area, respectively. */ + border-image-width: 50px; /* The four values of ‘border-image-width’ specify offsets that are used to divide the border image area into nine parts. They represent inward distances from the top, right, bottom, and left sides of the area, respectively. */ border-image-outset: 25px 25px 25px 25px; /* The border-image-outset values specify the amount by which the border image area *_ extends beyond the border box_*. */ height: 0px; margin-left: 25px; /* == border-image-outset . This margin-left value is just to position the rendered layout to accurately match the reference file . */ diff --git a/tests/wpt/tests/css/css-backgrounds/border-image-width-007.xht b/tests/wpt/tests/css/css-backgrounds/border-image-width-007.xht index 61726c00873..6c4647dd87f 100644 --- a/tests/wpt/tests/css/css-backgrounds/border-image-width-007.xht +++ b/tests/wpt/tests/css/css-backgrounds/border-image-width-007.xht @@ -28,7 +28,7 @@ border-width: 0px; /* so the border belt (or border area) of the element is 0px tall and 0px wide */ border-image-source: url("support/outline-5px-10px-15px-20px-green.png"); border-image-slice: 5% 10% 15% 20%; /* <number> Percentages are relative to the size of the image: the width of the image for the horizontal offsets, the height for vertical offsets. */ - border-image-width: 50px; /* The four values of ‘border-image-width’ specify offsets that are used to divide the border image area into nine parts. They represent inward distances from the the top, right, bottom, and left sides of the area, respectively. */ + border-image-width: 50px; /* The four values of ‘border-image-width’ specify offsets that are used to divide the border image area into nine parts. They represent inward distances from the top, right, bottom, and left sides of the area, respectively. */ border-image-outset: 50px 50px 50px 50px; /* The border-image-outset values specify the amount by which the border image area !_ extends beyond the border box_!. */ height: 0px; margin: 66px 50px 50px 50px; diff --git a/tests/wpt/tests/css/css-backgrounds/border-image-width-009.html b/tests/wpt/tests/css/css-backgrounds/border-image-width-009.html index 112c2a485ac..109f34fe9fd 100644 --- a/tests/wpt/tests/css/css-backgrounds/border-image-width-009.html +++ b/tests/wpt/tests/css/css-backgrounds/border-image-width-009.html @@ -39,7 +39,7 @@ /* The four values of 'border-image-width' specify offsets that are used to divide the border image area into nine - parts. They represent inward distances from the the top, + parts. They represent inward distances from the top, right, bottom, and left sides of the area, respectively. In this sub-test1, the border-image-width divide the border image area into four (4) parts, not nine parts. The center diff --git a/tests/wpt/tests/css/css-borders/tentative/corner-shape/corner-shape-backdrop-filter-overflow-ref.html b/tests/wpt/tests/css/css-borders/tentative/corner-shape/corner-shape-backdrop-filter-overflow-ref.html new file mode 100644 index 00000000000..4aabd7e8e35 --- /dev/null +++ b/tests/wpt/tests/css/css-borders/tentative/corner-shape/corner-shape-backdrop-filter-overflow-ref.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<head> +<style> + .target { + width: 200px; + height: 200px; + corner-shape: superellipse(1.8) scoop superellipse(-5) bevel; + border-radius: 25%; + position: relative; + } + + .ref { + background: rgb(0 64 0); + } + .overflow { + position: absolute; + left: 100px; + top: 100px; + width: 200px; + height: 200px; + background: rebeccapurple; + } +</style> +</head> +<body> + <div class="target ref"><div class="overflow"></div></div> +</body> diff --git a/tests/wpt/tests/css/css-borders/tentative/corner-shape/corner-shape-backdrop-filter-overflow.html b/tests/wpt/tests/css/css-borders/tentative/corner-shape/corner-shape-backdrop-filter-overflow.html new file mode 100644 index 00000000000..550428a37e3 --- /dev/null +++ b/tests/wpt/tests/css/css-borders/tentative/corner-shape/corner-shape-backdrop-filter-overflow.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<head> +<link rel="match" href="corner-shape-backdrop-filter-overflow-ref.html"> +<meta name="fuzzy" content="maxDifference=0-64;totalPixels=0-360"> +<style> + .target { + width: 200px; + height: 200px; + corner-shape: superellipse(1.8) scoop superellipse(-5) bevel; + border-radius: 25%; + position: relative; + } + + .backdrop { + background: rgba(0 128 0 / 50%); + backdrop-filter: brightness(0); + } + + .overflow { + position: absolute; + left: 100px; + top: 100px; + width: 200px; + height: 200px; + background: rebeccapurple; + } +</style> +</head> +<body> + <div class="target backdrop"><div class=overflow></div></div> +</body> diff --git a/tests/wpt/tests/css/css-borders/tentative/corner-shape/corner-shape-backdrop-filter-ref.html b/tests/wpt/tests/css/css-borders/tentative/corner-shape/corner-shape-backdrop-filter-ref.html new file mode 100644 index 00000000000..165f93e6be1 --- /dev/null +++ b/tests/wpt/tests/css/css-borders/tentative/corner-shape/corner-shape-backdrop-filter-ref.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<head> +<style> + .target { + width: 200px; + height: 200px; + corner-shape: squircle scoop notch bevel; + border-radius: 40%; + } + + .ref { + background: rgb(0 64 0); + } +</style> +</head> +<body> + <div class="target ref"></div> +</body> diff --git a/tests/wpt/tests/css/css-borders/tentative/corner-shape/corner-shape-backdrop-filter.html b/tests/wpt/tests/css/css-borders/tentative/corner-shape/corner-shape-backdrop-filter.html new file mode 100644 index 00000000000..c4a2523b1f8 --- /dev/null +++ b/tests/wpt/tests/css/css-borders/tentative/corner-shape/corner-shape-backdrop-filter.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<head> +<link rel="match" href="corner-shape-backdrop-filter-ref.html"> +<meta name="fuzzy" content="maxDifference=0-64;totalPixels=0-360"> +<style> + .target { + width: 200px; + height: 200px; + corner-shape: squircle scoop notch bevel; + border-radius: 40%; + } + + .backdrop { + background: rgba(0 128 0 / 50%); + backdrop-filter: brightness(0); + } + +</style> +</head> +<body> + <div class="target backdrop"></div> +</body> diff --git a/tests/wpt/tests/css/css-color-hdr/computed.html b/tests/wpt/tests/css/css-color-hdr/computed.html index 47021144087..38a540bd66a 100644 --- a/tests/wpt/tests/css/css-color-hdr/computed.html +++ b/tests/wpt/tests/css/css-color-hdr/computed.html @@ -43,4 +43,6 @@ test_computed_value("dynamic-range-limit", "dynamic-range-limit-mix(dynamic-rang "dynamic-range-limit-mix(standard 15%, constrained 40%, no-limit 45%)"); test_computed_value("dynamic-range-limit", "dynamic-range-limit-mix(no-limit 10%, dynamic-range-limit-mix(standard 25%, constrained 75%) 20%, dynamic-range-limit-mix(constrained 10%, no-limit 30%) 20%)", "dynamic-range-limit-mix(standard 10%, constrained 40%, no-limit 50%)"); +test_computed_value("dynamic-range-limit", "dynamic-range-limit-mix(standard calc(50% * sign(10em - 1px)), constrained 50%)", + "dynamic-range-limit-mix(standard 50%, constrained 50%)"); </script> diff --git a/tests/wpt/tests/css/css-color-hdr/parsing.html b/tests/wpt/tests/css/css-color-hdr/parsing.html index e165a60d7ed..2447891f2c4 100644 --- a/tests/wpt/tests/css/css-color-hdr/parsing.html +++ b/tests/wpt/tests/css/css-color-hdr/parsing.html @@ -20,6 +20,8 @@ test_valid_value("dynamic-range-limit", "dynamic-range-limit-mix(dynamic-range-limit-mix(constrained 90%, no-limit 10%) 1%, no-limit 80%)"); test_valid_value("dynamic-range-limit", "dynamic-range-limit-mix(no-limit 1%, dynamic-range-limit-mix(constrained 2%, no-limit 10%) 80%)"); test_valid_value("dynamic-range-limit", "dynamic-range-limit-mix(dynamic-range-limit-mix(no-limit 1%, standard 2%) 3%, dynamic-range-limit-mix(constrained 5%, no-limit 5%) 6%)"); + test_valid_value("dynamic-range-limit", "dynamic-range-limit-mix(standard calc(50% * sign(10em - 1px)), constrained 50%)"); + test_invalid_value("dynamic-range-limit", "dynamic-range-limit-mix(no-limit 80%, standard 20%, )"); test_invalid_value("dynamic-range-limit", "dynamic-range-limit-mix(no-limit, standard 20%)"); test_invalid_value("dynamic-range-limit", "dynamic-range-limit-mix(constrained, no-limit, 80%)"); diff --git a/tests/wpt/tests/css/css-color/parsing/color-valid-relative-color.html b/tests/wpt/tests/css/css-color/parsing/color-valid-relative-color.html index 142f96bcf9b..f1f31b93d41 100644 --- a/tests/wpt/tests/css/css-color/parsing/color-valid-relative-color.html +++ b/tests/wpt/tests/css/css-color/parsing/color-valid-relative-color.html @@ -560,7 +560,7 @@ fuzzy_test_valid_color(`oklch(from oklch(0.7 0.2 300) calc(l - 0.2) c h)`, `oklch(from oklch(0.7 0.2 300) calc(-0.2 + l) c h)`); fuzzy_test_valid_color(`oklch(from oklch(0.7 0.2 300) l calc(c / 2) h)`, `oklch(from oklch(0.7 0.2 300) l calc(0.5 * c) h)`); fuzzy_test_valid_color(`oklch(from oklch(0.7 0.2 300) l c calc(h * 2.5))`, `oklch(from oklch(0.7 0.2 300) l c calc(2.5 * h))`); - fuzzy_test_valid_color(`oklch(from red calc(1 / l) c h)`); + fuzzy_test_valid_color(`oklch(from red calc(1 / l) c h)`, `oklch(from red calc((1 / l)) c h)`); // Testing with 'none'. fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) none none none)`); diff --git a/tests/wpt/tests/css/css-flexbox/fixed-table-layout-with-percentage-width-in-flex-item.html b/tests/wpt/tests/css/css-flexbox/fixed-table-layout-with-percentage-width-in-flex-item.html index 507e0e9fcef..66cefc8f23c 100644 --- a/tests/wpt/tests/css/css-flexbox/fixed-table-layout-with-percentage-width-in-flex-item.html +++ b/tests/wpt/tests/css/css-flexbox/fixed-table-layout-with-percentage-width-in-flex-item.html @@ -7,7 +7,7 @@ <link rel="author" title="Mozilla" href="https://www.mozilla.org"> <link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1469649"> <link rel="match" href="fixed-table-layout-with-percentage-width-in-flex-item-ref.html"> - <meta name="assert" content="This test verifies that each flex item with a table descendant should have the the same definite post-flexing main size."> + <meta name="assert" content="This test verifies that each flex item with a table descendant should have the same definite post-flexing main size."> <style> .container { diff --git a/tests/wpt/tests/css/css-flexbox/flex-direction.html b/tests/wpt/tests/css/css-flexbox/flex-direction.html index 709b1b036a2..01c6778a122 100644 --- a/tests/wpt/tests/css/css-flexbox/flex-direction.html +++ b/tests/wpt/tests/css/css-flexbox/flex-direction.html @@ -5,7 +5,7 @@ <link rel="author" title="houzhenyu" href="http://www.github.com/sskyy" /> <link rel="help" href="http://www.w3.org/TR/css-flexbox-1/#flex-direction"> <link rel="match" href="reference/flex-direction.html"> -<meta name="assert" content="The flow of flex items in the the flex container should observe the flex-direction property." /> +<meta name="assert" content="The flow of flex items in the flex container should observe the flex-direction property." /> <style> .flex-container{ display: flex; diff --git a/tests/wpt/tests/css/css-gaps/tentative/agnostic/gap-decorations-001-ref.html b/tests/wpt/tests/css/css-gaps/tentative/agnostic/gap-decorations-001-ref.html index f21be425243..a7314fc7dca 100644 --- a/tests/wpt/tests/css/css-gaps/tentative/agnostic/gap-decorations-001-ref.html +++ b/tests/wpt/tests/css/css-gaps/tentative/agnostic/gap-decorations-001-ref.html @@ -2,33 +2,43 @@ <link rel="help" href="https://drafts.csswg.org/css-gaps-1/"> <link rel="author" title="Sam Davis Omekara Jr." href="mailto:samomekarajr@microsoft.com"> <style> + body { + margin: 0px; + } + .container { + display: flex; width: 110px; height: 110px; - - column-count: 2; column-gap: 10px; - column-rule-color: pink; - column-rule-style: solid; - column-rule-width: 10px; - - background-color: green; - - overflow: hidden; + row-gap: 10px; + flex-wrap: wrap; } .item { background: skyblue; height: 50px; - width: 100%; + width: 50px; margin: 0; } - /* For 2x2 grid-like layout, add a 10px bottom margin to - odd children(#1 & #3) to simulate a horizontal row gap.*/ - .item:nth-child(odd) { - margin-bottom: 10px; + .row-gap { + position: absolute; + top: 50px; + background: green; + width: 110px; + height: 10px; + } + + .column-gap { + position: absolute; + top: 0px; + left: 50px; + background: pink; + height: 110px; + width: 10px; } + </style> <div class="container"> <div class="item"></div> @@ -36,3 +46,6 @@ <div class="item"></div> <div class="item"></div> </div> + +<div class="column-gap"></div> +<div class="row-gap"></div>
\ No newline at end of file diff --git a/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-002.html b/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-002.html index 632b690434c..58740200d4a 100644 --- a/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-002.html +++ b/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-002.html @@ -6,6 +6,10 @@ <link rel="match" href="../agnostic/gap-decorations-001-ref.html"> <link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com"> <style> + body { + margin: 0px; + } + .flex-container { height: 110px; width: 110px; diff --git a/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-003-ref.html b/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-003-ref.html index 03a815909f2..137a63474b8 100644 --- a/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-003-ref.html +++ b/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-003-ref.html @@ -63,9 +63,6 @@ <div class="items">Eight</div> </div> -<div id="row1" class="row-gap" style="top: 52px; left: 2px;"></div> -<div id="row2" class="row-gap" style="top: 112px; left: 2px;"></div> - <div id="columns1" style="left: 52px;" class="column-gap"> <div id="c1" class="column"></div> <div id="c2" class="column"></div> @@ -76,4 +73,7 @@ <div id="c2" class="column"></div> </div> -<div id="vertical3" style="left: 102px; position:absolute; top: 57px; height:60px;" class="column"></div> +<div id="columns3" style="left: 102px; position:absolute; top: 57px; height:60px;" class="column"></div> + +<div id="row1" class="row-gap" style="top: 52px; left: 2px;"></div> +<div id="row2" class="row-gap" style="top: 112px; left: 2px;"></div> diff --git a/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-004-ref.html b/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-004-ref.html index a1f4e9d666e..f77dd318db7 100644 --- a/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-004-ref.html +++ b/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-004-ref.html @@ -64,9 +64,6 @@ <div class="items">Eight</div> </div> -<div id="row1" class="row-gap" style="top: 52px; left: 2px;"></div> -<div id="row2" class="row-gap" style="top: 112px; left: 2px;"></div> - <div id="columns1" style="left: 52px;" class="column-gap"> <div id="c1" class="column"></div> <div id="c2" class="column"></div> @@ -78,3 +75,6 @@ </div> <div id="column3" style="left: 102px; position:absolute; top: 57px; height:60px;" class="column"></div> + +<div id="row1" class="row-gap" style="top: 52px; left: 2px;"></div> +<div id="row2" class="row-gap" style="top: 112px; left: 2px;"></div> diff --git a/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-005-ref.html b/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-005-ref.html index 020fdb1c8db..04b3e8d1af4 100644 --- a/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-005-ref.html +++ b/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-005-ref.html @@ -64,9 +64,6 @@ <div class="items">Eight</div> </div> -<div class="row-gap" style="top: 52px"></div> -<div class="row-gap" style="top: 112px"></div> - <div id="columns1" style="left: 52px;" class="column-gap"> <div id="c1" class="column"></div> <div id="c2" class="column"></div> @@ -78,3 +75,6 @@ </div> <div id="column3" style="left: 102px; position:absolute; top: 57px; height:60px;" class="column"></div> + +<div class="row-gap" style="top: 52px"></div> +<div class="row-gap" style="top: 112px"></div> diff --git a/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-006-ref.html b/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-006-ref.html index 701d36f93bb..46c4fd49e39 100644 --- a/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-006-ref.html +++ b/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-006-ref.html @@ -59,7 +59,7 @@ <div class="items">Six</div> </div> -<div id="horizontal1" class="row-gap"></div> - <div id="column1" class="column-gap" style="top:72px;"></div> <div id="column2" class="column-gap" style="top: 152px;"></div> + +<div id="row1" class="row-gap"></div> diff --git a/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-009-ref.html b/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-009-ref.html index 2071e3fce60..0adb9af6994 100644 --- a/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-009-ref.html +++ b/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-009-ref.html @@ -70,18 +70,6 @@ <div class="items">Eight</div> </div> -<div id="row1" class="row-gap" style="top: 52px; left: 2px;"> - <div id="r1" class="row"></div> - <div id="r2" style="width: 40px" class="row"></div> - <div id="r2" style="margin-left: auto" class="row"></div> -</div> - -<div id="row2" class="row-gap" style="top: 112px; left: 2px;"> - <div id="r3" class="row"></div> - <div id="r4" style="width: 40px" class="row"></div> - <div id="r5" style="margin-left: auto" class="row"></div> -</div> - <div id="columns1" style="left: 52px;" class="column-gap"> <div id="c1" class="column"></div> <div id="c2" class="column"></div> @@ -93,3 +81,15 @@ </div> <div id="columns3" style="left: 102px; position:absolute; top: 62px; height:50px;" class="column"></div> + +<div id="row1" class="row-gap" style="top: 52px; left: 2px;"> + <div id="r1" class="row"></div> + <div id="r2" style="width: 40px" class="row"></div> + <div id="r2" style="margin-left: auto" class="row"></div> +</div> + +<div id="row2" class="row-gap" style="top: 112px; left: 2px;"> + <div id="r3" class="row"></div> + <div id="r4" style="width: 40px" class="row"></div> + <div id="r5" style="margin-left: auto" class="row"></div> +</div> diff --git a/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-010-ref.html b/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-010-ref.html index c20df7fcda1..8756c5d038c 100644 --- a/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-010-ref.html +++ b/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-010-ref.html @@ -63,12 +63,6 @@ <div class="items">Eight</div> </div> -<div id="row1" class="row-gap" style="top: 52px; left: 2px;"> -</div> - -<div id="row2" class="row-gap" style="top: 112px; left: 2px;"> -</div> - <div id="columns1" style="left: 52px;" class="column-gap"> <div id="c1" class="column"></div> <div id="c2" class="column"></div> @@ -80,3 +74,9 @@ </div> <div id="columns3" style="left: 102px; position:absolute; top: 62px; height:50px;" class="column"></div> + +<div id="row1" class="row-gap" style="top: 52px; left: 2px;"> +</div> + +<div id="row2" class="row-gap" style="top: 112px; left: 2px;"> +</div> diff --git a/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-011-ref.html b/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-011-ref.html index 61d3e83dc2f..082be2875a4 100644 --- a/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-011-ref.html +++ b/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-011-ref.html @@ -63,9 +63,6 @@ <div class="items">Eight</div> </div> -<div id="row1" class="row-gap" style="top: 56px; left: 2px;"></div> -<div id="row2" class="row-gap" style="top: 116px; left: 2px;"></div> - <div id="columns1" style="left: 56px;" class="column-gap"> <div id="c1" class="column"></div> <div id="c2" class="column"></div> @@ -77,3 +74,6 @@ </div> <div id="columns3" style="left: 106px; position:absolute; top: 60px; height:54px;" class="column"></div> + +<div id="row1" class="row-gap" style="top: 56px; left: 2px;"></div> +<div id="row2" class="row-gap" style="top: 116px; left: 2px;"></div> diff --git a/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-012-ref.html b/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-012-ref.html new file mode 100644 index 00000000000..33be4b76212 --- /dev/null +++ b/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-012-ref.html @@ -0,0 +1,79 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-gaps-1/"> +<link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com"> +<style> + body { + margin: 0px; + } + + #flexbox { + border: 2px solid rgb(96 139 168); + display: flex; + column-gap: 10px; + row-gap: 10px; + width: 170px; + flex-wrap: wrap; + } + + .items { + background-color: rgb(96 139 168 / 0.2); + flex-shrink: 1; + width: 50px; + height: 50px; + } + + #four { + width: 100px; + } + + .row-gap { + margin: 0px; + padding: 0px; + height: 2px; + background: blue; + width: 170px; + position: absolute; + } + + .column-gap { + display: flex; + flex-direction: column; + row-gap: 60px; + height: 174px; + top: 2px; + width: 10px; + position: absolute; + } + + .column { + background: red; + width: 2px; + height: 55px; + } +</style> + +<div id="flexbox"> + <div class="items">One</div> + <div class="items">Two</div> + <div class="items">Three</div> + <div class="items" id="four">Four</div> + <div class="items">Five</div> + <div class="items">Six</div> + <div class="items">Seven</div> + <div class="items">Eight</div> +</div> + +<div id="row1" class="row-gap" style="top: 56px; left: 2px;"></div> +<div id="row2" class="row-gap" style="top: 116px; left: 2px;"></div> + +<div id="columns1" style="left: 56px;" class="column-gap"> + <div id="c1" class="column"></div> + <div id="c2" class="column"></div> +</div> + +<div id="columns2" style="left: 116px;" class="column-gap"> + <div id="c1" class="column"></div> + <div id="c2" class="column"></div> +</div> + +<div id="columns3" style="left: 106px; position:absolute; top: 57px; height:60px;" class="column"></div>
\ No newline at end of file diff --git a/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-012.html b/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-012.html new file mode 100644 index 00000000000..2f1f95c00c8 --- /dev/null +++ b/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-012.html @@ -0,0 +1,50 @@ +<!DOCTYPE html> +<title> + CSS Gap Decorations: flex column and are painted with column over rows. +</title> +<link rel="help" href="https://drafts.csswg.org/css-gaps-1/"> +<link rel="match" href="flex-gap-decorations-012-ref.html"> +<link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com"> +<style> + body { + margin: 0px; + } + + #flexbox { + border: 2px solid rgb(96 139 168); + display: flex; + column-gap: 10px; + row-gap: 10px; + row-rule-style: solid; + row-rule-color: blue; + row-rule-width: 2px; + column-rule-style: solid; + column-rule-color: red; + column-rule-width: 2px; + gap-rule-paint-order: column-over-row; + width: 170px; + flex-wrap: wrap; + } + + .items { + background-color: rgb(96 139 168 / 0.2); + flex-shrink: 1; + width: 50px; + height: 50px; + } + + #four { + width: 100px; + } +</style> + +<div id="flexbox"> + <div class="items">One</div> + <div class="items">Two</div> + <div class="items">Three</div> + <div class="items" id="four">Four</div> + <div class="items">Five</div> + <div class="items">Six</div> + <div class="items">Seven</div> + <div class="items">Eight</div> +</div>
\ No newline at end of file diff --git a/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-014-ref.html b/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-014-ref.html index ab28707785e..59ce37deaec 100644 --- a/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-014-ref.html +++ b/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-014-ref.html @@ -63,9 +63,6 @@ <div class="items">Eight</div> </div> -<div id="row1" class="row-gap" style="top: 56px; left: 2px;"></div> -<div id="row2" class="row-gap" style="top: 116px; left: 2px;"></div> - <div id="columns1" style="left: 56px;" class="column-gap"> <div id="c1" class="column"></div> <div id="c2" class="column"></div> @@ -77,3 +74,6 @@ </div> <div id="columns3" style="left: 106px; position:absolute; top: 52px; height:70px;" class="column"></div> + +<div id="row1" class="row-gap" style="top: 56px; left: 2px;"></div> +<div id="row2" class="row-gap" style="top: 116px; left: 2px;"></div> diff --git a/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-015-ref.html b/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-015-ref.html new file mode 100644 index 00000000000..48745eff931 --- /dev/null +++ b/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-015-ref.html @@ -0,0 +1,74 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-gaps-1/"> +<link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com"> +<style> + body { + margin: 0px; + } + + #flexbox { + border: 2px solid rgb(96 139 168); + display: flex; + column-gap: 20px; + row-gap: 10px; + width: 120px; + height: 170px; + flex-wrap: wrap; + flex-direction: column; + } + + .items { + background-color: rgb(96 139 168 / 0.2); + flex-shrink: 1; + width: 50px; + height: 50px; + } + + .row-1 { + display: flex; + position: absolute; + left: 2px; + top: 52px; + column-gap: 20px; + } + + .row-2 { + display: flex; + position: absolute; + left: 2px; + top: 112px; + column-gap: 20px; + } + + .row-gap { + height: 10px; + width: 50px; + background: blue; + } +</style> + +<div id="flexbox"> + <div class="items">One</div> + <div class="items">Two</div> + <div class="items">Three</div> + <div class="items">Four</div> + <div class="items">Five</div> + <div class="items">Six</div> +</div> + +<div class="column-gap" style="top: 2px; height: 170px; position: absolute; width: 20px; left: 52px; background: red;"> +</div> + +<div class="row-1"> + <div class="row-gap"> + </div> + <div class="row-gap"> + </div> +</div> + +<div class="row-2"> + <div class="row-gap"> + </div> + <div class="row-gap"> + </div> +</div> diff --git a/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-015.html b/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-015.html index 6cba13ba216..8d100978205 100644 --- a/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-015.html +++ b/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-015.html @@ -1,9 +1,9 @@ <!DOCTYPE html> <title> - CSS Gap Decorations: flex column and row gaps are painted column flex direction + CSS Gap Decorations: flex column and row gaps are painted column flex direction. </title> <link rel="help" href="https://drafts.csswg.org/css-gaps-1/"> -<link rel="match" href="flex-gap-decorations-014-ref.html"> +<link rel="match" href="flex-gap-decorations-015-ref.html"> <link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com"> <style> body { @@ -25,6 +25,7 @@ row-rule-style: solid; row-rule-color: blue; row-rule-width: 10px; + gap-rule-paint-order: column-over-row; } .items { diff --git a/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-016-ref.html b/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-016-ref.html new file mode 100644 index 00000000000..155e0bfac7b --- /dev/null +++ b/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-016-ref.html @@ -0,0 +1,74 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-gaps-1/"> +<link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com"> +<style> + body { + margin: 0px; + } + + #flexbox { + border: 2px solid rgb(96 139 168); + display: flex; + column-gap: 20px; + row-gap: 10px; + width: 120px; + height: 170px; + flex-wrap: wrap; + flex-direction: column-reverse; + } + + .items { + background-color: rgb(96 139 168 / 0.2); + flex-shrink: 1; + width: 50px; + height: 50px; + } + + .row-1 { + display: flex; + position: absolute; + left: 2px; + top: 52px; + column-gap: 20px; + } + + .row-2 { + display: flex; + position: absolute; + left: 2px; + top: 112px; + column-gap: 20px; + } + + .row-gap { + height: 10px; + width: 50px; + background: blue; + } +</style> + +<div id="flexbox"> + <div class="items">One</div> + <div class="items">Two</div> + <div class="items">Three</div> + <div class="items">Four</div> + <div class="items">Five</div> + <div class="items">Six</div> +</div> + +<div class="column-gap" style="top: 2px; height: 170px; position: absolute; width: 20px; left: 52px; background: red;"> +</div> + +<div class="row-1"> + <div class="row-gap"> + </div> + <div class="row-gap"> + </div> +</div> + +<div class="row-2"> + <div class="row-gap"> + </div> + <div class="row-gap"> + </div> +</div> diff --git a/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-016.html b/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-016.html new file mode 100644 index 00000000000..9f956369d48 --- /dev/null +++ b/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-016.html @@ -0,0 +1,47 @@ +<!DOCTYPE html> +<title> + CSS Gap Decorations: flex column and row gaps are painted in the column-reverse flex direction. +</title> +<link rel="help" href="https://drafts.csswg.org/css-gaps-1/"> +<link rel="match" href="flex-gap-decorations-016-ref.html"> +<link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com"> +<style> + body { + margin: 0px; + } + + #flexbox { + border: 2px solid rgb(96 139 168); + display: flex; + column-gap: 20px; + row-gap: 10px; + width: 120px; + height: 170px; + flex-wrap: wrap; + flex-direction: column-reverse; + column-rule-style: solid; + column-rule-color: red; + column-rule-width: 20px; + row-rule-style: solid; + row-rule-color: blue; + row-rule-width: 10px; + gap-rule-paint-order: column-over-row; + } + + .items { + background-color: rgb(96 139 168 / 0.2); + flex-shrink: 1; + width: 50px; + height: 50px; + } + +</style> + +<div id="flexbox"> + <div class="items">One</div> + <div class="items">Two</div> + <div class="items">Three</div> + <div class="items">Four</div> + <div class="items">Five</div> + <div class="items">Six</div> +</div> diff --git a/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-019.html b/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-019.html new file mode 100644 index 00000000000..93618f71e8f --- /dev/null +++ b/tests/wpt/tests/css/css-gaps/tentative/flex/flex-gap-decorations-019.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<title> + CSS Gap Decorations: Painting flex gaps with bi-directional `rule-color` shorthand. +</title> +<link rel="help" href="https://drafts.csswg.org/css-gaps-1/"> +<link rel="match" href="../../../reference/ref-filled-green-100px-square.xht"> +<link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com"> +<style> + .flex-container { + display: flex; + gap: 10px; + height: 100px; + width: 100px; + background: red; + rule-color: green; + rule-width: 10px; + column-rule-style: solid; + row-rule-style: solid; + + flex-wrap: wrap; + } + + .flex-item { + background: green; + width: 45px; + } +</style> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div class="flex-container"> + <div class="flex-item"></div> + <div class="flex-item"></div> + <div class="flex-item"></div> + <div class="flex-item"></div> +</div> diff --git a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-002.html b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-002.html index dfc4198b078..7e7e0e4d325 100644 --- a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-002.html +++ b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-002.html @@ -6,6 +6,10 @@ <link rel="match" href="../agnostic/gap-decorations-001-ref.html"> <link rel="author" title="Sam Davis Omekara Jr." href="mailto:samomekarajr@microsoft.com"> <style> + body { + margin: 0px; + } + .grid-container { height: 110px; width: 110px; diff --git a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-006-ref.html b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-006-ref.html index f77ec2a9d43..94d455c1d86 100644 --- a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-006-ref.html +++ b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-006-ref.html @@ -85,10 +85,10 @@ <div class="grid-item" style="grid-column: 4 / 5; grid-row: 4 / 5;"></div> </div> -<div class="row-gap row-gap1"> </div> -<div class="row-gap row-gap2"> </div> -<div class="row-gap row-gap3"> </div> - <div class="col-gap col-gap1"> </div> <div class="col-gap col-gap2"> </div> <div class="col-gap col-gap3"> </div> + +<div class="row-gap row-gap1"> </div> +<div class="row-gap row-gap2"> </div> +<div class="row-gap row-gap3"> </div>
\ No newline at end of file diff --git a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-007-ref.html b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-007-ref.html index 9d74fa00f41..5d89f414ed5 100644 --- a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-007-ref.html +++ b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-007-ref.html @@ -159,20 +159,6 @@ <div class="grid-item" style="grid-column: 4 / 5; grid-row: 4 / 5;"></div> </div> -<div class="row-gap1"> - <div class="row-gap1a"></div> - <div class="row-gap1b"></div> -</div> -<div class="row-gap2"> - <div class="row-gap2a"></div> - <div class="row-gap2b"></div> -</div> -<div class="row-gap3"> - <div class="row-gap3a"></div> - <div class="row-gap3b"></div> - <div class="row-gap3c"></div> -</div> - <div class="col-gap1"> <div class="col-gap1a"></div> <div class="col-gap1b"></div> @@ -186,3 +172,17 @@ <div class="col-gap3b"></div> <div class="col-gap3c"></div> </div> + +<div class="row-gap1"> + <div class="row-gap1a"></div> + <div class="row-gap1b"></div> +</div> +<div class="row-gap2"> + <div class="row-gap2a"></div> + <div class="row-gap2b"></div> +</div> +<div class="row-gap3"> + <div class="row-gap3a"></div> + <div class="row-gap3b"></div> + <div class="row-gap3c"></div> +</div>
\ No newline at end of file diff --git a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-008-ref.html b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-008-ref.html index 200a2621a21..3e2562cfccb 100644 --- a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-008-ref.html +++ b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-008-ref.html @@ -93,10 +93,10 @@ <div class="grid-item" style="grid-column: 4 / 5; grid-row: 4 / 5;"></div> </div> -<div class="row-gap1"></div> -<div class="row-gap2"></div> -<div class="row-gap3"></div> - <div class="col-gap1"></div> <div class="col-gap2"></div> <div class="col-gap3"></div> + +<div class="row-gap1"></div> +<div class="row-gap2"></div> +<div class="row-gap3"></div>
\ No newline at end of file diff --git a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-009-ref.html b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-009-ref.html index 11d8267235b..964f2111eb8 100644 --- a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-009-ref.html +++ b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-009-ref.html @@ -64,8 +64,9 @@ <div class="item"></div> </div> -<div class="row-gap1"></div> -<div class="row-gap2"></div> - <div class="col-gap1"></div> <div class="col-gap2"></div> +<div class="col-gap3"></div> + +<div class="row-gap1"></div> +<div class="row-gap2"></div> diff --git a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-010-ref.html b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-010-ref.html index 747391cfedc..0c07124b086 100644 --- a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-010-ref.html +++ b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-010-ref.html @@ -79,9 +79,6 @@ </div> </body> -<div class="row-gap row-gap1"> </div> -<div class="row-gap row-gap2"> </div> - <div class="col-gap1"> <div class="col-gap1a"></div> <div class="col-gap1b"></div> @@ -92,3 +89,6 @@ <div class="col-gap2b"></div> <div class="col-gap2c"></div> </div> + +<div class="row-gap row-gap1"> </div> +<div class="row-gap row-gap2"> </div> diff --git a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-011-ref.html b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-011-ref.html index c49eb95f72e..c8824a5296e 100644 --- a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-011-ref.html +++ b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-011-ref.html @@ -61,8 +61,8 @@ <div class="item"></div> </div> -<div class="row-gap row-gap1"> </div> -<div class="row-gap row-gap2"> </div> - <div class="col-gap col-gap1"> </div> <div class="col-gap col-gap2"> </div> + +<div class="row-gap row-gap1"> </div> +<div class="row-gap row-gap2"> </div>
\ No newline at end of file diff --git a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-012-ref.html b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-012-ref.html index ded98fa1c8d..51ca67dd6a2 100644 --- a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-012-ref.html +++ b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-012-ref.html @@ -64,8 +64,8 @@ </div> </body> -<div class="row-gap row-gap1"> </div> -<div class="row-gap row-gap2"> </div> - <div class="col-gap col-gap1"> </div> <div class="col-gap col-gap2"> </div> + +<div class="row-gap row-gap1"> </div> +<div class="row-gap row-gap2"> </div>
\ No newline at end of file diff --git a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-013-ref.html b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-013-ref.html index bd8456f525e..7ebf7c00b18 100644 --- a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-013-ref.html +++ b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-013-ref.html @@ -79,9 +79,6 @@ </div> </body> -<div class="row-gap row-gap1"> </div> -<div class="row-gap row-gap2"> </div> - <div class="col-gap1"> <div class="col-gap1a"></div> <div class="col-gap1b"></div> @@ -92,3 +89,6 @@ <div class="col-gap2b"></div> <div class="col-gap2c"></div> </div> + +<div class="row-gap row-gap1"> </div> +<div class="row-gap row-gap2"> </div>
\ No newline at end of file diff --git a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-014-ref.html b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-014-ref.html index 25a930a51af..7631d5287a8 100644 --- a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-014-ref.html +++ b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-014-ref.html @@ -61,8 +61,8 @@ <div class="item"></div> </div> -<div class="row-gap row-gap1"> </div> -<div class="row-gap row-gap2"> </div> - <div class="col-gap col-gap1"> </div> <div class="col-gap col-gap2"> </div> + +<div class="row-gap row-gap1"> </div> +<div class="row-gap row-gap2"> </div>
\ No newline at end of file diff --git a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-015-ref.html b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-015-ref.html index 0937a62da6f..f95324d3320 100644 --- a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-015-ref.html +++ b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-015-ref.html @@ -86,10 +86,10 @@ <div class="grid-item" style="grid-column: 4 / 5; grid-row: 4 / 5;"></div> </div> -<div class="row-gap row-gap1"> </div> -<div class="row-gap row-gap2"> </div> -<div class="row-gap row-gap3"> </div> - <div class="col-gap col-gap1"> </div> <div class="col-gap col-gap2"> </div> <div class="col-gap col-gap3"> </div> + +<div class="row-gap row-gap1"> </div> +<div class="row-gap row-gap2"> </div> +<div class="row-gap row-gap3"> </div>
\ No newline at end of file diff --git a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-016-ref.html b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-016-ref.html index 1d368aba9d4..c11380a68aa 100644 --- a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-016-ref.html +++ b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-016-ref.html @@ -100,12 +100,12 @@ <div class="item"></div> </div> -<div class="row-gap row-gap1"> </div> -<div class="row-gap row-gap2"> </div> -<div class="row-gap row-gap3"> </div> -<div class="row-gap row-gap4"> </div> - <div class="col-gap col-gap1"> </div> <div class="col-gap col-gap2"> </div> <div class="col-gap col-gap3"> </div> <div class="col-gap col-gap4"> </div> + +<div class="row-gap row-gap1"> </div> +<div class="row-gap row-gap2"> </div> +<div class="row-gap row-gap3"> </div> +<div class="row-gap row-gap4"> </div> diff --git a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-017-ref.html b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-017-ref.html index 2aa226eb092..ac0bbd1f1e1 100644 --- a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-017-ref.html +++ b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-017-ref.html @@ -122,14 +122,14 @@ <div class="item"></div> </div> -<div class="row-gap row-gap1"> </div> -<div class="row-gap row-gap2"> </div> -<div class="row-gap row-gap3"> </div> -<div class="row-gap row-gap4"> </div> -<div class="row-gap row-gap5"> </div> - <div class="col-gap col-gap1"> </div> <div class="col-gap col-gap2"> </div> <div class="col-gap col-gap3"> </div> <div class="col-gap col-gap4"> </div> <div class="col-gap col-gap5"> </div> + +<div class="row-gap row-gap1"> </div> +<div class="row-gap row-gap2"> </div> +<div class="row-gap row-gap3"> </div> +<div class="row-gap row-gap4"> </div> +<div class="row-gap row-gap5"> </div> diff --git a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-018-ref.html b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-018-ref.html index 6fcc175e68d..072dc508ea3 100644 --- a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-018-ref.html +++ b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-018-ref.html @@ -121,14 +121,14 @@ <div class="item"></div> </div> -<div class="row-gap row-gap1"> </div> -<div class="row-gap row-gap2"> </div> -<div class="row-gap row-gap3"> </div> -<div class="row-gap row-gap4"> </div> -<div class="row-gap row-gap5"> </div> - <div class="col-gap col-gap1"> </div> <div class="col-gap col-gap2"> </div> <div class="col-gap col-gap3"> </div> <div class="col-gap col-gap4"> </div> <div class="col-gap col-gap5"> </div> + +<div class="row-gap row-gap1"> </div> +<div class="row-gap row-gap2"> </div> +<div class="row-gap row-gap3"> </div> +<div class="row-gap row-gap4"> </div> +<div class="row-gap row-gap5"> </div> diff --git a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-019-ref.html b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-019-ref.html index 0705ba075ab..e9f8a87979d 100644 --- a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-019-ref.html +++ b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-019-ref.html @@ -122,16 +122,14 @@ <div class="item"></div> </div> +<div class="col-gap col-gap1"> </div> +<div class="col-gap col-gap2"> </div> +<div class="col-gap col-gap3"> </div> +<div class="col-gap col-gap4"> </div> +<div class="col-gap col-gap5"> </div> <div class="row-gap row-gap1"> </div> <div class="row-gap row-gap2"> </div> <div class="row-gap row-gap3"> </div> <div class="row-gap row-gap4"> </div> <div class="row-gap row-gap5"> </div> - - -<div class="col-gap col-gap1"> </div> -<div class="col-gap col-gap2"> </div> -<div class="col-gap col-gap3"> </div> -<div class="col-gap col-gap4"> </div> -<div class="col-gap col-gap5"> </div> diff --git a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-022.html b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-022.html new file mode 100644 index 00000000000..730114aa763 --- /dev/null +++ b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-022.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<title> + CSS Gap Decorations: Painting grid gaps with bi-directional `rule-color` shorthand. +</title> +<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#propdef-rule-color"> +<link rel="match" href="../../../reference/ref-filled-green-100px-square.xht"> +<link rel="author" title="Sam Davis Omekara Jr." href="mailto:samomekarajr@microsoft.com"> +<style> + .grid-container { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + height: 100px; + width: 100px; + background: red; + rule-color: green; + rule-width: 10px; + column-rule-style: solid; + row-rule-style: solid; + } + + .grid-item { + background: green; + } +</style> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div class="grid-container"> + <div class="grid-item"></div> + <div class="grid-item"></div> + <div class="grid-item"></div> + <div class="grid-item"></div> + <div class="grid-item"></div> + <div class="grid-item"></div> +</div> diff --git a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-023-ref.html b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-023-ref.html new file mode 100644 index 00000000000..e630694c6a5 --- /dev/null +++ b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-023-ref.html @@ -0,0 +1,88 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#break"> +<link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com"> +<style> + body { + margin: 0px; + } + .grid-container { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + width: 430px; + height: 430px; + } + .grid-container>div { + z-index: 2 + } + .grid-item { + background-color: gray; + opacity: 0.5; + border: 1px solid #000; + } + .row-gap1 { + position: absolute; + height: 0px; + top: 102.5px; + left: 0px; + width: 430px; + border-bottom: solid 5px red; + } + .row-gap2 { + position: absolute; + height: 0px; + top: 212.5px; + left: 0px; + width: 430px; + border-bottom: solid 5px red; + } + .row-gap3 { + position: absolute; + height: 0px; + display: flex; + top: 322.5px; + left: 0px; + border-bottom: solid 5px red; + width: 430px; + } + .col-gap1 { + position: absolute; + width: 0; + height: 430px; + border-left: solid 5px blue; + top: 0px; + left: 102.5px; + } + .col-gap2 { + position: absolute; + width: 0; + height: 430px; + top: 0px; + left: 212.5px; + border-left: solid 5px blue; + } + .col-gap3 { + position: absolute; + width: 0; + height: 430px; + top: 0px; + left: 322.5px; + border-left: solid 5px blue; + } +</style> +<div class="grid-container"> + <div class="grid-item" style="grid-column: 1 / 3; grid-row: 1 / 2;"></div> + <div class="grid-item" style="grid-column: 3 / 4; grid-row: 1 / 3;"></div> + <div class="grid-item" style="grid-row: 2 / 4;"></div> + <div class="grid-item" style="grid-column: 2 / 4; grid-row: 3 / 4;"></div> + <div class="grid-item" style="grid-column: 2 / 3; grid-row: 2 / 3;"></div> + <div class="grid-item" style="grid-column: 4 / 5; grid-row: 1 / 4;"></div> + <div class="grid-item" style="grid-column: 1 / 4; grid-row: 4 / 5;"></div> + <div class="grid-item" style="grid-column: 4 / 5; grid-row: 4 / 5;"></div> +</div> +<div class="row-gap1"></div> +<div class="row-gap2"></div> +<div class="row-gap3"></div> +<div class="col-gap1"></div> +<div class="col-gap2"></div> +<div class="col-gap3"></div> diff --git a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-023.html b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-023.html new file mode 100644 index 00000000000..706f66ebcfa --- /dev/null +++ b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-023.html @@ -0,0 +1,45 @@ + +<!DOCTYPE html> +<title> + CSS Gap Decorations: Painting column over rows. +</title> +<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#break"> +<link rel="match" href="grid-gap-decorations-023-ref.html"> +<link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com"> + +<style> + body { + margin: 0px; + } + .grid-container { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + width: 430px; + height: 430px; + column-rule-color: blue; + column-rule-style: solid; + column-rule-width: 5px; + row-rule-color: red; + row-rule-style: solid; + row-rule-width: 5px; + column-rule-break: none; + row-rule-break: none; + gap-rule-paint-order: column-over-row; + } + .grid-item { + background-color: gray; + opacity: 0.5; + border: 1px solid #000; + } +</style> +<div class="grid-container"> + <div class="grid-item" style="grid-column: 1 / 3; grid-row: 1 / 2;"></div> + <div class="grid-item" style="grid-column: 3 / 4; grid-row: 1 / 3;"></div> + <div class="grid-item" style="grid-row: 2 / 4;"></div> + <div class="grid-item" style="grid-column: 2 / 4; grid-row: 3 / 4;"></div> + <div class="grid-item" style="grid-column: 2 / 3; grid-row: 2 / 3;"></div> + <div class="grid-item" style="grid-column: 4 / 5; grid-row: 1 / 4;"></div> + <div class="grid-item" style="grid-column: 1 / 4; grid-row: 4 / 5;"></div> + <div class="grid-item" style="grid-column: 4 / 5; grid-row: 4 / 5;"></div> +</div> diff --git a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-024-ref.html b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-024-ref.html new file mode 100644 index 00000000000..94b1eccd747 --- /dev/null +++ b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-024-ref.html @@ -0,0 +1,67 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#outset"> +<link rel="author" title="Sam Davis Omekara Jr." href="mailto:samomekarajr@microsoft.com"> +<style> + body { + margin: 0px; + } + + .grid-container { + display: grid; + grid-gap: 10px; + grid-template-columns: 100px 100px 100px; + height: 320px; + } + + .item { + background: gray; + opacity: 0.5; + } + + .row-gap { + position: absolute; + width: 320px; + height: 0px; + border-bottom: solid 5px red; + } + + .row-gap1 { + top: 102.5px; + } + + .row-gap2 { + top: 212.5px; + } + + .col-gap { + position: absolute; + top: 0px; + width: 0px; + height: 320px; + border-left: solid 5px yellow; + } + + .col-gap1 { + left: 102.5px; + } + + .col-gap2 { + left: 212.5px; + } +</style> +<div class="grid-container"> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> +</div> +<div class="col-gap col-gap1"> </div> +<div class="col-gap col-gap2"> </div> + +<div class="row-gap row-gap1"> </div> +<div class="row-gap row-gap2"> </div> diff --git a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-024.html b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-024.html new file mode 100644 index 00000000000..104df87c7e2 --- /dev/null +++ b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-024.html @@ -0,0 +1,47 @@ +<!DOCTYPE html> +<title> + CSS Gap Decorations: Grid column gaps are painted with :visited styles when a single color is used. +</title> +<link rel="help" href="https://drafts.csswg.org/css-gaps-1/"> +<link rel="match" href="grid-gap-decorations-024-ref.html"> +<link rel="author" title="Sam Davis Omekara Jr." href="mailto:samomekarajr@microsoft.com"> +<style> + body { + margin: 0px; + } + .grid-container { + display: grid; + grid-gap: 10px; + grid-template-columns: 100px 100px 100px; + height: 320px; + + column-rule-color: blue; + column-rule-style: solid; + column-rule-width: 5px; + + row-rule-color: red; + row-rule-style: solid; + row-rule-width: 5px; + + } + .item { + background: gray; + opacity: 0.5; + } + .grid-link:visited .grid-container { + column-rule-color: yellow; + } +</style> +<a href="" class="grid-link"> + <div class="grid-container"> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + </div> +</a> diff --git a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-025-ref.html b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-025-ref.html new file mode 100644 index 00000000000..3834da46a5d --- /dev/null +++ b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-025-ref.html @@ -0,0 +1,63 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#outset"> +<link rel="author" title="Sam Davis Omekara Jr." href="mailto:samomekarajr@microsoft.com"> +<style> + body { + margin: 0px; + } + .grid-container { + display: grid; + grid-gap: 10px; + grid-template-columns: 100px 100px 100px; + height: 320px; + } + .item { + background: gray; + opacity: 0.5; + } + .row-gap { + position: absolute; + width: 320px; + height: 0px; + border-bottom: solid 5px red; + } + .row-gap1 { + top: 102.5px; + } + .row-gap2 { + top: 212.5px; + } + .col-gap { + position: absolute; + top: 0px; + width: 0px; + height: 320px; + border-left: solid 5px; + } + .gap-link:visited .col-gap { + border-color: currentcolor; + } + .col-gap1 { + left: 102.5px; + } + .col-gap2 { + left: 212.5px; + } +</style> +<div class="grid-container"> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> +</div> +<a class="gap-link" href=""> + <div class="col-gap col-gap1"> </div> + <div class="col-gap col-gap2"> </div> +</a> +<div class="row-gap row-gap1"> </div> +<div class="row-gap row-gap2"> </div> diff --git a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-025.html b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-025.html new file mode 100644 index 00000000000..fc48f15f5c2 --- /dev/null +++ b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-025.html @@ -0,0 +1,47 @@ +<!DOCTYPE html> +<title> + CSS Gap Decorations: Grid column gaps are painted with default :visited styles when multiple colors are used. +</title> +<link rel="help" href="https://drafts.csswg.org/css-gaps-1/"> +<link rel="match" href="grid-gap-decorations-025-ref.html"> +<link rel="author" title="Sam Davis Omekara Jr." href="mailto:samomekarajr@microsoft.com"> +<style> + body { + margin: 0px; + } + .grid-container { + display: grid; + grid-gap: 10px; + grid-template-columns: 100px 100px 100px; + height: 320px; + + column-rule-color: blue; + column-rule-style: solid; + column-rule-width: 5px; + + row-rule-color: red; + row-rule-style: solid; + row-rule-width: 5px; + + } + .item { + background: gray; + opacity: 0.5; + } + .grid-link:visited .grid-container { + column-rule-color: red lime blue; + } +</style> +<a href="" class="grid-link"> + <div class="grid-container"> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + </div> +</a> diff --git a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-026-ref.html b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-026-ref.html new file mode 100644 index 00000000000..d57c622810d --- /dev/null +++ b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-026-ref.html @@ -0,0 +1,59 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#outset"> +<link rel="author" title="Sam Davis Omekara Jr." href="mailto:samomekarajr@microsoft.com"> +<style> + body { + margin: 0px; + } + .grid-container { + display: grid; + grid-gap: 10px; + grid-template-columns: 100px 100px 100px; + height: 320px; + } + .item { + background: gray; + opacity: 0.5; + } + .row-gap { + position: absolute; + width: 320px; + height: 0px; + border-bottom: solid 5px green; + } + .row-gap1 { + top: 102.5px; + } + .row-gap2 { + top: 212.5px; + } + .col-gap { + position: absolute; + top: 0px; + width: 0px; + height: 320px; + border-left: solid 5px green; + + } + .col-gap1 { + left: 102.5px; + } + .col-gap2 { + left: 212.5px; + } +</style> +<div class="grid-container"> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> +</div> +<div class="row-gap row-gap1"> </div> +<div class="row-gap row-gap2"> </div> +<div class="col-gap col-gap1"> </div> +<div class="col-gap col-gap2"> </div> diff --git a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-026.html b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-026.html new file mode 100644 index 00000000000..17e0a99dd84 --- /dev/null +++ b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-026.html @@ -0,0 +1,43 @@ +<!DOCTYPE html> +<title> + CSS Gap Decorations: Grid gaps are painted properly when currentColor is used. +</title> +<link rel="help" href="https://drafts.csswg.org/css-gaps-1/"> +<link rel="match" href="grid-gap-decorations-026-ref.html"> +<link rel="author" title="Sam Davis Omekara Jr." href="mailto:samomekarajr@microsoft.com"> +<style> + body { + margin: 0px; + color: green; + } + .grid-container { + display: grid; + grid-gap: 10px; + grid-template-columns: 100px 100px 100px; + height: 320px; + + column-rule-color: currentColor; + column-rule-style: solid; + column-rule-width: 5px; + + row-rule-color: currentColor; + row-rule-style: solid; + row-rule-width: 5px; + + } + .item { + background: gray; + opacity: 0.5; + } +</style> +<div class="grid-container"> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> +</div> diff --git a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-027-ref.html b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-027-ref.html new file mode 100644 index 00000000000..7e0d9cbcd6f --- /dev/null +++ b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-027-ref.html @@ -0,0 +1,64 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#outset"> +<link rel="author" title="Sam Davis Omekara Jr." href="mailto:samomekarajr@microsoft.com"> +<style> + body { + margin: 0px; + } + .grid-container { + display: grid; + grid-gap: 10px; + grid-template-columns: 100px 100px 100px; + height: 320px; + } + .item { + background: gray; + opacity: 0.5; + } + .row-gap { + position: absolute; + width: 320px; + height: 0px; + border-bottom: solid 5px green; + } + .row-gap1 { + top: 102.5px; + } + .row-gap2 { + top: 212.5px; + } + .col-gap { + position: absolute; + top: 0px; + width: 0px; + height: 320px; + border-left: solid 5px; + + } + .gap-link:visited .col-gap { + border-left-color: currentColor; + } + .col-gap1 { + left: 102.5px; + } + .col-gap2 { + left: 212.5px; + } +</style> +<div class="grid-container"> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> +</div> +<a href="" class="gap-link"> + <div class="col-gap col-gap1"> </div> + <div class="col-gap col-gap2"> </div> +</a> +<div class="row-gap row-gap1"> </div> +<div class="row-gap row-gap2"> </div> diff --git a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-027.html b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-027.html new file mode 100644 index 00000000000..e39305f74b8 --- /dev/null +++ b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-027.html @@ -0,0 +1,46 @@ +<!DOCTYPE html> +<title> + CSS Gap Decorations: Grid gaps are painted properly when currentColor is used in :visited styles. +</title> +<link rel="help" href="https://drafts.csswg.org/css-gaps-1/"> +<link rel="match" href="grid-gap-decorations-027-ref.html"> +<link rel="author" title="Sam Davis Omekara Jr." href="mailto:samomekarajr@microsoft.com"> +<style> + body { + margin: 0px; + } + .grid-container { + display: grid; + grid-gap: 10px; + grid-template-columns: 100px 100px 100px; + height: 320px; + + column-rule-color: blue; + column-rule-style: solid; + column-rule-width: 5px; + + row-rule-color: green; + row-rule-style: solid; + row-rule-width: 5px; + } + .item { + background: gray; + opacity: 0.5; + } + .grid-link:visited .grid-container { + column-rule-color: currentColor; + } +</style> +<a href="" class="grid-link"> + <div class="grid-container"> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + <div class="item"></div> + </div> +</a> diff --git a/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-028.html b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-028.html new file mode 100644 index 00000000000..125a34ca966 --- /dev/null +++ b/tests/wpt/tests/css/css-gaps/tentative/grid/grid-gap-decorations-028.html @@ -0,0 +1,41 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Gap Decoration: :visited column-rule-color style is not leaked via getComputedStyle</title> +<link rel="help" href="https://tabatkins.github.io/specs/css-masonry/"> +<link rel="author" title="Sam Davis Omekara Jr." href="mailto:samomekarajr@microsoft.com"> +<script src="/resources/testharness.js" type="text/javascript"></script> +<script src="/resources/testharnessreport.js" type="text/javascript"></script> +</head> +<body> +<a class="grid-link"> + <div id="target1"></div> +</a> +<style> + #target1 { + display: grid; + column-rule-color: lime; + } + + grid:link:visited #target1 { + column-rule-color: blue; + } +</style> +<script> + test(function() { + const gridContainerStyle = window.getComputedStyle(document.querySelector('#target1')); + const columnRuleColor = gridContainerStyle.getPropertyValue('column-rule-color'); + assert_equals(columnRuleColor, 'rgb(0, 255, 0)'); + + }, "`column-rule-color` should be rgb(0, 255, 0)"); + + test(function() { + const gridContainerStyle = window.getComputedStyle(document.querySelector('#target1')); + const columnRuleColor = gridContainerStyle.getPropertyValue('column-rule-color', ':visited'); + assert_not_equals(columnRuleColor, 'rgb(0, 0, 255)'); + + }, "Visited `column-rule-color` should not be blue but it is"); +</script> +</body> +</html> diff --git a/tests/wpt/tests/css/css-gaps/tentative/parsing/gap-decorations-bidirectional-shorthands.html b/tests/wpt/tests/css/css-gaps/tentative/parsing/gap-decorations-bidirectional-shorthands.html new file mode 100644 index 00000000000..95b5bf6aea8 --- /dev/null +++ b/tests/wpt/tests/css/css-gaps/tentative/parsing/gap-decorations-bidirectional-shorthands.html @@ -0,0 +1,54 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Gap Decoration: shorthand rule-* computed style values from longhands</title> +<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#rule-bi-directional"> +<link rel="author" title="Sam Davis Omekara Jr." href="mailto:samomekarajr@microsoft.com"> +<script src="/resources/testharness.js" type="text/javascript"></script> +<script src="/resources/testharnessreport.js" type="text/javascript"></script> +</head> +<body> +<div id="target1"></div> +<div id="target2"></div> +<style> + #target1 { + column-rule-color: lime; + row-rule-color: lime; + + column-rule-width: 10px; + row-rule-width: 10px; + + /* Adding `column-rule-style` property because + `column-rule-width` defaults to 0px without it */ + column-rule-style: solid; + } + + #target2 { + column-rule-color: blue; + row-rule-color: red; + + column-rule-width: 15px; + row-rule-width: 20px; + } +</style> +<script> + test(function() { + assert_equals(window.getComputedStyle(document.getElementById('target1')).getPropertyValue('rule-color'), 'rgb(0, 255, 0)'); + + }, "rule-color shorthand computed from longhand values"); + test(function() { + assert_equals(window.getComputedStyle(document.getElementById('target1')).getPropertyValue('rule-width'), '10px'); + + }, "rule-width shorthand computed from longhand values"); + + test(function() { + assert_equals(window.getComputedStyle(document.getElementById('target2')).getPropertyValue('rule-color'), ''); + }, "rule-color shorthand cannot be computed from longhand values so expect an empty string"); + + test(function() { + assert_equals(window.getComputedStyle(document.getElementById('target2')).getPropertyValue('rule-width'), ''); + }, "rule-width shorthand cannot be computed from longhand values so expect an empty string"); +</script> +</body> +</html> diff --git a/tests/wpt/tests/css/css-gaps/tentative/parsing/gap-decorations-color-computed.html b/tests/wpt/tests/css/css-gaps/tentative/parsing/gap-decorations-color-computed.html index 3ef68de7392..fbc3c3f4c97 100644 --- a/tests/wpt/tests/css/css-gaps/tentative/parsing/gap-decorations-color-computed.html +++ b/tests/wpt/tests/css/css-gaps/tentative/parsing/gap-decorations-color-computed.html @@ -18,7 +18,7 @@ } </style> <script> -const properties = ["column-rule-color", "row-rule-color"]; +const properties = ["column-rule-color", "row-rule-color", "rule-color"]; for (let property of properties) { test_computed_value(property, "currentcolor", "rgb(0, 255, 0)"); test_computed_value(property, "red", "rgb(255, 0, 0)"); diff --git a/tests/wpt/tests/css/css-gaps/tentative/parsing/gap-decorations-color-invalid.html b/tests/wpt/tests/css/css-gaps/tentative/parsing/gap-decorations-color-invalid.html index e553d24ea7b..5a0128e2303 100644 --- a/tests/wpt/tests/css/css-gaps/tentative/parsing/gap-decorations-color-invalid.html +++ b/tests/wpt/tests/css/css-gaps/tentative/parsing/gap-decorations-color-invalid.html @@ -12,7 +12,7 @@ </head> <body> <script> -const properties = ["column-rule-color", "row-rule-color"]; +const properties = ["column-rule-color", "row-rule-color", "rule-color"]; for (let property of properties) { test_invalid_value(property, "auto"); diff --git a/tests/wpt/tests/css/css-gaps/tentative/parsing/gap-decorations-color-valid.html b/tests/wpt/tests/css/css-gaps/tentative/parsing/gap-decorations-color-valid.html index af24afc3c98..f4cc0156e3f 100644 --- a/tests/wpt/tests/css/css-gaps/tentative/parsing/gap-decorations-color-valid.html +++ b/tests/wpt/tests/css/css-gaps/tentative/parsing/gap-decorations-color-valid.html @@ -12,7 +12,7 @@ </head> <body> <script> -const properties = ["column-rule-color", "row-rule-color"]; +const properties = ["column-rule-color", "row-rule-color", "rule-color"]; for (let property of properties) { // <repeat-line-color> = repeat( [ <integer [1,∞]> ] , [ <color> ]+ ) test_valid_value(property, "repeat(4, blue)"); diff --git a/tests/wpt/tests/css/css-gaps/tentative/parsing/gap-decorations-width-computed.html b/tests/wpt/tests/css/css-gaps/tentative/parsing/gap-decorations-width-computed.html index f24565ba5ee..299cbe0f3bb 100644 --- a/tests/wpt/tests/css/css-gaps/tentative/parsing/gap-decorations-width-computed.html +++ b/tests/wpt/tests/css/css-gaps/tentative/parsing/gap-decorations-width-computed.html @@ -21,7 +21,7 @@ </style> <script> -const properties = ["column-rule-width", "row-rule-width"]; +const properties = ["column-rule-width", "row-rule-width", "rule-width"]; for (let property of properties) { test_computed_value(property, "calc(10px + 0.5em)", "30px"); test_computed_value(property, "calc(10px - 0.5em)", "0px"); diff --git a/tests/wpt/tests/css/css-gaps/tentative/parsing/gap-decorations-width-invalid.html b/tests/wpt/tests/css/css-gaps/tentative/parsing/gap-decorations-width-invalid.html index 902c619affb..025d5263626 100644 --- a/tests/wpt/tests/css/css-gaps/tentative/parsing/gap-decorations-width-invalid.html +++ b/tests/wpt/tests/css/css-gaps/tentative/parsing/gap-decorations-width-invalid.html @@ -12,7 +12,7 @@ </head> <body> <script> -const properties = ["column-rule-width", "row-rule-width"]; +const properties = ["column-rule-width", "row-rule-width", "rule-width"]; for (let property of properties) { test_invalid_value(property, "auto"); diff --git a/tests/wpt/tests/css/css-gaps/tentative/parsing/gap-decorations-width-valid.html b/tests/wpt/tests/css/css-gaps/tentative/parsing/gap-decorations-width-valid.html index 05d45123fce..bd42d835623 100644 --- a/tests/wpt/tests/css/css-gaps/tentative/parsing/gap-decorations-width-valid.html +++ b/tests/wpt/tests/css/css-gaps/tentative/parsing/gap-decorations-width-valid.html @@ -12,7 +12,7 @@ </head> <body> <script> -const properties = ["column-rule-width", "row-rule-width"]; +const properties = ["column-rule-width", "row-rule-width", "rule-width"]; for (let property of properties) { // <repeat-line-width> = repeat( [ <integer [1,∞]> ] , [ <line-width> ]+ ) test_valid_value(property, "repeat(4, thin)"); diff --git a/tests/wpt/tests/css/css-gaps/tentative/serialization/gap-decorations-properties.html b/tests/wpt/tests/css/css-gaps/tentative/serialization/gap-decorations-properties.html new file mode 100644 index 00000000000..4985b5550f2 --- /dev/null +++ b/tests/wpt/tests/css/css-gaps/tentative/serialization/gap-decorations-properties.html @@ -0,0 +1,300 @@ +<!DOCTYPE HTML> +<html lang="en"> + +<head> + <meta charset="UTF-8"> + <title>CSS Test: Gap Decorations - Properties exist</title> + <link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com"> + <link rel="help" href="https://drafts.csswg.org/css-gaps-1/"> + <meta name="flags" content="ahem dom"> + <meta name="assert" content="Test checks that css properties of gap decorations exist."> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> + <style> + #container { + width: 800px; + height: 600px; + } + + #myDiv { + font: 50px/1 Ahem; + justify-content: start; + align-content: start; + } + </style> +</head> + +<body> + <div id="log"></div> + <div id="container"> + <div id="myDiv"> + <div>I T</div> + <div>IT</div> + <div>I</div> + </div> + </div> + + <script> + setup({ explicit_done: true }); + document.fonts.ready.then(() => { + var myDiv = document.getElementById('myDiv') + + void function (data) { + + myDiv.style.display = 'grid' + + Object.keys(data).forEach(function (prop) { + test(function () { + assert_true(prop in myDiv.style) + }, prop) + + var syntaxTests = data[prop] + Object.keys(syntaxTests).forEach(function (testcase) { + test(function () { + assert_true(prop in myDiv.style) + myDiv.style[prop] = syntaxTests[testcase][0] + assert_equals(myDiv.style[prop], syntaxTests[testcase][0], testcase) + assert_equals(getComputedStyle(myDiv)[prop], syntaxTests[testcase][1], testcase) + }, prop + '.' + testcase) + }) + }) + + }({ + 'gap-rule-paint-order': { + 'row-over-column': [ + 'row-over-column', + 'row-over-column' + ], + 'column-over-row': [ + 'column-over-row', + 'column-over-row' + ], + }, + 'column-rule-break': { + 'none': [ + 'none', + 'none' + ], + 'spanning-item': [ + 'spanning-item', + 'spanning-item' + ], + 'intersection': [ + 'intersection', + 'intersection' + ], + }, + 'column-rule-color': { + 'red': [ + 'red', + 'rgb(255, 0, 0)' + ], + 'blue': [ + 'blue', + 'rgb(0, 0, 255)' + ], + 'repeat(4, blue red green) repeat(auto, red)': [ + 'repeat(4, blue red green) repeat(auto, red)', + 'repeat(4, rgb(0, 0, 255) rgb(255, 0, 0) rgb(0, 128, 0)) repeat(auto, rgb(255, 0, 0))' + ], + 'blue red': [ + 'blue red', + 'rgb(0, 0, 255) rgb(255, 0, 0)' + ], + }, + 'column-rule-outset': { + '10px': [ + '10px', + '10px' + ], + '50%': [ + '50%', + '50%' + ], + }, + 'column-rule-style': { + 'none': [ + 'none', + 'none' + ], + 'hidden': [ + 'hidden', + 'hidden' + ], + 'dotted': [ + 'dotted', + 'dotted' + ], + 'dashed': [ + 'dashed', + 'dashed' + ], + 'solid': [ + 'solid', + 'solid' + ], + 'double': [ + 'double', + 'double' + ], + 'groove': [ + 'groove', + 'groove' + ], + 'ridge': [ + 'ridge', + 'ridge' + ], + 'inset': [ + 'inset', + 'inset' + ], + 'outset': [ + 'outset', + 'outset' + ], + 'dotted dashed': [ + 'dotted dashed', + 'dotted dashed' + ], + 'repeat(3, dotted)': [ + 'repeat(3, dotted)', + 'repeat(3, dotted)' + ], + }, + 'column-rule-width': { + '10px': [ + '10px', + '10px' + ], + 'thin': [ + 'thin', + '1px' + ], + 'medium': [ + 'medium', + '3px' + ], + 'thick': [ + 'thick', + '5px' + ], + }, + 'row-rule-break': { + 'none': [ + 'none', + 'none' + ], + 'spanning-item': [ + 'spanning-item', + 'spanning-item' + ], + 'intersection': [ + 'intersection', + 'intersection' + ], + }, + 'row-rule-color': { + 'red': [ + 'red', + 'rgb(255, 0, 0)' + ], + 'blue': [ + 'blue', + 'rgb(0, 0, 255)' + ], + 'repeat(4, blue red green) repeat(auto, red)': [ + 'repeat(4, blue red green) repeat(auto, red)', + 'repeat(4, rgb(0, 0, 255) rgb(255, 0, 0) rgb(0, 128, 0)) repeat(auto, rgb(255, 0, 0))' + ], + 'blue red': [ + 'blue red', + 'rgb(0, 0, 255) rgb(255, 0, 0)' + ], + }, + 'row-rule-outset': { + '10px': [ + '10px', + '10px' + ], + '50%': [ + '50%', + '50%' + ], + }, + 'row-rule-style': { + 'none': [ + 'none', + 'none' + ], + 'hidden': [ + 'hidden', + 'hidden' + ], + 'dotted': [ + 'dotted', + 'dotted' + ], + 'dashed': [ + 'dashed', + 'dashed' + ], + 'solid': [ + 'solid', + 'solid' + ], + 'double': [ + 'double', + 'double' + ], + 'groove': [ + 'groove', + 'groove' + ], + 'ridge': [ + 'ridge', + 'ridge' + ], + 'inset': [ + 'inset', + 'inset' + ], + 'outset': [ + 'outset', + 'outset' + ], + 'dotted dashed': [ + 'dotted dashed', + 'dotted dashed' + ], + 'repeat(3, dotted)': [ + 'repeat(3, dotted)', + 'repeat(3, dotted)' + ], + }, + 'row-rule-width': { + '10px': [ + '10px', + '10px' + ], + 'thin': [ + 'thin', + '1px' + ], + 'medium': [ + 'medium', + '3px' + ], + 'thick': [ + 'thick', + '5px' + ], + }, + }) + done(); + }); + </script> +</body> + +</html> diff --git a/tests/wpt/tests/css/css-grid/firefox-bug-1958131-crash.html b/tests/wpt/tests/css/css-grid/firefox-bug-1958131-crash.html new file mode 100644 index 00000000000..6cfb2069f4d --- /dev/null +++ b/tests/wpt/tests/css/css-grid/firefox-bug-1958131-crash.html @@ -0,0 +1,5 @@ +<!DOCTYPE html> +<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1958131"> +<body style="display: grid"> +<div></div> +<div style="order:-17014118346"></div> diff --git a/tests/wpt/tests/css/css-grid/parsing/grid-columns-rows-get-set-multiple.html b/tests/wpt/tests/css/css-grid/parsing/grid-columns-rows-get-set-multiple.html index 99af0110be7..c08290af9d5 100644 --- a/tests/wpt/tests/css/css-grid/parsing/grid-columns-rows-get-set-multiple.html +++ b/tests/wpt/tests/css/css-grid/parsing/grid-columns-rows-get-set-multiple.html @@ -268,7 +268,6 @@ setup({ explicit_done: true }); document.fonts.ready.then(() => { testGridDefinitionsValues("gridWithFixedElement", "7px 11px", "17px 2px"); testGridDefinitionsValues("gridWithPercentElement", "400px 800px", "150px 450px"); - // This test failing in Firefox is caused by https://bugzilla.mozilla.org/show_bug.cgi?id=1481876 testGridDefinitionsValues("gridWithPercentWithoutSize", "3.5px 7px", "4px 12px"); testGridDefinitionsValues("gridWithAutoElement", "0px 17px", "0px 3px"); testGridDefinitionsValues("gridWithEMElement", "100px 120px", "150px 170px"); diff --git a/tests/wpt/tests/css/css-images/image-set/image-set-parsing.html b/tests/wpt/tests/css/css-images/image-set/image-set-parsing.html index 83c0d73ab95..ee57c8599eb 100644 --- a/tests/wpt/tests/css/css-images/image-set/image-set-parsing.html +++ b/tests/wpt/tests/css/css-images/image-set/image-set-parsing.html @@ -119,6 +119,19 @@ function test_resolution_units_parsing() { 'image-set(url("example.png") calc(1 * 96dpi))', 'image-set(url("example.png") calc(1dppx))' ); + test_valid_value_variants( + 'background-image', + 'image-set(url("example.png") calc(1dppx * sibling-index()))', + ); + test_valid_value_variants( + 'background-image', + 'image-set(url("example.png") calc(1dppx * sign(1em - 10px)))', + ); + test_valid_value_variants( + 'background-image', + 'image-set(url("example.png") calc(1dppx * sign(10px)))', + 'image-set(url("example.png") calc(1dppx))', + ); test_invalid_value_variants( 'background-image', diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-not-ignore-nested-text-box-edge.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-not-ignore-nested-text-box-edge.html index 067281d893a..4f8568acf8a 100644 --- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-not-ignore-nested-text-box-edge.html +++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-not-ignore-nested-text-box-edge.html @@ -17,7 +17,7 @@ } .inner { text-box-edge: auto; - /* auto keyword uses the value of line-fit-edge on the root inline box of the the affected line box, + /* auto keyword uses the value of line-fit-edge on the root inline box of the affected line box, interpreting leading (the initial value) as text. */ } </style> diff --git a/tests/wpt/tests/css/css-multicol/multicol-nested-016.html b/tests/wpt/tests/css/css-multicol/multicol-nested-016.html index ad4b6a5aaaf..2f428957da4 100644 --- a/tests/wpt/tests/css/css-multicol/multicol-nested-016.html +++ b/tests/wpt/tests/css/css-multicol/multicol-nested-016.html @@ -18,7 +18,7 @@ <div style="break-before:avoid; columns:5; column-fill:auto; column-gap:0;"> <div style="background:green;"> <div style="height:60px;"></div> - <!-- These lines should be pushed to a column in the the next outer + <!-- These lines should be pushed to a column in the next outer fragmentainer, or we'd violate orphans and widows settings (which would otherwise be the only (and unnecessary) violation inside the inner multicol container). --> diff --git a/tests/wpt/tests/css/css-multicol/multicol-span-all-children-height-001.html b/tests/wpt/tests/css/css-multicol/multicol-span-all-children-height-001.html index 3226e81c320..64c04c868d9 100644 --- a/tests/wpt/tests/css/css-multicol/multicol-span-all-children-height-001.html +++ b/tests/wpt/tests/css/css-multicol/multicol-span-all-children-height-001.html @@ -6,7 +6,7 @@ <link rel="author" title="Mozilla" href="http://www.mozilla.org/"> <link rel="help" href="https://drafts.csswg.org/css-multicol-1/#column-span"> <link rel="match" href="multicol-span-all-children-height-001-ref.html"> - <meta name="assert" content="This test checks the the percentage height children under multicol container is rendered correctly."> + <meta name="assert" content="This test checks the percentage height children under multicol container is rendered correctly."> <style> article { diff --git a/tests/wpt/tests/css/css-overflow/resizer-no-size-change.tentative.html b/tests/wpt/tests/css/css-overflow/resizer-no-size-change.tentative.html index a8c659dc48d..61b149e1da1 100644 --- a/tests/wpt/tests/css/css-overflow/resizer-no-size-change.tentative.html +++ b/tests/wpt/tests/css/css-overflow/resizer-no-size-change.tentative.html @@ -4,6 +4,7 @@ <link rel=author href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez"> <link rel=author href="https://mozilla.org" title="Mozilla"> <link rel=help href="https://bugzilla.mozilla.org/show_bug.cgi?id=1795536"> +<link rel="help" href="https://www.w3.org/TR/css-ui-4/#resize"> <style> body { margin: 0; diff --git a/tests/wpt/tests/css/css-overflow/resizer-transform.tentative.html b/tests/wpt/tests/css/css-overflow/resizer-transform.tentative.html index 7b1af7f8f90..8dfeac2d35b 100644 --- a/tests/wpt/tests/css/css-overflow/resizer-transform.tentative.html +++ b/tests/wpt/tests/css/css-overflow/resizer-transform.tentative.html @@ -4,6 +4,7 @@ <link rel=author href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez"> <link rel=author href="https://mozilla.org" title="Mozilla"> <link rel=help href="https://bugzilla.mozilla.org/show_bug.cgi?id=1775797"> +<link rel="help" href="https://www.w3.org/TR/css-ui-4/#resize"> <style> #resizeme { position: absolute; diff --git a/tests/wpt/tests/css/css-overflow/scroll-marker-inert-001.html b/tests/wpt/tests/css/css-overflow/scroll-marker-inert-001.html new file mode 100644 index 00000000000..612a4cb9f4b --- /dev/null +++ b/tests/wpt/tests/css/css-overflow/scroll-marker-inert-001.html @@ -0,0 +1,51 @@ +<!DOCTYPE html> +<title>CSS Overflow Test: ::scroll-marker-group inertness applied to ::scroll-marker</title> +<link rel="help" href="https://drafts.csswg.org/css-overflow-5/#scroll-markers"> +<link rel="help" href="https://drafts.csswg.org/css-ui/#inertness"> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/11746"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-actions.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<style> + body { margin: 0; } + #scroller { + width: 100px; + height: 100px; + overflow-y: scroll; + scroll-marker-group: before; + } + #scroller::scroll-marker-group { + interactivity: inert; + height: 100px; + } + .item { + height: 100px; + background-color: lime; + } + .item::scroll-marker { + content: "X"; + display: block; + width: 20px; + height: 20px; + } + #filler { + height: 400px; + } +</style> +<div id="scroller"> + <div class="item"></div> + <div id="filler"></div> + <div id="target" class="item"></div> +</div> +<script> + promise_test(async t => { + await new test_driver.Actions() + .pointerMove(10, 30) + .pointerDown() + .pointerUp() + .send(); + assert_equals(scroller.scrollTop, 0); + }, "::scroll-marker is inert because its ::scroll-marker-group is"); +</script> diff --git a/tests/wpt/tests/css/css-overflow/scroll-marker-inert-002.html b/tests/wpt/tests/css/css-overflow/scroll-marker-inert-002.html new file mode 100644 index 00000000000..bf56426dea3 --- /dev/null +++ b/tests/wpt/tests/css/css-overflow/scroll-marker-inert-002.html @@ -0,0 +1,51 @@ +<!DOCTYPE html> +<title>CSS Overflow Test: Originating element inertness not applied to ::scroll-marker</title> +<link rel="help" href="https://drafts.csswg.org/css-overflow-5/#scroll-markers"> +<link rel="help" href="https://drafts.csswg.org/css-ui/#inertness"> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/11746"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-actions.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<style> + body { margin: 0; } + #scroller { + width: 100px; + height: 100px; + overflow-y: scroll; + scroll-marker-group: before; + } + #scroller::scroll-marker-group { + height: 100px; + } + .item { + height: 100px; + background-color: lime; + interactivity: inert; + } + .item::scroll-marker { + content: "X"; + display: block; + width: 20px; + height: 20px; + } + #filler { + height: 400px; + } +</style> +<div id="scroller"> + <div class="item"></div> + <div id="filler"></div> + <div id="target" class="item"></div> +</div> +<script> + promise_test(async t => { + await new test_driver.Actions() + .pointerMove(10, 30) + .pointerDown() + .pointerUp() + .send(); + assert_equals(scroller.scrollTop, 500); + }, "::scroll-marker is not inert because its ::scroll-marker-group isn't"); +</script> diff --git a/tests/wpt/tests/css/css-position/sticky/position-sticky-table-td-subpixel-zoom-ref.html b/tests/wpt/tests/css/css-position/sticky/position-sticky-table-td-subpixel-zoom-ref.html new file mode 100644 index 00000000000..719319b4da9 --- /dev/null +++ b/tests/wpt/tests/css/css-position/sticky/position-sticky-table-td-subpixel-zoom-ref.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<!-- Passes if a black transparent rectangle is painted with 1px borders. --> +<html style="zoom: 1.5625; overflow:hidden;"> + <style> + table { + border-spacing: 0; width:200px;} + td { + border: 1px solid black; + width: 100px; + height: 20px; + } + div::-webkit-scrollbar { + display: none; + } + div { + height:100px; + overflow:auto; + } + </style> + + <div style=""> + <table> + <tr> + <td style="";></td> + </tr> + </table> + <div style="height: 1000px;"></div> + </div> +</html> diff --git a/tests/wpt/tests/css/css-position/sticky/position-sticky-table-td-subpixel-zoom.html b/tests/wpt/tests/css/css-position/sticky/position-sticky-table-td-subpixel-zoom.html new file mode 100644 index 00000000000..ecdda37c39a --- /dev/null +++ b/tests/wpt/tests/css/css-position/sticky/position-sticky-table-td-subpixel-zoom.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<!-- Passes if a black transparent rectangle is painted with 1px borders. --> +<html style="zoom: 1.5625; overflow:hidden;"> + <link rel="help" href="https://www.w3.org/TR/css-position-3/#sticky-pos" /> + <meta name="assert" content="Position sticky pixel-snaps correctly under zoom" /> + <link rel="match" href="position-sticky-table-td-subpixel-zoom-ref.html" /> + + <style> + table { + border-spacing: 0; width:200px;} + tr { + top: 0; position: sticky; + } + td { + border: 1px solid black; + width: 100px; + height: 20px; + } + div::-webkit-scrollbar { + display: none; + } + div { + height:100px; + overflow:auto; + } + </style> + + <div style=""> + <table> + <tr> + <td style="";></td> + </tr> + </table> + <div style="height: 1000px;"></div> + </div> +</html> diff --git a/tests/wpt/tests/css/css-shapes/shape-outside-infinite-crash.html b/tests/wpt/tests/css/css-shapes/shape-outside-infinite-crash.html new file mode 100644 index 00000000000..b2dfd4fad51 --- /dev/null +++ b/tests/wpt/tests/css/css-shapes/shape-outside-infinite-crash.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<link rel="help" href="https://issues.chromium.org/issues/379143305"> +<style> +.test { + width: 200px; overflow: hidden; line-height: 0; +} +.float { + float: left; + width: 100px; + height: 100px; + background: orange; + shape-outside: polygon(0 0, 100% 100%, 0 100%); + clip-path: polygon(0 0, 100% 100%, 0 100%); +} +span { + display: inline-block; + width: 90px; + background: rebeccapurple; +} +</style> +<div class="test"> + <div class="float"></div> + <span style="height: 20px;"></span><span style="height: 22px;"></span> +</div> + diff --git a/tests/wpt/tests/css/css-tables/collapsed-border-remove-row-group.html b/tests/wpt/tests/css/css-tables/collapsed-border-remove-row-group.html index 39b89956c54..44e7cabd7e9 100644 --- a/tests/wpt/tests/css/css-tables/collapsed-border-remove-row-group.html +++ b/tests/wpt/tests/css/css-tables/collapsed-border-remove-row-group.html @@ -5,6 +5,7 @@ <link rel="author" href="https://mozilla.org" title="Mozilla"> <link rel="help" href="https://drafts.csswg.org/css-tables/#border-collapse-property"> <link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1907289"> +<link rel="help" href="https://bugs.webkit.org/show_bug.cgi?id=291728"> <link rel="match" href="collapsed-border-remove-row-group-ref.html"> <style> table { diff --git a/tests/wpt/tests/css/css-text/line-breaking/line-breaking-022.html b/tests/wpt/tests/css/css-text/line-breaking/line-breaking-022.html index 3591f46534a..dc7a3c28786 100644 --- a/tests/wpt/tests/css/css-text/line-breaking/line-breaking-022.html +++ b/tests/wpt/tests/css/css-text/line-breaking/line-breaking-022.html @@ -6,7 +6,7 @@ <link rel="match" href="reference/line-reabking-022.html"> <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" > <meta name="flags" content="ahem" > -<meta name=assert content="Any Unicode character with the the BK and NL line breaking class must be treated as forced line breaks"> +<meta name=assert content="Any Unicode character with the BK and NL line breaking class must be treated as forced line breaks"> <style> div { font: 25px/1 Ahem; diff --git a/tests/wpt/tests/css/css-text/text-justify/reference/text-justify-006-ref.html b/tests/wpt/tests/css/css-text/text-justify/reference/text-justify-006-ref.html index 595485c5f4e..a017f7a8e6b 100644 --- a/tests/wpt/tests/css/css-text/text-justify/reference/text-justify-006-ref.html +++ b/tests/wpt/tests/css/css-text/text-justify/reference/text-justify-006-ref.html @@ -21,7 +21,7 @@ div { a { color: white; } </style> -<p>Test passes if the the blue and orange boxes are aligned. +<p>Test passes if the blue and orange boxes are aligned. <div id=ref>X X X X</div> <div id=test>X X X X</div> diff --git a/tests/wpt/tests/css/css-text/text-justify/text-justify-006.html b/tests/wpt/tests/css/css-text/text-justify/text-justify-006.html index 7744f52afea..80c574d28cb 100644 --- a/tests/wpt/tests/css/css-text/text-justify/text-justify-006.html +++ b/tests/wpt/tests/css/css-text/text-justify/text-justify-006.html @@ -29,7 +29,7 @@ span { a { color: white; } </style> -<p>Test passes if the the blue and orange boxes are aligned. +<p>Test passes if the blue and orange boxes are aligned. <div id=ref>X X X X</div> <div id=test>X <span>X X</span> X <a>###########</a></div> diff --git a/tests/wpt/tests/css/css-text/word-break/word-break-break-all-ethiopic.html b/tests/wpt/tests/css/css-text/word-break/word-break-break-all-ethiopic.html index 1fa7f9054a9..ef45231d359 100644 --- a/tests/wpt/tests/css/css-text/word-break/word-break-break-all-ethiopic.html +++ b/tests/wpt/tests/css/css-text/word-break/word-break-break-all-ethiopic.html @@ -4,7 +4,7 @@ <title>break-all Ethiopic word breaking</title> <meta name="assert" content="word-break: break-all means Ethiopid words break according to the older rules (letter by letter). Nevertheless, the breaking prohibition before the Ethiopic word space (U+1361) -which belongs the the BA line breaking class, +which belongs the BA line breaking class, is honored."> <link rel='help' href='https://drafts.csswg.org/css-text-3/#word-break-property'> <link rel='match' href='reference/word-break-break-all-ethiopic-ref.html'> diff --git a/tests/wpt/tests/css/css-transitions/transition-test.html b/tests/wpt/tests/css/css-transitions/transition-test.html index 10700abf9bc..79094cee61c 100644 --- a/tests/wpt/tests/css/css-transitions/transition-test.html +++ b/tests/wpt/tests/css/css-transitions/transition-test.html @@ -5,7 +5,7 @@ <link rel="author" title="Oleg Janeiko" href="mailto:oleg@the-incredible.me"> <link rel="help" href="http://www.w3.org/TR/css3-transitions/#transition-property-property"> <link rel="match" href="reference/transition-test-ref.html"> - <meta name="assert" content="When an invalid value is specified as one of the transition properties, it causes the the transition-property to change to 'all'. Instead of leaving the invalid property in and animating the valid properites with matching durations."> + <meta name="assert" content="When an invalid value is specified as one of the transition properties, it causes the transition-property to change to 'all'. Instead of leaving the invalid property in and animating the valid properites with matching durations."> <style type="text/css"> .container { background-color: red; diff --git a/tests/wpt/tests/css/css-typed-om/stylevalue-serialization/cssTransformValue.tentative.html b/tests/wpt/tests/css/css-typed-om/stylevalue-serialization/cssTransformValue.tentative.html index 89330b8e1c0..7f9edda3939 100644 --- a/tests/wpt/tests/css/css-typed-om/stylevalue-serialization/cssTransformValue.tentative.html +++ b/tests/wpt/tests/css/css-typed-om/stylevalue-serialization/cssTransformValue.tentative.html @@ -107,7 +107,7 @@ const gTestCases = [ new CSSMathProduct(CSS.number(3)) ), ]), - cssText: 'translate(calc(1em + 1px), 0px) rotate(calc(90deg + 360deg)) perspective(calc(1em + 1px)) skew(calc(90deg * 2), calc(360deg * 2)) scale3d(calc(1 * 2), calc(1 + 1), calc(3))', + cssText: 'translate(calc(1em + 1px), 0px) rotate(calc(90deg + 360deg)) perspective(calc(1em + 1px)) skew(calc(2 * 90deg), calc(2 * 360deg)) scale3d(calc(1 * 2), calc(1 + 1), calc(3))', desc: 'CSSTransformValue containing CSSMathValues' }, { @@ -117,7 +117,7 @@ const gTestCases = [ new CSSUnitValue(0, 'number')), 0, 0, CSS.deg(0)) ]), - cssText:'rotate3d(calc(1 / 0), 0, 0, 0deg)', + cssText:'rotate3d(calc((1 / 0)), 0, 0, 0deg)', desc: 'CSSMathInvert with 0 parameter' }, { @@ -129,7 +129,7 @@ const gTestCases = [ new CSSUnitValue(0, 'number'))) ) ]), - cssText:'rotate3d(0, 0, 0, calc(1deg / 0))', + cssText:'rotate3d(0, 0, 0, calc(1deg * (1 / 0)))', desc: 'CSSMathInvert with 0 parameter and nested' }, { diff --git a/tests/wpt/tests/css/css-ui/box-sizing-003.html b/tests/wpt/tests/css/css-ui/box-sizing-003.html index 4aefec66566..c9a7effd7eb 100644 --- a/tests/wpt/tests/css/css-ui/box-sizing-003.html +++ b/tests/wpt/tests/css/css-ui/box-sizing-003.html @@ -6,7 +6,7 @@ <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width"> <link rel="match" href="reference/box-sizing-001-ref.html"> <meta name="assert" content="When box-sizing is border-box, the content width, rather than the computed value of the width property, - should be used in the the constraint that determines the used values of sizing and positioning properties + should be used in the constraint that determines the used values of sizing and positioning properties of absolutely positioned elements."> <style> #cb { diff --git a/tests/wpt/tests/css/css-ui/box-sizing-005.html b/tests/wpt/tests/css/css-ui/box-sizing-005.html index 64267da8528..c75265fbccf 100644 --- a/tests/wpt/tests/css/css-ui/box-sizing-005.html +++ b/tests/wpt/tests/css/css-ui/box-sizing-005.html @@ -6,7 +6,7 @@ <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-height"> <link rel="match" href="reference/box-sizing-001-ref.html"> <meta name="assert" content="When box-sizing is border-box, the content height, rather than the computed value of the height property, - should be used in the the constraint that determines the used values of sizing and positioning properties + should be used in the constraint that determines the used values of sizing and positioning properties of absolutely positioned elements."> <style> #cb { diff --git a/tests/wpt/tests/css/css-ui/resize-iframe-3d-transform.tentative.html b/tests/wpt/tests/css/css-ui/resize-iframe-3d-transform.tentative.html new file mode 100644 index 00000000000..50c894084c7 --- /dev/null +++ b/tests/wpt/tests/css/css-ui/resize-iframe-3d-transform.tentative.html @@ -0,0 +1,105 @@ +<!DOCTYPE HTML> +<title>Test of resizing interaction</title> +<link rel="author" title="L. David Baron" href="https://dbaron.org/"> +<link rel="author" title="Google" href="http://www.google.com/"> +<link rel="help" href="https://www.w3.org/TR/css-ui-4/#resize"> +<link rel="help" href="https://issues.chromium.org/issues/40697767"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-actions.js"></script> +<script src="/resources/testdriver-vendor.js"></script> + +<!-- + This test uses .tentative. because it depends on unspecified user + interface characteristics (the position of the resizer UI and how it + works), although those user interface characteristics are likely common + across implementations. +--> + +<style> + +html, body, iframe { margin: 0; padding: 0; } + +/** + * The top left corner of the iframe is translated by 300px left and + * 300px towards the user. This is inside a 60deg rotation around the + * left edge of the page, which means that that rotation moves the left + * edge of the iframe back into the viewport. The iframe's width is + * squashed in half, so it's visually 150x150 content box with 2px + * top/bottom borders and 1px left/right borders. + * + * This test is using 3D transforms to test correct use of project + * versus map for the event handling. + */ + +#outer { + transform: rotateY(60deg); + transform-origin: top left; + transform-style: preserve-3d; +} + +#middle { + transform: translateZ(300px); + transform-style: preserve-3d; +} + +#inner { + transform: translateX(-304px); + resize: both; + border: 2px solid; +} + +</style> + +<div id="outer"> + <div id="middle"> + <iframe id="inner" srcdoc="hello world"></iframe> + </div> +</div> + +<script> + +promise_test(async t => { + let e = document.getElementById("inner"); + + let w = e.getBoundingClientRect().width; + let h = e.getBoundingClientRect().height; + + assert_equals(w, 152, "iframe width"); + assert_equals(h, 154, "iframe height"); + + let x = e.getBoundingClientRect().right - 2; /* everything squashed in half */ + let y = e.getBoundingClientRect().bottom - 4; + + assert_approx_equals(x, Math.sin(Math.PI/3) * 300 - 2, 0.1, "iframe right"); + assert_equals(y, 150, "iframe bottom"); + + x = Math.round(x); // Actions expects integers + + let move1 = new test_driver.Actions() + .pointerMove(x, y) + .pointerDown() + .pointerMove(x-2, y-3); + await move1.send(); + + assert_equals(e.getBoundingClientRect().width, w - 2, "width after move 1"); + assert_equals(e.getBoundingClientRect().height, h - 3, "height after move 1"); + assert_equals(e.style.width, "296px", "width style after move 1"); + assert_equals(e.style.height, "147px", "height style after move 1"); + + // It's odd that we have to send pointerMove and pointerDown again here. + let move2 = new test_driver.Actions() + .pointerMove(x-2, y-3) + .pointerDown() + .pointerMove(x-9, y-1) + .pointerUp(); + await move2.send(); + + assert_equals(e.getBoundingClientRect().width, w - 9, "width after move 2"); + assert_equals(e.getBoundingClientRect().height, h - 1, "height after move 2"); + assert_equals(e.style.width, "282px", "width style after move 2"); + assert_equals(e.style.height, "149px", "height style after move 2"); +}, "resizing of iframe in 3D transform"); + +</script> diff --git a/tests/wpt/tests/css/css-ui/resize-textarea-relative-to-right-001.tentative.html b/tests/wpt/tests/css/css-ui/resize-textarea-relative-to-right-001.tentative.html new file mode 100644 index 00000000000..95a0bf189ec --- /dev/null +++ b/tests/wpt/tests/css/css-ui/resize-textarea-relative-to-right-001.tentative.html @@ -0,0 +1,59 @@ +<!DOCTYPE html> +<title>Test of resizing interaction</title> +<link rel="author" title="L. David Baron" href="https://dbaron.org/"> +<link rel="author" title="Google" href="http://www.google.com/"> +<link rel="help" href="https://www.w3.org/TR/css-ui-4/#resize"> +<link rel="help" href="https://issues.chromium.org/issues/40697767"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-actions.js"></script> +<script src="/resources/testdriver-vendor.js"></script> + +<!-- + This test uses .tentative. because it depends on unspecified user + interface characteristics (the position of the resizer UI and how it + works), although those user interface characteristics are likely common + across implementations. +--> + +<div style="float: right"> + <textarea id="text"></textarea> +</div> + +<script> + +promise_test(async t => { + let e = document.getElementById("text"); + + let w = e.getBoundingClientRect().width; + let h = e.getBoundingClientRect().height; + + let startX = e.getBoundingClientRect().left; + + let x = e.getBoundingClientRect().right - 3; + let y = e.getBoundingClientRect().bottom - 3; + let move1 = new test_driver.Actions() + .pointerMove(x, y) + .pointerDown() + .pointerMove(x-2, y-3); + await move1.send(); + + assert_equals(e.getBoundingClientRect().width, w - 2, "width after move 1"); + assert_equals(e.getBoundingClientRect().height, h - 3, "height after move 1"); + assert_equals(e.getBoundingClientRect().left, startX + 2, "left after move 1"); + + // It's odd that we have to send pointerMove and pointerDown again here. + let move2 = new test_driver.Actions() + .pointerMove(x-2, y-3) + .pointerDown() + .pointerMove(x-9, y-1) + .pointerUp(); + await move2.send(); + + assert_equals(e.getBoundingClientRect().width, w - 9, "width after move 2"); + assert_equals(e.getBoundingClientRect().height, h - 1, "height after move 2"); + assert_equals(e.getBoundingClientRect().left, startX + 9, "left after move 2"); +}, "resizing of textarea whose position is anchored to the right side"); + +</script> diff --git a/tests/wpt/tests/css/css-ui/resize-textarea-rtl-001.tentative.html b/tests/wpt/tests/css/css-ui/resize-textarea-rtl-001.tentative.html new file mode 100644 index 00000000000..dab08fb7514 --- /dev/null +++ b/tests/wpt/tests/css/css-ui/resize-textarea-rtl-001.tentative.html @@ -0,0 +1,58 @@ +<!DOCTYPE html> +<html dir="rtl"> +<title>Test of resizing interaction</title> +<link rel="author" title="L. David Baron" href="https://dbaron.org/"> +<link rel="author" title="Google" href="http://www.google.com/"> +<link rel="help" href="https://www.w3.org/TR/css-ui-4/#resize"> +<link rel="help" href="https://issues.chromium.org/issues/41236895"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-actions.js"></script> +<script src="/resources/testdriver-vendor.js"></script> + +<!-- + This test uses .tentative. because it depends on unspecified user + interface characteristics (the position of the resizer UI and how it + works), although those user interface characteristics are likely common + across implementations. +--> + +<textarea id="text"></textarea> + +<script> + +promise_test(async t => { + let e = document.getElementById("text"); + + let w = e.getBoundingClientRect().width; + let h = e.getBoundingClientRect().height; + + let startX = e.getBoundingClientRect().left; + + let x = e.getBoundingClientRect().left + 3; // resizer at lower left + let y = e.getBoundingClientRect().bottom - 3; + let move1 = new test_driver.Actions() + .pointerMove(x, y) + .pointerDown() + .pointerMove(x+2, y-3); + await move1.send(); + + assert_equals(e.getBoundingClientRect().width, w - 2, "width after move 1"); + assert_equals(e.getBoundingClientRect().height, h - 3, "height after move 1"); + assert_equals(e.getBoundingClientRect().left, startX + 2, "left after move 1"); + + // It's odd that we have to send pointerMove and pointerDown again here. + let move2 = new test_driver.Actions() + .pointerMove(x+2, y-3) + .pointerDown() + .pointerMove(x-9, y-1) + .pointerUp(); + await move2.send(); + + assert_equals(e.getBoundingClientRect().width, w + 9, "width after move 2"); + assert_equals(e.getBoundingClientRect().height, h - 1, "height after move 2"); + assert_equals(e.getBoundingClientRect().left, startX - 9, "left after move 2"); +}, "resizing of RTL textarea in RTL context"); + +</script> diff --git a/tests/wpt/tests/css/css-ui/resize-textarea-rtl-002.tentative.html b/tests/wpt/tests/css/css-ui/resize-textarea-rtl-002.tentative.html new file mode 100644 index 00000000000..1715df3bb47 --- /dev/null +++ b/tests/wpt/tests/css/css-ui/resize-textarea-rtl-002.tentative.html @@ -0,0 +1,57 @@ +<!DOCTYPE html> +<title>Test of resizing interaction</title> +<link rel="author" title="L. David Baron" href="https://dbaron.org/"> +<link rel="author" title="Google" href="http://www.google.com/"> +<link rel="help" href="https://www.w3.org/TR/css-ui-4/#resize"> +<link rel="help" href="https://issues.chromium.org/issues/41236895"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-actions.js"></script> +<script src="/resources/testdriver-vendor.js"></script> + +<!-- + This test uses .tentative. because it depends on unspecified user + interface characteristics (the position of the resizer UI and how it + works), although those user interface characteristics are likely common + across implementations. +--> + +<textarea id="text" dir="rtl"></textarea> + +<script> + +promise_test(async t => { + let e = document.getElementById("text"); + + let w = e.getBoundingClientRect().width; + let h = e.getBoundingClientRect().height; + + let startX = e.getBoundingClientRect().left; + + let x = e.getBoundingClientRect().left + 3; // resizer at lower left + let y = e.getBoundingClientRect().bottom - 3; + let move1 = new test_driver.Actions() + .pointerMove(x, y) + .pointerDown() + .pointerMove(x+2, y-3); + await move1.send(); + + assert_equals(e.getBoundingClientRect().width, w - 2, "width after move 1"); + assert_equals(e.getBoundingClientRect().height, h - 3, "height after move 1"); + assert_equals(e.getBoundingClientRect().left, startX, "left after move 1"); + + // It's odd that we have to send pointerMove and pointerDown again here. + let move2 = new test_driver.Actions() + .pointerMove(x+2, y-3) + .pointerDown() + .pointerMove(x-9, y-1) + .pointerUp(); + await move2.send(); + + assert_equals(e.getBoundingClientRect().width, w + 9, "width after move 2"); + assert_equals(e.getBoundingClientRect().height, h - 1, "height after move 2"); + assert_equals(e.getBoundingClientRect().left, startX, "left after move 2"); +}, "resizing of RTL textarea whose position is anchored to the left side"); + +</script> diff --git a/tests/wpt/tests/css/css-values/acos-asin-atan-atan2-computed.html b/tests/wpt/tests/css/css-values/acos-asin-atan-atan2-computed.html index 76033289a2c..cacee588f3c 100644 --- a/tests/wpt/tests/css/css-values/acos-asin-atan-atan2-computed.html +++ b/tests/wpt/tests/css/css-values/acos-asin-atan-atan2-computed.html @@ -39,6 +39,11 @@ test_math_used('calc(atan2(0,-1) / 4)', '45deg', {type:'angle', approx:0.1}); // test_math_used('calc(atan2(1,-1))', '135deg', {type:'angle', approx:0.1}); test_math_used('calc(atan2(-1,1))', '-45deg', {type:'angle', approx:0.1}); +// Test unresolved at parse time +test_math_used('calc(asin(sin(180deg * sibling-index())))', '0deg', {type:'angle', approx:0.1}); +test_math_used('calc(acos(cos(180deg * sibling-index())))', '180deg', {type:'angle', approx:0.1}); +test_math_used('calc(atan(tan(180deg * sibling-index())))', '0deg', {type:'angle', approx:0.1}); + // Test nesting test_math_used('calc(cos(sin(acos(cos(pi)))))', '1', {type:'number', approx:0.1}); diff --git a/tests/wpt/tests/css/css-values/calc-size/animation/calc-size-interpolation-expansion.html b/tests/wpt/tests/css/css-values/calc-size/animation/calc-size-interpolation-expansion.html index 354d108f1da..c3de4d7ab9e 100644 --- a/tests/wpt/tests/css/css-values/calc-size/animation/calc-size-interpolation-expansion.html +++ b/tests/wpt/tests/css/css-values/calc-size/animation/calc-size-interpolation-expansion.html @@ -32,8 +32,6 @@ * not fully specified. Once we have multiple implementations that * implement all of the necessary features for this test, we should * probably look at improving that interoperability. - * - * TODO: The sorting of the nodes in a multiplication seems wrong. */ var TESTS = [ @@ -42,23 +40,23 @@ var TESTS = [ start: "auto", end: "calc-size(any, 0px)", expected: { - 0.75: "calc-size(auto, 0px + size * 0.25)", + 0.75: "calc-size(auto, 0px + 0.25 * size)", }, }, { property: "height", start: "0px", - end: "calc-size(calc-size(min-content, size + 20px), size * 2)", + end: "calc-size(calc-size(min-content, size + 20px), 2 * size)", expected: { - 0.75: "calc-size(calc-size(min-content, 20px + size), 0px + size * 2 * 0.75)", + 0.75: "calc-size(calc-size(min-content, 20px + size), 0px + 0.75 * 2 * size)", }, }, { property: "height", start: "calc-size(min-content, size * 4)", - end: "calc-size(calc-size(min-content, size + 20px), size * 2)", + end: "calc-size(calc-size(min-content, size + 20px), 2 * size)", expected: { - 0.75: "calc-size(min-content, size * 4 * 0.25 + (20px + size) * 2 * 0.75)", + 0.75: "calc-size(min-content, 0.25 * 4 * size + 0.75 * 2 * (20px + size))", }, }, { @@ -89,32 +87,32 @@ var TESTS = [ { property: "width", start: "calc-size(fit-content, 20px)", - end: "calc-size(calc-size(fit-content, 3 * size + 10px), min(size + 20px, size * 2 - 30px) + size * 2 + 80px)", + end: "calc-size(calc-size(fit-content, 3 * size + 10px), min(size + 20px, 2 * size - 30px) + 2 * size + 80px)", expected: { - 0.75: "calc-size(fit-content, 5px + min(30px + 3 * size, 30px + 2 * 0.75 * (3 * size + 10px)) + (10px + 3 * size) * 2 * 0.75)", - 0.75: "calc-size(fit-content, 5px + (80px + min(10px + 20px + size * 3, -30px + (10px + size * 3) * 2) + (10px + size * 3) * 2) * 0.75)", + 0.75: "calc-size(fit-content, 5px + min(30px + 3 * size, 30px + 2 * 0.75 * (3 * size + 10px)) + 0.75 * 2 * (10px + 3 * size))", + 0.75: "calc-size(fit-content, 5px + 0.75 * (80px + min(10px + 20px + 3 * size, -30px + 2 * (10px + 3 * size)) + 2 * (10px + 3 * size)))", }, }, { property: "width", start: "calc-size(50%, size)", - end: "calc-size(calc-size(45%, (size * 2)), size + 20px)", + end: "calc-size(calc-size(45%, (2 * size)), size + 20px)", expected: { - 0.75: "calc-size(100%, size * 0.5 * 0.25 + (20px + size * 0.45 * 2) * 0.75)", + 0.75: "calc-size(100%, 0.25 * 0.5 * size + 0.75 * (20px + 0.45 * 2 * size))", }, }, { property: "width", start: "calc-size(40%, size)", - end: "calc-size(calc-size(10px, (size * 2)), size + 20px)", + end: "calc-size(calc-size(10px, (2 * size)), size + 20px)", expected: { - 0.75: "calc-size(100%, 30px + size * 0.4 * 0.25)", + 0.75: "calc-size(100%, 30px + 0.25 * 0.4 * size)", }, }, { property: "width", start: "calc-size(80px, size)", - end: "calc-size(calc-size(10px, (size * 2)), size + 20px)", + end: "calc-size(calc-size(10px, (2 * size)), size + 20px)", expected: { 0.75: "calc-size(any, 50px)", }, diff --git a/tests/wpt/tests/css/css-values/calc-size/calc-size-parsing.html b/tests/wpt/tests/css/css-values/calc-size/calc-size-parsing.html index 6db2635e5ef..3d63f0dbe00 100644 --- a/tests/wpt/tests/css/css-values/calc-size/calc-size-parsing.html +++ b/tests/wpt/tests/css/css-values/calc-size/calc-size-parsing.html @@ -35,10 +35,10 @@ test_valid_value("min-block-size", "calc-size(max-content, size)"); test_valid_value("min-inline-size", "calc-size(max-content, size)"); test_valid_value("width", "calc-size(fit-content, size)"); -test_valid_value("height", "calc-size(min-content, size * 2)"); -test_valid_value("max-width", "calc-size(max-content, size / 2)"); -test_valid_value("max-height", "calc-size(fit-content, 30px + size / 2)"); -test_valid_value("width", "calc-size(fit-content, 50% + size / 2)"); +test_valid_value("height", "calc-size(min-content, size * 2)", "calc-size(min-content, 2 * size)"); +test_valid_value("max-width", "calc-size(max-content, size / 2)", "calc-size(max-content, 0.5 * size)"); +test_valid_value("max-height", "calc-size(fit-content, 30px + size / 2)", "calc-size(fit-content, 30px + 0.5 * size)"); +test_valid_value("width", "calc-size(fit-content, 50% + size / 2)", "calc-size(fit-content, 50% + 0.5 * size)"); test_valid_value("width", "calc-size(any, 25em)"); test_valid_value("width", "calc-size(any, 40%)"); diff --git a/tests/wpt/tests/css/css-values/calc-size/calc-size-typed-om.html b/tests/wpt/tests/css/css-values/calc-size/calc-size-typed-om.html index 8f9600e26a9..37400823f9d 100644 --- a/tests/wpt/tests/css/css-values/calc-size/calc-size-typed-om.html +++ b/tests/wpt/tests/css/css-values/calc-size/calc-size-typed-om.html @@ -25,10 +25,10 @@ function test_typed_om_string(property, value, expected) { test_typed_om_string("width", "calc-size(auto, size)"); test_typed_om_string("width", "calc-size(fit-content, size)"); -test_typed_om_string("height", "calc-size(min-content, size * 2)"); -test_typed_om_string("max-width", "calc-size(max-content, size / 2)", "calc-size(max-content, size * 0.5)"); -test_typed_om_string("max-height", "calc-size(fit-content, 30px + size / 2)", "calc-size(fit-content, 30px + size * 0.5)"); -test_typed_om_string("width", "calc-size(fit-content, 50% + size / 2)", "calc-size(fit-content, 50% + size * 0.5)"); +test_typed_om_string("height", "calc-size(min-content, size * 2)", "calc-size(min-content, 2 * size)"); +test_typed_om_string("max-width", "calc-size(max-content, size / 2)", "calc-size(max-content, 0.5 * size)"); +test_typed_om_string("max-height", "calc-size(fit-content, 30px + size / 2)", "calc-size(fit-content, 30px + 0.5 * size)"); +test_typed_om_string("width", "calc-size(fit-content, 50% + size / 2)", "calc-size(fit-content, 50% + 0.5 * size)"); test_typed_om_string("width", "calc-size(any, 30px)"); test_typed_om_string("width", "calc-size(any, 25em)", "calc-size(any, 400px)"); test_typed_om_string("width", "calc-size(any, 40%)"); @@ -41,6 +41,6 @@ test_typed_om_string("width", "calc-size(calc-size(any, 30px), 25em)", "calc-siz test_typed_om_string("width", "calc-size(calc-size(2in, 30px), 25em)", "calc-size(calc-size(192px, 30px), 400px)"); test_typed_om_string("width", "calc-size(calc-size(min-content, 30px), 25em)", "calc-size(calc-size(min-content, 30px), 400px)"); test_typed_om_string("width", "calc-size(calc-size(min-content, size), size)"); -test_typed_om_string("width", "calc-size(calc-size(fit-content, size * 2), size)"); +test_typed_om_string("width", "calc-size(calc-size(fit-content, size * 2), size)", "calc-size(calc-size(fit-content, 2 * size), size)"); </script> diff --git a/tests/wpt/tests/css/css-values/exp-log-compute.html b/tests/wpt/tests/css/css-values/exp-log-compute.html index 9efc1a7721c..4bdd507fa33 100644 --- a/tests/wpt/tests/css/css-values/exp-log-compute.html +++ b/tests/wpt/tests/css/css-values/exp-log-compute.html @@ -29,6 +29,9 @@ test_math_used('calc(log((3 + 1) /2, 2) / log(e) + exp(0*1)*2 * log(e))', '3', test_math_used('calc(log((3 + 1) /2, 2) / log(e, e) + exp(0*1)*2 * log(e, e))', '3', {type:'number', approx:0.1}); test_math_used('calc(exp(0) + 1)', '2', {type:'number', approx:0.1}); +// Test unresolved at parse time +test_math_used('calc(e - exp(sibling-index()))', '0', {type:'number', approx:0.1}); + // Test nesting test_math_used('calc(log(exp(1)))', '1', {type:'number', approx:0.1}); test_math_used('calc(log(exp(log(e))))', '1', {type:'number', approx:0.1}); diff --git a/tests/wpt/tests/css/css-values/hypot-pow-sqrt-computed.html b/tests/wpt/tests/css/css-values/hypot-pow-sqrt-computed.html index 6ac416c0f5b..19ce1c2d49d 100644 --- a/tests/wpt/tests/css/css-values/hypot-pow-sqrt-computed.html +++ b/tests/wpt/tests/css/css-values/hypot-pow-sqrt-computed.html @@ -6,7 +6,12 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="../support/numeric-testcommon.js"></script> -<div id="target"></div> +<div> + <div></div> + <div></div> + <div></div> + <div id="target"></div> +</div> <script> // Identity tests @@ -38,6 +43,11 @@ test_math_used('hypot(0% + 772.333px)', 'calc(0% + 772.333px)'); test_math_used('hypot(0% + 772.35px)', 'calc(0% + 772.35px)'); test_math_used('hypot(0% + 600px, 0% + 800px)', '1000px'); +//Test unresolved at parse time +test_math_used('sqrt(sibling-index())', '2', {type: 'integer'}); +test_math_used('calc(1px * sqrt(sibling-index()))', '2px'); +test_math_used('sqrt(pow(sibling-index(), 2))', '4', {type: 'integer'}); + //Type checking hypot test_math_used('hypot(1px)', '1px'); test_math_used('hypot(1cm)', '1cm'); diff --git a/tests/wpt/tests/css/css-values/random-computed.tentative.html b/tests/wpt/tests/css/css-values/random-computed.tentative.html index c6a408040ce..b0539acf593 100644 --- a/tests/wpt/tests/css/css-values/random-computed.tentative.html +++ b/tests/wpt/tests/css/css-values/random-computed.tentative.html @@ -1,88 +1,114 @@ <!DOCTYPE html> <link rel="help" href="https://drafts.csswg.org/css-values-5/#random"> <link rel="author" title="sam@webkit.org"> +<meta name="timeout" content="long"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="../support/computed-testcommon.js"></script> -<div id="container" style="font-size: 20"> +<div id="container"> <div id="target"></div> </div> -<div id="noIdentifier1" class="randomNoIdentifier"></div> -<div id="noIdentifier2" class="randomNoIdentifier"></div> -<div id="identifier1" class="randomIdentifier"></div> -<div id="identifier2" class="randomIdentifier"></div> -<div id="identicalArguments1"></div> -<div id="identicalArguments2"></div> -<div id="identicalArgumentsAfterMath1"></div> -<div id="identicalArgumentsAfterMath2"></div> -<div id="identicalArgumentsAfterUnitResolution1"></div> -<div id="identicalArgumentsAfterUnitResolution2"></div> -<div id="identicalTwoProperties"></div> -<div id="identicalTwoPropertiesWithIdentifier"></div> -<div id="identicalTwoPropertiesWithPerElement"></div> -<div id="identicalTwoPropertiesWithPerElementAndIdentifier"></div> <style> - .randomPerElement { width: random(per-element, 0px, 100000px); } - .randomNoIdentifier { width: random(10px, 110px); } - .randomIdentifier { width: random(--identifier, 20px, 120px); } - - #identicalArguments1 { width: random(30px, 130px); } - #identicalArguments2 { width: random(30px, 130px); } - - #identicalArgumentsAfterMath1 { width: random(5 * 10px, 2 * 75px); } - #identicalArgumentsAfterMath2 { width: random(100px / 2, 300px / 2); } - - #identicalArgumentsAfterUnitResolution1 { width: random(160px, 320px); } - #identicalArgumentsAfterUnitResolution2 { font-size: 16px; width: random(10em, 20em); } - - #identicalTwoProperties { - width: random(60px, 160px); - height: random(60px, 160px); + .randomNoIdentifier { + width: random(0px, 100px); + height: random(0px, 100px); + left: random(0px, 100000px); + right: random(0px, 100000px); + margin: random(0px, 100000px) random(0px, 100000px); } - - #identicalTwoPropertiesWithIdentifier { - width: random(--another-identifier, 70px, 170px); - height: random(--another-identifier, 70px, 170px); + .randomMatchElement { + width: random(element-shared, 0px, 100px); + height: random(element-shared, 0px, 100px); + left: random(element-shared, 0px, 100000px); + right: random(element-shared, 0px, 100000px); + margin: random(element-shared 0px, 100000px) random(element-shared 0px, 100000px); } - - #identicalTwoPropertiesWithPerElement { - width: random(per-element, 80px, 180px); - height: random(per-element, 80px, 180px); + .randomIdentifier { + width: random(--identifier, 0px, 100px); + height: random(--identifier, 0px, 100px); + left: random(--identifier, 0px, 100000px); + right: random(--identifier, 0px, 100000px); + margin: random(--identifier 0px, 100000px) random(--identifier 0px, 100000px); } - - #identicalTwoPropertiesWithPerElementAndIdentifier { - width: random(per-element --yet-another-identifier, 90px, 190px); - height: random(--yet-another-identifier per-element, 90px, 190px); + .randomMatchElementAndIdentifier { + width: random(element-shared --other-identifier, 0px, 100px); + height: random(element-shared --other-identifier, 0px, 100px); + left: random(element-shared --other-identifier, 0px, 100000px); + right: random(element-shared --other-identifier, 0px, 100000px); + margin: random(element-shared --other-identifier 0px, 100000px) random(element-shared --other-identifier 0px, 100000px); + } + .randomFixed { + width: random(fixed 0.5, 10px, 100px); + height: random(fixed 0.5, 10px, 100px); + left: random(fixed 0.5, 0px, 100000px); + right: random(fixed 0.5, 0px, 100000px); + margin: random(fixed 0.5 0px, 100000px) random(fixed 0.5 0px, 100000px); } </style> <script> -function test_computed_value_in_range(property, specified, computedMin, computedMax, titleExtra) { - test(() => { - const target = document.getElementById('target'); - assert_true(property in getComputedStyle(target), property + " doesn't seem to be supported in the computed style"); - assert_true(CSS.supports(property, specified), "'" + specified + "' is a supported value for " + property + "."); - target.style[property] = ''; - target.style[property] = specified; - let readValue = getComputedStyle(target)[property]; +// Run each test a number of times to increase the likelyhood that failure is not the cause of random chance. +const iterations = 5; - let readValueNumber = parseFloat(readValue); - let computedMinNumber = parseFloat(computedMin); - let computedMaxNumber = parseFloat(computedMax); +function test_random_computed_value(property, specified, computed, titleExtra, options = {}) { + if (!computed) + computed = specified; - assert_greater_than_equal(readValueNumber, computedMinNumber, specified); - assert_less_than_equal(readValueNumber, computedMaxNumber, specified); + test(() => { + for (i = 0; i < iterations; ++i) { + const target = document.getElementById('target'); + assert_true(property in getComputedStyle(target), property + " doesn't seem to be supported in the computed style"); + assert_true(CSS.supports(property, specified), "'" + specified + "' is a supported value for " + property + "."); + target.style[property] = ''; + target.style[property] = specified; + + let readValue = getComputedStyle(target)[property]; + if (options.comparisonFunction) { + options.comparisonFunction(readValue, computed); + } else if (Array.isArray(computed)) { + assert_in_array(readValue, computed); + } else { + assert_equals(readValue, computed); + } + if (readValue !== specified) { + target.style[property] = ''; + target.style[property] = readValue; + assert_equals(getComputedStyle(target)[property], readValue, + 'computed value should round-trip'); + } + } + }, `Property ${property} value '${specified}'${titleExtra ? ' ' + titleExtra : ''}`); +} + +function test_random_computed_value_greater_or_lower_than(property, specified, expected, titleExtra) { + test(() => { + for (i = 0; i < iterations; ++i) { + const target = document.getElementById('target'); + assert_true(property in getComputedStyle(target), property + " doesn't seem to be supported in the computed style"); + assert_true(CSS.supports(property, specified), "'" + specified + "' is a supported value for " + property + "."); + target.style[property] = ''; + target.style[property] = specified; + let readValue = parseFloat(getComputedStyle(target)[property]); + assert_true(isFinite(readValue), specified + " expected finite value but got " + readValue) + assert_false(isNaN(readValue), specified + " expected finite value but got " + readValue) + if (expected > 0) + assert_greater_than_equal(readValue, expected, specified); + else + assert_less_than_equal(readValue, expected, specified); + } }, `Property ${property} value '${specified}'${titleExtra ? ' ' + titleExtra : ''}`); } -function test_pseudo_element_computed_value_in_range(property, pseudo_element, specified, computedMin, computedMax, titleExtra) { +function test_random_computed_value_in_range(property, specified, computedMin, computedMax, titleExtra) { test(() => { - const styleEl = document.head.appendChild(document.createElement("style")); - styleEl.innerHTML = `#target${pseudo_element} \{ ${property}: ${specified}; \}`; + for (i = 0; i < iterations; ++i) { + const target = document.getElementById('target'); + assert_true(property in getComputedStyle(target), property + " doesn't seem to be supported in the computed style"); + assert_true(CSS.supports(property, specified), "'" + specified + "' is a supported value for " + property + "."); + target.style[property] = ''; + target.style[property] = specified; - try { - const target = document.getElementById("target"); - let readValue = getComputedStyle(target, pseudo_element)[property]; + let readValue = getComputedStyle(target)[property]; let readValueNumber = parseFloat(readValue); let computedMinNumber = parseFloat(computedMin); @@ -90,214 +116,359 @@ function test_pseudo_element_computed_value_in_range(property, pseudo_element, s assert_greater_than_equal(readValueNumber, computedMinNumber, specified); assert_less_than_equal(readValueNumber, computedMaxNumber, specified); - } finally { - document.head.removeChild(styleEl); + } + }, `Property ${property} value '${specified}'${titleExtra ? ' ' + titleExtra : ''}`); +} + +function test_pseudo_element_random_computed_value_in_range(property, pseudo_element, specified, computedMin, computedMax, titleExtra) { + test(() => { + for (i = 0; i < iterations; ++i) { + const styleEl = document.head.appendChild(document.createElement("style")); + styleEl.innerHTML = `#target${pseudo_element} \{ ${property}: ${specified}; \}`; + + try { + const target = document.getElementById("target"); + let readValue = getComputedStyle(target, pseudo_element)[property]; + + let readValueNumber = parseFloat(readValue); + let computedMinNumber = parseFloat(computedMin); + let computedMaxNumber = parseFloat(computedMax); + + assert_greater_than_equal(readValueNumber, computedMinNumber, specified); + assert_less_than_equal(readValueNumber, computedMaxNumber, specified); + } finally { + document.head.removeChild(styleEl); + } } }, `Property ${property} value on pseudo element '${pseudo_element}' '${specified}'${titleExtra ? ' ' + titleExtra : ''}`); } -const property = 'scale'; +function test_random_computed_value_has_fixed(property, specified, minPercentage, maxPercentage, titleExtra) { + test(() => { + for (i = 0; i < iterations; ++i) { + const target = document.getElementById('target'); + assert_true(property in getComputedStyle(target), property + " doesn't seem to be supported in the computed style"); + assert_true(CSS.supports(property, specified), "'" + specified + "' is a supported value for " + property + "."); + target.style[property] = ''; + target.style[property] = specified; -test_computed_value_in_range(property, 'random(1, 11)', '1', '11'); -test_computed_value_in_range(property, 'random(--foo, 2, 12)', '2', '12'); -test_computed_value_in_range(property, 'random(--foo per-element, 3, 13)', '3', '13'); -test_computed_value_in_range(property, 'random(per-element --foo, 4, 14)', '4', '14'); + let readValue = getComputedStyle(target)[property]; -test_computed_value(property, 'random(0, 10, by 5)', ['0', '5', '10']); -test_computed_value(property, 'random(--foo, 10, 20, by 5)', ['10', '15', '20']); -test_computed_value(property, 'random(--foo per-element, 20, 30, by 5)', ['20', '25', '30']); -test_computed_value(property, 'random(per-element --foo, 30, 40, by 5)', ['30', '35', '40']); + // strip 'random(' and ')'. + let stippedReadValue = readValue.replace('random(', '').replace(')', ''); -// Test out of order. -test_computed_value(property, 'random(100, 10)', '100'); -test_computed_value(property, 'random(-10, -100)', '-10'); + // split into the three main components + let [fixedComponent, minComponent, maxComponent] = stippedReadValue.split(', '); -// Test negative values -test_computed_value_in_range(property, 'random(-100, -10)', '-100', '-10'); -test_computed_value(property, 'random(40, 50, by -5)', '40'); + // split fixed component into its two components + let [fixedString, fixedValue] = fixedComponent.split(' '); -// Test nested expressions -test_computed_value_in_range(property, 'random(5 * 1, 30 / 2)', '5', '15'); + assert_equals(fixedString, 'fixed', specified); + assert_greater_than_equal(parseFloat(fixedValue), '0', specified); + assert_less_than_equal(parseFloat(fixedValue), '1', specified); + assert_equals(minComponent, minPercentage, specified); + assert_equals(maxComponent, maxPercentage, specified); + } + }, `Property ${property} value '${specified}'${titleExtra ? ' ' + titleExtra : ''}`); +} -// Test nested in expressions -test_computed_value_in_range(property, 'calc(2 * random(6, 16))', '12', '32'); +const property = 'scale'; -// Test NaN -test_computed_value(property, 'random(NaN, 100)', '0'); -test_computed_value(property, 'random(10, NaN)', '0'); -test_computed_value(property, 'random(NaN, NaN)', '0'); -test_computed_value(property, 'random(NaN, 100, by 10)', '0'); -test_computed_value(property, 'random(10, NaN, by 10)', '0'); -test_computed_value(property, 'random(NaN, NaN, by 10)', '0'); -test_computed_value(property, 'random(NaN, 100, by NaN)', '0'); -test_computed_value(property, 'random(10, NaN, by NaN)', '0'); -test_computed_value(property, 'random(NaN, NaN, by NaN)', '0'); -test_computed_value(property, 'random(10, 100, by NaN)', '0'); -test_computed_value(property, 'calc(10 + random(NaN, 100))', '0'); -test_computed_value(property, 'calc(10 + random(10, NaN))', '0'); -test_computed_value(property, 'calc(10 + random(NaN, NaN))', '0'); -test_computed_value(property, 'calc(10 + random(NaN, 100, by 10))', '0'); -test_computed_value(property, 'calc(10 + random(10, NaN, by 10))', '0'); -test_computed_value(property, 'calc(10 + random(NaN, NaN, by 10))', '0'); -test_computed_value(property, 'calc(10 + random(NaN, 100, by NaN))', '0'); -test_computed_value(property, 'calc(10 + random(10, NaN, by NaN))', '0'); -test_computed_value(property, 'calc(10 + random(NaN, NaN, by NaN))', '0'); -test_computed_value(property, 'calc(10 + random(10, 100, by NaN))', '0'); +test_random_computed_value_in_range(property, 'random(1, 11)', '1', '11'); +test_random_computed_value_in_range(property, 'random(--foo, 2, 12)', '2', '12'); +test_random_computed_value_in_range(property, 'random(--foo element-shared, 3, 13)', '3', '13'); +test_random_computed_value_in_range(property, 'random(element-shared --foo, 4, 14)', '4', '14'); -// Test infinity -test_computed_value(property, 'random(infinity, 100)', '0'); -test_computed_value(property, 'random(10, infinity)', '0'); -test_computed_value(property, 'random(infinity, infinity)', '0'); -test_computed_value(property, 'random(infinity, 100, by 10)', '0'); -test_computed_value(property, 'random(10, infinity, by 10)', '0'); -test_computed_value(property, 'random(infinity, infinity, by 10)', '0'); -test_computed_value(property, 'random(infinity, 100, by infinity)', '0'); -test_computed_value(property, 'random(10, infinity, by infinity)', '0'); -test_computed_value(property, 'random(infinity, infinity, by infinity)', '0'); -test_computed_value(property, 'calc(10 + random(infinity, 100))', '0'); -test_computed_value(property, 'calc(10 + random(10, infinity))', '0'); -test_computed_value(property, 'calc(10 + random(infinity, infinity))', '0'); -test_computed_value(property, 'calc(10 + random(infinity, 100, by 10))', '0'); -test_computed_value(property, 'calc(10 + random(10, infinity, by 10))', '0'); -test_computed_value(property, 'calc(10 + random(infinity, infinity, by 10))', '0'); -test_computed_value(property, 'calc(10 + random(infinity, 100, by infinity))', '0'); -test_computed_value(property, 'calc(10 + random(10, infinity, by infinity))', '0'); -test_computed_value(property, 'calc(10 + random(infinity, infinity, by infinity))', '0'); -// If only step is infinite, min is used. -test_computed_value(property, 'random(10, 100, by infinity)', '10'); -test_computed_value(property, 'random(10, 100, by -infinity)', '10'); -test_computed_value(property, 'calc(10 + random(10, 100, by infinity))', '20'); -test_computed_value(property, 'calc(10 + random(10, 100, by -infinity))', '20'); +test_random_computed_value(property, 'random(0, 10, 5)', ['0', '5', '10']); +test_random_computed_value(property, 'random(--foo, 10, 20, 5)', ['10', '15', '20']); +test_random_computed_value(property, 'random(--foo element-shared, 20, 30, 5)', ['20', '25', '30']); +test_random_computed_value(property, 'random(element-shared --foo, 30, 40, 5)', ['30', '35', '40']); -// Test pseudo on psuedo elements -test_pseudo_element_computed_value_in_range('scale', '::before', 'random(7, 17)', '7', '17'); -test_pseudo_element_computed_value_in_range('scale', '::before', 'random(--bar, 8, 18)', '8', '18'); -test_pseudo_element_computed_value_in_range('scale', '::before', 'random(per-element, 9, 19)', '9', '19'); -test_pseudo_element_computed_value_in_range('scale', '::before', 'random(per-element --foo, 10, 20)', '10', '20'); +// Test out of order. +test_random_computed_value(property, 'random(100, 10)', '100'); +test_random_computed_value(property, 'random(-10, -100)', '-10'); -// Test identifier caching -test(() => { - const t1 = document.getElementById('noIdentifier1'); - const t2 = document.getElementById('noIdentifier2'); +// Test negative range values +test_random_computed_value_in_range(property, 'random(-100, -10)', '-100', '-10'); - let t1Computed = getComputedStyle(t1)['width']; - let t2Computed = getComputedStyle(t2)['width']; +// Test negative step values (treated as if step is not there) +test_random_computed_value_in_range(property, 'random(40, 50, -5)', '40', '50'); - assert_equals(t1Computed, t2Computed); -}, `Uses of a style rule on two elements with 'random(...)'`); +// Test nested expressions +test_random_computed_value_in_range(property, 'random(5 * 1, 30 / 2)', '5', '15'); -test(() => { - const t1 = document.getElementById('identifier1'); - const t2 = document.getElementById('identifier2'); +// Test nested in expressions +test_random_computed_value_in_range(property, 'calc(2 * random(6, 16))', '12', '32'); - let t1Computed = getComputedStyle(t1)['width']; - let t2Computed = getComputedStyle(t2)['width']; +// Test NaN +test_random_computed_value(property, 'random(NaN, 100)', '0'); +test_random_computed_value(property, 'random(10, NaN)', '0'); +test_random_computed_value(property, 'random(NaN, NaN)', '0'); +test_random_computed_value(property, 'random(NaN, 100, 10)', '0'); +test_random_computed_value(property, 'random(10, NaN, 10)', '0'); +test_random_computed_value(property, 'random(NaN, NaN, 10)', '0'); +test_random_computed_value(property, 'random(NaN, 100, NaN)', '0'); +test_random_computed_value(property, 'random(10, NaN, NaN)', '0'); +test_random_computed_value(property, 'random(NaN, NaN, NaN)', '0'); +test_random_computed_value(property, 'random(10, 100, NaN)', '0'); +test_random_computed_value(property, 'calc(10 + random(NaN, 100))', '0'); +test_random_computed_value(property, 'calc(10 + random(10, NaN))', '0'); +test_random_computed_value(property, 'calc(10 + random(NaN, NaN))', '0'); +test_random_computed_value(property, 'calc(10 + random(NaN, 100, 10))', '0'); +test_random_computed_value(property, 'calc(10 + random(10, NaN, 10))', '0'); +test_random_computed_value(property, 'calc(10 + random(NaN, NaN, 10))', '0'); +test_random_computed_value(property, 'calc(10 + random(NaN, 100, NaN))', '0'); +test_random_computed_value(property, 'calc(10 + random(10, NaN, NaN))', '0'); +test_random_computed_value(property, 'calc(10 + random(NaN, NaN, NaN))', '0'); +test_random_computed_value(property, 'calc(10 + random(10, 100, NaN))', '0'); - assert_equals(t1Computed, t2Computed); -}, `Uses of a style rule on two elements with 'random(--identifier, ...)'`); +// Test infinity -test(() => { - const t1 = document.getElementById('identicalArguments1'); - const t2 = document.getElementById('identicalArguments2'); +const REALLY_LARGE = 1e6; +const REALLY_LARGE_NEGATIVE = -REALLY_LARGE; + +test_random_computed_value_greater_or_lower_than(property, 'random(infinity, 100)', REALLY_LARGE); +test_random_computed_value_greater_or_lower_than(property, 'random(infinity, infinity)', REALLY_LARGE); +test_random_computed_value_greater_or_lower_than(property, 'random(infinity, 100, 10)', REALLY_LARGE); +test_random_computed_value_greater_or_lower_than(property, 'random(infinity, infinity, 10)', REALLY_LARGE); +test_random_computed_value_greater_or_lower_than(property, 'random(infinity, 100, infinity)', REALLY_LARGE); +test_random_computed_value_greater_or_lower_than(property, 'random(infinity, infinity, infinity)', REALLY_LARGE); +test_random_computed_value_greater_or_lower_than(property, 'calc(10 + random(infinity, 100))', REALLY_LARGE); +test_random_computed_value_greater_or_lower_than(property, 'calc(10 + random(infinity, infinity))', REALLY_LARGE); +test_random_computed_value_greater_or_lower_than(property, 'calc(10 + random(infinity, infinity, 10))', REALLY_LARGE); +test_random_computed_value_greater_or_lower_than(property, 'calc(10 + random(infinity, 100, infinity))', REALLY_LARGE); +test_random_computed_value_greater_or_lower_than(property, 'calc(10 + random(infinity, infinity, infinity))', REALLY_LARGE); +test_random_computed_value_greater_or_lower_than(property, 'calc(10 + random(infinity, 100, 10))', REALLY_LARGE); +test_random_computed_value(property, 'random(10, infinity)', '0'); +test_random_computed_value(property, 'random(10, infinity, 10)', '0'); +test_random_computed_value(property, 'random(10, infinity, infinity)', '0'); +test_random_computed_value(property, 'calc(10 + random(10, infinity))', '0'); +test_random_computed_value(property, 'calc(10 + random(10, infinity, 10))', '0'); +test_random_computed_value(property, 'calc(10 + random(10, infinity, infinity))', '0'); +test_random_computed_value(property, 'random(10, 100, infinity)', '0'); +test_random_computed_value(property, 'calc(10 + random(10, 100, infinity))', '0'); +// Negative steps, even infinitely negative steps, are ignored. +test_random_computed_value_in_range(property, 'random(10, 100, -infinity)', '10', '100'); +test_random_computed_value_in_range(property, 'calc(10 + random(10, 100, -infinity))', '20', '110'); - let t1Computed = getComputedStyle(t1)['width']; - let t2Computed = getComputedStyle(t2)['width']; +// Test pseudo on psuedo elements +test_pseudo_element_random_computed_value_in_range(property, '::before', 'random(7, 17)', '7', '17'); +test_pseudo_element_random_computed_value_in_range(property, '::before', 'random(--bar, 8, 18)', '8', '18'); +test_pseudo_element_random_computed_value_in_range(property, '::before', 'random(element-shared, 9, 19)', '9', '19'); +test_pseudo_element_random_computed_value_in_range(property, '::before', 'random(element-shared --foo, 10, 20)', '10', '20'); - assert_equals(t1Computed, t2Computed); -}, `Uses of two style rules on two elements with identical arguments`); +// Test unresolvable percentage values +test_random_computed_value_has_fixed('translate', 'random(10%, 100%)', '10%', '100%'); +// Test random value sharing test(() => { - const t1 = document.getElementById('identicalArgumentsAfterMath1'); - const t2 = document.getElementById('identicalArgumentsAfterMath2'); - - let t1Computed = getComputedStyle(t1)['width']; - let t2Computed = getComputedStyle(t2)['width']; + const holder = document.createElement('div'); + document.body.appendChild(holder); + + try { + const el = document.createElement('div'); + el.className = 'randomNoIdentifier'; + holder.appendChild(el); + const elComputedLeft = getComputedStyle(el)['left']; + + var allSame = true; + var allHaveSameLeftAndRight = true; + for (i = 0; i < iterations; ++i) { + const other = document.createElement('div'); + other.className = 'randomNoIdentifier'; + holder.appendChild(other); + const otherComputedLeft = getComputedStyle(other)['left']; + if (elComputedLeft != otherComputedLeft) { + allSame = false; + } + const otherComputedRight = getComputedStyle(other)['right']; + if (elComputedLeft != otherComputedRight) { + allHaveSameLeftAndRight = false; + } + } - assert_equals(t1Computed, t2Computed); -}, `Uses of two style rules on two elements with identical arguments after math has been resolved`); + assert_false(allSame); + assert_false(allHaveSameLeftAndRight); + } finally { + document.body.removeChild(holder); + } +}, `Maximum random: 'random(a, b)'`); test(() => { - const t1 = document.getElementById('identicalArgumentsAfterUnitResolution1'); - const t2 = document.getElementById('identicalArgumentsAfterUnitResolution2'); - - let t1Computed = getComputedStyle(t1)['width']; - let t2Computed = getComputedStyle(t2)['width']; + const holder = document.createElement('div'); + document.body.appendChild(holder); + + try { + var allHaveSameMarginTopAndMarginLeft = true; + for (i = 0; i < iterations; ++i) { + const other = document.createElement('div'); + other.className = 'randomNoIdentifier'; + holder.appendChild(other); + const otherComputedMarginLeft = getComputedStyle(other)['margin-left']; + const otherComputedMarginTop = getComputedStyle(other)['margin-top']; + if (otherComputedMarginLeft != otherComputedMarginTop) { + allHaveSameMarginTopAndMarginLeft = false; + } + } - assert_equals(t1Computed, t2Computed); -}, `Uses of two style rules on two elements with identical arguments after unit resolution`); + assert_false(allHaveSameMarginTopAndMarginLeft); + } finally { + document.body.removeChild(holder); + } +}, `Maximum random - shorthand: random(a, b))`); test(() => { - const style = 'width: calc(410px, 500px)'; + const holder = document.createElement('div'); + document.body.appendChild(holder); - const el1 = document.createElement('div'); - el1.style = style; - document.body.appendChild(el1); - const el1Computed = getComputedStyle(el1)['width']; + try { + for (i = 0; i < iterations; ++i) { + const el = document.createElement('div'); + el.className = 'randomIdentifier'; + holder.appendChild(el); - const el2 = document.createElement('div'); - el2.style = style; - document.body.appendChild(el2); - const el2Computed = getComputedStyle(el2)['width']; + let elComputedWidth = getComputedStyle(el)['width']; + let elComputedHeight = getComputedStyle(el)['height']; - assert_equals(el1Computed, el2Computed); -}, `Uses of two style rules on two elements with identical arguments accross two different style resolutions`); + assert_equals(elComputedWidth, elComputedHeight); + } + } finally { + document.body.removeChild(holder); + } +}, `Shared by name within an element: 'random(--identifier, a, b)'`); test(() => { - const el = document.getElementById('identicalTwoProperties'); - - let widthComputed = getComputedStyle(el)['width']; - let heightComputed = getComputedStyle(el)['height']; + const holder = document.createElement('div'); + document.body.appendChild(holder); + + try { + var allHaveSameMarginTopAndMarginLeft = true; + for (i = 0; i < iterations; ++i) { + const other = document.createElement('div'); + other.className = 'randomIdentifier'; + holder.appendChild(other); + const otherComputedMarginLeft = getComputedStyle(other)['margin-left']; + const otherComputedMarginTop = getComputedStyle(other)['margin-top']; + if (otherComputedMarginLeft != otherComputedMarginTop) { + allHaveSameMarginTopAndMarginLeft = false; + } + } - assert_equals(widthComputed, heightComputed); -}, `Uses of a style rule for two properies on an element with identical uses of random(...).`); + assert_true(allHaveSameMarginTopAndMarginLeft); + } finally { + document.body.removeChild(holder); + } +}, `Shared by name within an element - shorthand: random(--identifier, a, b))`); test(() => { - const el = document.getElementById('identicalTwoPropertiesWithIdentifier'); + const holder = document.createElement('div'); + document.body.appendChild(holder); + + try { + for (i = 0; i < iterations; ++i) { + const t1 = document.createElement('div'); + t1.className = 'randomMatchElement'; + holder.appendChild(t1); + const t2 = document.createElement('div'); + t2.className = 'randomMatchElement'; + holder.appendChild(t2); + + let t1ComputedWidth = getComputedStyle(t1)['width']; + let t2ComputedWidth = getComputedStyle(t2)['width']; + + assert_equals(t1ComputedWidth, t2ComputedWidth); + } + } finally { + document.body.removeChild(holder); + } +}, `Shared between elements within a property: random(element-shared, a, b)`); - let widthComputed = getComputedStyle(el)['width']; - let heightComputed = getComputedStyle(el)['height']; +test(() => { + const holder = document.createElement('div'); + document.body.appendChild(holder); + + try { + var allHaveSameMarginTopAndMarginLeft = true; + for (i = 0; i < iterations; ++i) { + const other = document.createElement('div'); + other.className = 'randomMatchElement'; + holder.appendChild(other); + const otherComputedMarginLeft = getComputedStyle(other)['margin-left']; + const otherComputedMarginTop = getComputedStyle(other)['margin-top']; + if (otherComputedMarginLeft != otherComputedMarginTop) { + allHaveSameMarginTopAndMarginLeft = false; + } + } - assert_equals(widthComputed, heightComputed); -}, `Uses of a style rule for two properies on an element with identical uses of random(--identifier, ...).`); + assert_true(allHaveSameMarginTopAndMarginLeft); + } finally { + document.body.removeChild(holder); + } +}, `Shared between elements within a property - shorthand: random(element-shared, a, b))`); test(() => { - const el = document.getElementById('identicalTwoPropertiesWithPerElement'); + const holder = document.createElement('div'); + document.body.appendChild(holder); + + try { + for (i = 0; i < iterations; ++i) { + const t1 = document.createElement('div'); + t1.className = 'randomMatchElementAndIdentifier'; + holder.appendChild(t1); + const t2 = document.createElement('div'); + t2.className = 'randomMatchElementAndIdentifier'; + holder.appendChild(t2); + + let t1ComputedWidth = getComputedStyle(t1)['width']; + let t2ComputedHeight = getComputedStyle(t2)['height']; + + assert_equals(t1ComputedWidth, t2ComputedHeight); + } + } finally { + document.body.removeChild(holder); + } +}, `Shared globally: random(--identifier element-shared, a, b)`); - let widthComputed = getComputedStyle(el)['width']; - let heightComputed = getComputedStyle(el)['height']; +test(() => { + const holder = document.createElement('div'); + document.body.appendChild(holder); + + try { + var allHaveSameMarginTopAndMarginLeft = true; + for (i = 0; i < iterations; ++i) { + const other = document.createElement('div'); + other.className = 'randomMatchElementAndIdentifier'; + holder.appendChild(other); + const otherComputedMarginLeft = getComputedStyle(other)['margin-left']; + const otherComputedMarginTop = getComputedStyle(other)['margin-top']; + if (otherComputedMarginLeft != otherComputedMarginTop) { + allHaveSameMarginTopAndMarginLeft = false; + } + } - assert_equals(widthComputed, heightComputed); -}, `Uses of a style rule for two properies on an element with identical uses of random(per-elemnent, ...).`); + assert_true(allHaveSameMarginTopAndMarginLeft); + } finally { + document.body.removeChild(holder); + } +}, `Shared globally - shorthand: random(element-shared, a, b))`); test(() => { - const el = document.getElementById('identicalTwoPropertiesWithPerElementAndIdentifier'); + const holder = document.createElement('div'); + document.body.appendChild(holder); - let widthComputed = getComputedStyle(el)['width']; - let heightComputed = getComputedStyle(el)['height']; + try { + for (i = 0; i < iterations; ++i) { + const t1 = document.createElement('div'); + t1.className = 'randomFixed'; + holder.appendChild(t1); - assert_equals(widthComputed, heightComputed); -}, `Uses of a style rule for two properies on an element with identical uses of random(per-elemnent --identifier, ...).`); + let t1ComputedWidth = getComputedStyle(t1)['width']; -test(() => { - const el = document.createElement('div'); - el.className = 'randomPerElement'; - document.body.appendChild(el); - const elComputed = getComputedStyle(el)['width']; - - // It is statistically improbable that all 100 elements will have - // the same width when picked as a random number between 0 and 100000. - var allSame = true; - for (i = 0; i < 100; ++i) { - const other = document.createElement('div'); - other.className = 'randomPerElement'; - document.body.appendChild(other); - const otherComputed = getComputedStyle(other)['width']; - if (elComputed != otherComputed) { - allSame = false; + assert_equals(t1ComputedWidth, "55px"); } + } finally { + document.body.removeChild(holder); } - - assert_false(allSame); -}, `Uses of a style rule on multiple elements with 'random(per-element, ...)'`); +}, `Fixed: random(fixed <number>, a, b)`); </script> diff --git a/tests/wpt/tests/css/css-values/random-invalid.tentative.html b/tests/wpt/tests/css/css-values/random-invalid.tentative.html index f21d36077dc..dd428868a2d 100644 --- a/tests/wpt/tests/css/css-values/random-invalid.tentative.html +++ b/tests/wpt/tests/css/css-values/random-invalid.tentative.html @@ -13,16 +13,22 @@ test_invalid_value('width', 'random(1px, )'); test_invalid_value('width', 'random(,1px)'); test_invalid_value('width', 'random(1px)'); test_invalid_value('width', 'random(1px,2px,)'); -test_invalid_value('width', 'random(1px,2px,by 1px,)'); -test_invalid_value('width', 'random(1px,2px,by 1px foo)'); +test_invalid_value('width', 'random(1px,2px,1px,)'); +test_invalid_value('width', 'random(1px,2px,1px foo)'); test_invalid_value('width', 'random(foo, 1px, 2px)'); test_invalid_value('width', 'random("foo", 1px, 2px)'); test_invalid_value('width', 'random("--foo", 1px, 2px)'); -test_invalid_value('width', 'random(per-element foo, 1px, 2px)'); -test_invalid_value('width', 'random(per-element 1px, 2px)'); -test_invalid_value('width', 'random(1px, 2px, by 1px, per-element)'); +test_invalid_value('width', 'random(element-shared foo, 1px, 2px)'); +test_invalid_value('width', 'random(element-shared 1px, 2px)'); +test_invalid_value('width', 'random(1px, 2px, 1px, element-shared)'); test_invalid_value('width', 'random(--foo --bar, 1px, 2px)'); - +test_invalid_value('width', 'random(fixed random(1, 2), 1px, 2px)'); +test_invalid_value('width', 'random(fixed 0.5 element-shared, 1px, 2px)'); +test_invalid_value('width', 'random(fixed 0.5 auto, 1px, 2px)'); +test_invalid_value('width', 'random(fixed 0.5 --foo, 1px, 2px)'); +test_invalid_value('width', 'random(fixed 0.5px, 1px, 2px)'); +test_invalid_value('width', 'random(fixed 0.5%, 1px, 2px)'); +test_invalid_value('width', 'random(fixed -1, 1px, 2px)'); test_invalid_value('width', 'random(10deg, 20deg)'); test_invalid_value('width', 'random(10px, 20%)'); diff --git a/tests/wpt/tests/css/css-values/random-serialize.tentative.html b/tests/wpt/tests/css/css-values/random-serialize.tentative.html index 43dc3a3f677..5c0b9601da0 100644 --- a/tests/wpt/tests/css/css-values/random-serialize.tentative.html +++ b/tests/wpt/tests/css/css-values/random-serialize.tentative.html @@ -8,37 +8,47 @@ <script> test_valid_value('width', 'random(0px, 100px)'); -test_valid_value('width', 'random(0px, 100px, by 50px)'); +test_valid_value('width', 'random(0px, 100px, 50px)'); test_valid_value('width', 'random(--foo, 0px, 100px)'); -test_valid_value('width', 'random(--foo per-element, 0px, 100px)'); -test_valid_value('width', 'random(per-element --foo, 0px, 100px)', 'random(--foo per-element, 0px, 100px)'); -test_valid_value('width', 'random(--foo, 0px, 100px, by 50px)'); -test_valid_value('width', 'random(--foo per-element, 0px, 100px, by 50px)'); -test_valid_value('width', 'random(per-element --foo, 0px, 100px, by 50px)', 'random(--foo per-element, 0px, 100px, by 50px)'); +test_valid_value('width', 'random(auto, 0px, 100px)', 'random(0px, 100px)'); +test_valid_value('width', 'random(--foo element-shared, 0px, 100px)'); +test_valid_value('width', 'random(auto element-shared, 0px, 100px)', 'random(element-shared, 0px, 100px)'); +test_valid_value('width', 'random(element-shared --foo, 0px, 100px)', 'random(--foo element-shared, 0px, 100px)'); +test_valid_value('width', 'random(element-shared auto, 0px, 100px)', 'random(element-shared, 0px, 100px)'); +test_valid_value('width', 'random(fixed 0.5, 0px, 100px)'); +test_valid_value('width', 'random(--foo, 0px, 100px, 50px)'); +test_valid_value('width', 'random(auto, 0px, 100px, 50px)', 'random(0px, 100px, 50px)'); +test_valid_value('width', 'random(--foo element-shared, 0px, 100px, 50px)'); +test_valid_value('width', 'random(auto element-shared, 0px, 100px, 50px)', 'random(element-shared, 0px, 100px, 50px)'); +test_valid_value('width', 'random(element-shared --foo, 0px, 100px, 50px)', 'random(--foo element-shared, 0px, 100px, 50px)'); +test_valid_value('width', 'random(element-shared auto, 0px, 100px, 50px)', 'random(element-shared, 0px, 100px, 50px)'); +test_valid_value('width', 'random(fixed 0.5, 0px, 100px, 50px)'); // Test out of order. test_valid_value('width', 'random(100px, 0px)'); // Test negative values test_valid_value('width', 'random(-100px, -10px)'); +test_valid_value('width', 'random(-100px, -10px, -5px)'); // Test mixed units. test_valid_value('width', 'random(1em, 200rem)'); // Test nested expressions test_valid_value('width', 'random(10 * 100px, 200em / 2)', 'random(1000px, 100em)'); +test_valid_value('width', 'random(fixed calc(2 / 4), 0px, 100px)', 'random(fixed calc(0.5), 0px, 100px)'); // Test nested in expressions test_valid_value('width', 'calc(2 * random(0px, 100px))'); // Test other types test_valid_value('max-lines', 'random(25, 50)'); -test_valid_value('max-lines', 'random(25, 50, by 5)'); +test_valid_value('max-lines', 'random(25, 50, 5)'); test_valid_value('scale', 'random(0.5, 2.5)'); -test_valid_value('scale', 'random(0.5, 2.5, by 0.1)'); +test_valid_value('scale', 'random(0.5, 2.5, 0.1)'); test_valid_value('rotate', 'random(25deg, 1turn)', 'random(25deg, 360deg)'); -test_valid_value('rotate', 'random(25deg, 1turn, by 5deg)', 'random(25deg, 360deg, by 5deg)'); +test_valid_value('rotate', 'random(25deg, 1turn, 5deg)', 'random(25deg, 360deg, 5deg)'); test_valid_value('transition-delay', 'random(25ms, 50s)', 'random(0.025s, 50s)'); -test_valid_value('transition-delay', 'random(25ms, 50s, by 5s)', 'random(0.025s, 50s, by 5s)'); +test_valid_value('transition-delay', 'random(25ms, 50s, 5s)', 'random(0.025s, 50s, 5s)'); </script> diff --git a/tests/wpt/tests/css/css-values/sin-cos-tan-computed.html b/tests/wpt/tests/css/css-values/sin-cos-tan-computed.html index a19b118f754..80b4d1972f6 100644 --- a/tests/wpt/tests/css/css-values/sin-cos-tan-computed.html +++ b/tests/wpt/tests/css/css-values/sin-cos-tan-computed.html @@ -38,4 +38,12 @@ test_math_used('calc(sin(0.25turn) )', '1', {type:'number', approx:0.1}); //Test nesting test_math_used('calc(cos(sin(cos(pi) + 1)))', '1', {type:'number', approx:0.1}); test_math_used('calc(sin(tan(pi/4)*pi/2) )', '1', {type:'number', approx:0.1}); + +//Test unresolved at parse time +test_math_used('calc(sin(pi * sibling-index())', '0', {type:'number', approx:0.1}); +test_math_used('calc(cos(pi * sibling-index())', '-1', {type:'number', approx:0.1}); +test_math_used('calc(tan(pi * sibling-index())', '0', {type:'number', approx:0.1}); +test_math_used('calc(sin(180deg * sibling-index())', '0', {type:'number', approx:0.1}); +test_math_used('calc(cos(180deg * sibling-index())', '-1', {type:'number', approx:0.1}); +test_math_used('calc(tan(180deg * sibling-index())', '0', {type:'number', approx:0.1}); </script> diff --git a/tests/wpt/tests/css/css-values/urls/cross-origin/url-image-crossorigin-anonymous-negative.sub.html b/tests/wpt/tests/css/css-values/urls/cross-origin/url-image-crossorigin-anonymous-negative.sub.html new file mode 100644 index 00000000000..f5066a55d2b --- /dev/null +++ b/tests/wpt/tests/css/css-values/urls/cross-origin/url-image-crossorigin-anonymous-negative.sub.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<html> +<head> +<title>Request URL Modifiers: crossorigin(anonymous)</title> +<link rel="help" href="https://drafts.csswg.org/css-values-5/#typedef-request-url-modifier-crossorigin-modifier"> +<link rel="author" title="Sam Weinig" href="mailto:weinig@webkit.org"> +<link rel="match" href="../url-image-ref.html"> +<meta name="assert" content="A url with the request URL modifier crossorigin(anonymous) requires a response with the appropriate headers."> +<style> + .test { + width: 200px; + height: 200px; + background-color: green; + background-image: url("http://{{hosts[][]}}:{{ports[http][1]}}/css/support/1x1-red.png" crossorigin(anonymous)); + } +</style> +</head> +<body> +<p>Test passes if there is a green square.</p> +<div class="test"></div> +</body> +</html> diff --git a/tests/wpt/tests/css/css-values/urls/cross-origin/url-image-crossorigin-anonymous.sub.html b/tests/wpt/tests/css/css-values/urls/cross-origin/url-image-crossorigin-anonymous.sub.html new file mode 100644 index 00000000000..0a45eda33d7 --- /dev/null +++ b/tests/wpt/tests/css/css-values/urls/cross-origin/url-image-crossorigin-anonymous.sub.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<html> +<head> +<title>Request URL Modifiers: crossorigin(anonymous)</title> +<link rel="help" href="https://drafts.csswg.org/css-values-5/#typedef-request-url-modifier-crossorigin-modifier"> +<link rel="author" title="Sam Weinig" href="mailto:weinig@webkit.org"> +<link rel="match" href="../url-image-ref.html"> +<meta name="assert" content="A url with the request URL modifier crossorigin(anonymous) requires a response with the appropriate headers."> +<style> + .test { + width: 200px; + height: 200px; + background-color: red; + background-image: url("http://{{hosts[][]}}:{{ports[http][1]}}/css/support/1x1-green.png?pipe=header(Access-Control-Allow-Origin,*)" crossorigin(anonymous)); + } +</style> +</head> +<body> +<p>Test passes if there is a green square.</p> +<div class="test"></div> +</body> +</html> diff --git a/tests/wpt/tests/css/css-values/urls/cross-origin/url-image-crossorigin-use-credentials-negative.sub.html b/tests/wpt/tests/css/css-values/urls/cross-origin/url-image-crossorigin-use-credentials-negative.sub.html new file mode 100644 index 00000000000..952f953d844 --- /dev/null +++ b/tests/wpt/tests/css/css-values/urls/cross-origin/url-image-crossorigin-use-credentials-negative.sub.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<html> +<head> +<title>Request URL Modifiers: crossorigin(use-credentials)</title> +<link rel="help" href="https://drafts.csswg.org/css-values-5/#typedef-request-url-modifier-crossorigin-modifier"> +<link rel="author" title="Sam Weinig" href="mailto:weinig@webkit.org"> +<link rel="match" href="../url-image-ref.html"> +<meta name="assert" content="A url with the request URL modifier crossorigin(use-credentials) requires a response with the appropriate headers."> +<style> + .test { + width: 200px; + height: 200px; + background-color: green; + background-image: url("http://{{hosts[][]}}:{{ports[http][1]}}/css/support/1x1-green.png" crossorigin(use-credentials)); + } +</style> +</head> +<body> +<p>Test passes if there is a green square.</p> +<div class="test"></div> +</body> +</html> diff --git a/tests/wpt/tests/css/css-values/urls/cross-origin/url-image-crossorigin-use-credentials.sub.html b/tests/wpt/tests/css/css-values/urls/cross-origin/url-image-crossorigin-use-credentials.sub.html new file mode 100644 index 00000000000..f592a02c486 --- /dev/null +++ b/tests/wpt/tests/css/css-values/urls/cross-origin/url-image-crossorigin-use-credentials.sub.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<html> +<head> +<title>Request URL Modifiers: crossorigin(use-credentials)</title> +<link rel="help" href="https://drafts.csswg.org/css-values-5/#typedef-request-url-modifier-crossorigin-modifier"> +<link rel="author" title="Sam Weinig" href="mailto:weinig@webkit.org"> +<link rel="match" href="../url-image-ref.html"> +<meta name="assert" content="A url with the request URL modifier crossorigin(use-credentials) requires a response with the appropriate headers."> +<style> + .test { + width: 200px; + height: 200px; + background-color: red; + background-image: url("http://{{hosts[][]}}:{{ports[http][1]}}/css/support/1x1-green.png?pipe=header(Access-Control-Allow-Origin,http://{{hosts[][]}}:{{ports[http][0]}})|header(Access-Control-Allow-Credentials,true)" crossorigin(use-credentials)); + } +</style> +</head> +<body> +<p>Test passes if there is a green square.</p> +<div class="test"></div> +</body> +</html> diff --git a/tests/wpt/tests/css/css-values/urls/referrer-policy/no-referrer-when-downgrade/url-image-referrerpolicy-cross-origin.sub.html b/tests/wpt/tests/css/css-values/urls/referrer-policy/no-referrer-when-downgrade/url-image-referrerpolicy-cross-origin.sub.html new file mode 100644 index 00000000000..ce51df67c02 --- /dev/null +++ b/tests/wpt/tests/css/css-values/urls/referrer-policy/no-referrer-when-downgrade/url-image-referrerpolicy-cross-origin.sub.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<head> +<title>Request URL Modifiers: referrerpolicy(no-referrer-when-downgrade)</title> +<link rel="help" href="https://drafts.csswg.org/css-values-5/#typedef-request-url-modifier-referrerpolicy-modifier"> +<link rel="author" title="Sam Weinig" href="mailto:weinig@webkit.org"> +<link rel="match" href="../../url-image-ref.html"> +<meta name="assert" content="A cross origin url with the request URL modifier referrerpolicy(no-referrer-when-downgrade) sends the appropriate referrer header."> +<script src="../../support/image-referrerpolicy.sub.js"></script> +<script> + test_image_referrer_policy({ load_type:`cross-origin`, referrer_policy:`no-referrer-when-downgrade`, expected_referrer:`url`}); +</script> +</head> +<body> +<p>Test passes if there is a green square.</p> +<div class="test"></div> +</body> +</html> diff --git a/tests/wpt/tests/css/css-values/urls/referrer-policy/no-referrer-when-downgrade/url-image-referrerpolicy-same-origin.sub.html b/tests/wpt/tests/css/css-values/urls/referrer-policy/no-referrer-when-downgrade/url-image-referrerpolicy-same-origin.sub.html new file mode 100644 index 00000000000..6860e7386bf --- /dev/null +++ b/tests/wpt/tests/css/css-values/urls/referrer-policy/no-referrer-when-downgrade/url-image-referrerpolicy-same-origin.sub.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<head> +<title>Request URL Modifiers: referrerpolicy(no-referrer-when-downgrade)</title> +<link rel="help" href="https://drafts.csswg.org/css-values-5/#typedef-request-url-modifier-referrerpolicy-modifier"> +<link rel="author" title="Sam Weinig" href="mailto:weinig@webkit.org"> +<link rel="match" href="../../url-image-ref.html"> +<meta name="assert" content="A same origin url with the request URL modifier referrerpolicy(no-referrer-when-downgrade) sends the appropriate referrer header."> +<script src="../../support/image-referrerpolicy.sub.js"></script> +<script> + test_image_referrer_policy({ load_type:`same-origin`, referrer_policy:`no-referrer-when-downgrade`, expected_referrer:`url`}); +</script> +</head> +<body> +<p>Test passes if there is a green square.</p> +<div class="test"></div> +</body> +</html> diff --git a/tests/wpt/tests/css/css-values/urls/referrer-policy/no-referrer/url-image-referrerpolicy-cross-origin.sub.html b/tests/wpt/tests/css/css-values/urls/referrer-policy/no-referrer/url-image-referrerpolicy-cross-origin.sub.html new file mode 100644 index 00000000000..30a52a848a4 --- /dev/null +++ b/tests/wpt/tests/css/css-values/urls/referrer-policy/no-referrer/url-image-referrerpolicy-cross-origin.sub.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<head> +<title>Request URL Modifiers: referrerpolicy(no-referrer)</title> +<link rel="help" href="https://drafts.csswg.org/css-values-5/#typedef-request-url-modifier-referrerpolicy-modifier"> +<link rel="author" title="Sam Weinig" href="mailto:weinig@webkit.org"> +<link rel="match" href="../../url-image-ref.html"> +<meta name="assert" content="A cross origin url with the request URL modifier referrerpolicy(no-referrer) sends the appropriate referrer header."> +<script src="../../support/image-referrerpolicy.sub.js"></script> +<script> + test_image_referrer_policy({ load_type:`cross-origin`, referrer_policy:`no-referrer`, expected_referrer:`none`}); +</script> +</head> +<body> +<p>Test passes if there is a green square.</p> +<div class="test"></div> +</body> +</html> diff --git a/tests/wpt/tests/css/css-values/urls/referrer-policy/no-referrer/url-image-referrerpolicy-same-origin.sub.html b/tests/wpt/tests/css/css-values/urls/referrer-policy/no-referrer/url-image-referrerpolicy-same-origin.sub.html new file mode 100644 index 00000000000..ebbff834b92 --- /dev/null +++ b/tests/wpt/tests/css/css-values/urls/referrer-policy/no-referrer/url-image-referrerpolicy-same-origin.sub.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<head> +<title>Request URL Modifiers: referrerpolicy(no-referrer)</title> +<link rel="help" href="https://drafts.csswg.org/css-values-5/#typedef-request-url-modifier-referrerpolicy-modifier"> +<link rel="author" title="Sam Weinig" href="mailto:weinig@webkit.org"> +<link rel="match" href="../../url-image-ref.html"> +<meta name="assert" content="A same origin url with the request URL modifier referrerpolicy(no-referrer) sends the appropriate referrer header."> +<script src="../../support/image-referrerpolicy.sub.js"></script> +<script> + test_image_referrer_policy({ load_type:`same-origin`, referrer_policy:`no-referrer`, expected_referrer:`none`}); +</script> +</head> +<body> +<p>Test passes if there is a green square.</p> +<div class="test"></div> +</body> +</html> diff --git a/tests/wpt/tests/css/css-values/urls/referrer-policy/origin-when-cross-origin/url-image-referrerpolicy-cross-origin.sub.html b/tests/wpt/tests/css/css-values/urls/referrer-policy/origin-when-cross-origin/url-image-referrerpolicy-cross-origin.sub.html new file mode 100644 index 00000000000..6285f2f0e5d --- /dev/null +++ b/tests/wpt/tests/css/css-values/urls/referrer-policy/origin-when-cross-origin/url-image-referrerpolicy-cross-origin.sub.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<head> +<title>Request URL Modifiers: referrerpolicy(origin-when-cross-origin)</title> +<link rel="help" href="https://drafts.csswg.org/css-values-5/#typedef-request-url-modifier-referrerpolicy-modifier"> +<link rel="author" title="Sam Weinig" href="mailto:weinig@webkit.org"> +<link rel="match" href="../../url-image-ref.html"> +<meta name="assert" content="A cross origin url with the request URL modifier referrerpolicy(origin-when-cross-origin) sends the appropriate referrer header."> +<script src="../../support/image-referrerpolicy.sub.js"></script> +<script> + test_image_referrer_policy({ load_type:`cross-origin`, referrer_policy:`origin-when-cross-origin`, expected_referrer:`origin`}); +</script> +</head> +<body> +<p>Test passes if there is a green square.</p> +<div class="test"></div> +</body> +</html> diff --git a/tests/wpt/tests/css/css-values/urls/referrer-policy/origin-when-cross-origin/url-image-referrerpolicy-same-origin.sub.html b/tests/wpt/tests/css/css-values/urls/referrer-policy/origin-when-cross-origin/url-image-referrerpolicy-same-origin.sub.html new file mode 100644 index 00000000000..eb4e081e940 --- /dev/null +++ b/tests/wpt/tests/css/css-values/urls/referrer-policy/origin-when-cross-origin/url-image-referrerpolicy-same-origin.sub.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<head> +<title>Request URL Modifiers: referrerpolicy(origin-when-cross-origin)</title> +<link rel="help" href="https://drafts.csswg.org/css-values-5/#typedef-request-url-modifier-referrerpolicy-modifier"> +<link rel="author" title="Sam Weinig" href="mailto:weinig@webkit.org"> +<link rel="match" href="../../url-image-ref.html"> +<meta name="assert" content="A same origin url with the request URL modifier referrerpolicy(origin-when-cross-origin) sends the appropriate referrer header."> +<script src="../../support/image-referrerpolicy.sub.js"></script> +<script> + test_image_referrer_policy({ load_type:`same-origin`, referrer_policy:`origin-when-cross-origin`, expected_referrer:`url`}); +</script> +</head> +<body> +<p>Test passes if there is a green square.</p> +<div class="test"></div> +</body> +</html> diff --git a/tests/wpt/tests/css/css-values/urls/referrer-policy/origin/url-image-referrerpolicy-cross-origin.sub.html b/tests/wpt/tests/css/css-values/urls/referrer-policy/origin/url-image-referrerpolicy-cross-origin.sub.html new file mode 100644 index 00000000000..14a8172d6e3 --- /dev/null +++ b/tests/wpt/tests/css/css-values/urls/referrer-policy/origin/url-image-referrerpolicy-cross-origin.sub.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<head> +<title>Request URL Modifiers: referrerpolicy(origin)</title> +<link rel="help" href="https://drafts.csswg.org/css-values-5/#typedef-request-url-modifier-referrerpolicy-modifier"> +<link rel="author" title="Sam Weinig" href="mailto:weinig@webkit.org"> +<link rel="match" href="../../url-image-ref.html"> +<meta name="assert" content="A cross origin url with the request URL modifier referrerpolicy(origin) sends the appropriate referrer header."> +<script src="../../support/image-referrerpolicy.sub.js"></script> +<script> + test_image_referrer_policy({ load_type:`cross-origin`, referrer_policy:`origin`, expected_referrer:`origin`}); +</script> +</head> +<body> +<p>Test passes if there is a green square.</p> +<div class="test"></div> +</body> +</html> diff --git a/tests/wpt/tests/css/css-values/urls/referrer-policy/origin/url-image-referrerpolicy-same-origin.sub.html b/tests/wpt/tests/css/css-values/urls/referrer-policy/origin/url-image-referrerpolicy-same-origin.sub.html new file mode 100644 index 00000000000..1cc6f011c12 --- /dev/null +++ b/tests/wpt/tests/css/css-values/urls/referrer-policy/origin/url-image-referrerpolicy-same-origin.sub.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<head> +<title>Request URL Modifiers: referrerpolicy(origin)</title> +<link rel="help" href="https://drafts.csswg.org/css-values-5/#typedef-request-url-modifier-referrerpolicy-modifier"> +<link rel="author" title="Sam Weinig" href="mailto:weinig@webkit.org"> +<link rel="match" href="../../url-image-ref.html"> +<meta name="assert" content="A same origin url with the request URL modifier referrerpolicy(origin) sends the appropriate referrer header."> +<script src="../../support/image-referrerpolicy.sub.js"></script> +<script> + test_image_referrer_policy({ load_type:`same-origin`, referrer_policy:`origin`, expected_referrer:`origin`}); +</script> +</head> +<body> +<p>Test passes if there is a green square.</p> +<div class="test"></div> +</body> +</html> diff --git a/tests/wpt/tests/css/css-values/urls/referrer-policy/same-origin/url-image-referrerpolicy-cross-origin.sub.html b/tests/wpt/tests/css/css-values/urls/referrer-policy/same-origin/url-image-referrerpolicy-cross-origin.sub.html new file mode 100644 index 00000000000..de23eb1f095 --- /dev/null +++ b/tests/wpt/tests/css/css-values/urls/referrer-policy/same-origin/url-image-referrerpolicy-cross-origin.sub.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<head> +<title>Request URL Modifiers: referrerpolicy(same-origin)</title> +<link rel="help" href="https://drafts.csswg.org/css-values-5/#typedef-request-url-modifier-referrerpolicy-modifier"> +<link rel="author" title="Sam Weinig" href="mailto:weinig@webkit.org"> +<link rel="match" href="../../url-image-ref.html"> +<meta name="assert" content="A cross origin url with the request URL modifier referrerpolicy(same-origin) sends the appropriate referrer header."> +<script src="../../support/image-referrerpolicy.sub.js"></script> +<script> + test_image_referrer_policy({ load_type:`cross-origin`, referrer_policy:`same-origin`, expected_referrer:`none`}); +</script> +</head> +<body> +<p>Test passes if there is a green square.</p> +<div class="test"></div> +</body> +</html> diff --git a/tests/wpt/tests/css/css-values/urls/referrer-policy/same-origin/url-image-referrerpolicy-same-origin.sub.html b/tests/wpt/tests/css/css-values/urls/referrer-policy/same-origin/url-image-referrerpolicy-same-origin.sub.html new file mode 100644 index 00000000000..866affc6d9f --- /dev/null +++ b/tests/wpt/tests/css/css-values/urls/referrer-policy/same-origin/url-image-referrerpolicy-same-origin.sub.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<head> +<title>Request URL Modifiers: referrerpolicy(same-origin)</title> +<link rel="help" href="https://drafts.csswg.org/css-values-5/#typedef-request-url-modifier-referrerpolicy-modifier"> +<link rel="author" title="Sam Weinig" href="mailto:weinig@webkit.org"> +<link rel="match" href="../../url-image-ref.html"> +<meta name="assert" content="A same origin url with the request URL modifier referrerpolicy(same-origin) sends the appropriate referrer header."> +<script src="../../support/image-referrerpolicy.sub.js"></script> +<script> + test_image_referrer_policy({ load_type:`same-origin`, referrer_policy:`same-origin`, expected_referrer:`url`}); +</script> +</head> +<body> +<p>Test passes if there is a green square.</p> +<div class="test"></div> +</body> +</html> diff --git a/tests/wpt/tests/css/css-values/urls/referrer-policy/strict-origin-when-cross-origin/url-image-referrerpolicy-cross-origin.sub.html b/tests/wpt/tests/css/css-values/urls/referrer-policy/strict-origin-when-cross-origin/url-image-referrerpolicy-cross-origin.sub.html new file mode 100644 index 00000000000..1e66fbf659f --- /dev/null +++ b/tests/wpt/tests/css/css-values/urls/referrer-policy/strict-origin-when-cross-origin/url-image-referrerpolicy-cross-origin.sub.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<head> +<title>Request URL Modifiers: referrerpolicy(strict-origin-when-cross-origin)</title> +<link rel="help" href="https://drafts.csswg.org/css-values-5/#typedef-request-url-modifier-referrerpolicy-modifier"> +<link rel="author" title="Sam Weinig" href="mailto:weinig@webkit.org"> +<link rel="match" href="../../url-image-ref.html"> +<meta name="assert" content="A cross origin url with the request URL modifier referrerpolicy(strict-origin-when-cross-origin) sends the appropriate referrer header."> +<script src="../../support/image-referrerpolicy.sub.js"></script> +<script> + test_image_referrer_policy({ load_type:`cross-origin`, referrer_policy:`strict-origin-when-cross-origin`, expected_referrer:`origin`}); +</script> +</head> +<body> +<p>Test passes if there is a green square.</p> +<div class="test"></div> +</body> +</html> diff --git a/tests/wpt/tests/css/css-values/urls/referrer-policy/strict-origin-when-cross-origin/url-image-referrerpolicy-same-origin.sub.html b/tests/wpt/tests/css/css-values/urls/referrer-policy/strict-origin-when-cross-origin/url-image-referrerpolicy-same-origin.sub.html new file mode 100644 index 00000000000..57f5351a5a1 --- /dev/null +++ b/tests/wpt/tests/css/css-values/urls/referrer-policy/strict-origin-when-cross-origin/url-image-referrerpolicy-same-origin.sub.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<head> +<title>Request URL Modifiers: referrerpolicy(strict-origin-when-cross-origin)</title> +<link rel="help" href="https://drafts.csswg.org/css-values-5/#typedef-request-url-modifier-referrerpolicy-modifier"> +<link rel="author" title="Sam Weinig" href="mailto:weinig@webkit.org"> +<link rel="match" href="../../url-image-ref.html"> +<meta name="assert" content="A same origin url with the request URL modifier referrerpolicy(strict-origin-when-cross-origin) sends the appropriate referrer header."> +<script src="../../support/image-referrerpolicy.sub.js"></script> +<script> + test_image_referrer_policy({ load_type:`same-origin`, referrer_policy:`strict-origin-when-cross-origin`, expected_referrer:`url`}); +</script> +</head> +<body> +<p>Test passes if there is a green square.</p> +<div class="test"></div> +</body> +</html> diff --git a/tests/wpt/tests/css/css-values/urls/referrer-policy/strict-origin/url-image-referrerpolicy-cross-origin.sub.html b/tests/wpt/tests/css/css-values/urls/referrer-policy/strict-origin/url-image-referrerpolicy-cross-origin.sub.html new file mode 100644 index 00000000000..b17ac4b4ef7 --- /dev/null +++ b/tests/wpt/tests/css/css-values/urls/referrer-policy/strict-origin/url-image-referrerpolicy-cross-origin.sub.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<head> +<title>Request URL Modifiers: referrerpolicy(strict-origin)</title> +<link rel="help" href="https://drafts.csswg.org/css-values-5/#typedef-request-url-modifier-referrerpolicy-modifier"> +<link rel="author" title="Sam Weinig" href="mailto:weinig@webkit.org"> +<link rel="match" href="../../url-image-ref.html"> +<meta name="assert" content="A cross origin url with the request URL modifier referrerpolicy(strict-origin) sends the appropriate referrer header."> +<script src="../../support/image-referrerpolicy.sub.js"></script> +<script> + test_image_referrer_policy({ load_type:`cross-origin`, referrer_policy:`strict-origin`, expected_referrer:`origin`}); +</script> +</head> +<body> +<p>Test passes if there is a green square.</p> +<div class="test"></div> +</body> +</html> diff --git a/tests/wpt/tests/css/css-values/urls/referrer-policy/strict-origin/url-image-referrerpolicy-same-origin.sub.html b/tests/wpt/tests/css/css-values/urls/referrer-policy/strict-origin/url-image-referrerpolicy-same-origin.sub.html new file mode 100644 index 00000000000..dadf1c58d52 --- /dev/null +++ b/tests/wpt/tests/css/css-values/urls/referrer-policy/strict-origin/url-image-referrerpolicy-same-origin.sub.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<head> +<title>Request URL Modifiers: referrerpolicy(strict-origin)</title> +<link rel="help" href="https://drafts.csswg.org/css-values-5/#typedef-request-url-modifier-referrerpolicy-modifier"> +<link rel="author" title="Sam Weinig" href="mailto:weinig@webkit.org"> +<link rel="match" href="../../url-image-ref.html"> +<meta name="assert" content="A same origin url with the request URL modifier referrerpolicy(strict-origin) sends the appropriate referrer header."> +<script src="../../support/image-referrerpolicy.sub.js"></script> +<script> + test_image_referrer_policy({ load_type:`same-origin`, referrer_policy:`strict-origin`, expected_referrer:`origin`}); +</script> +</head> +<body> +<p>Test passes if there is a green square.</p> +<div class="test"></div> +</body> +</html> diff --git a/tests/wpt/tests/css/css-values/urls/referrer-policy/unsafe-url/url-image-referrerpolicy-cross-origin.sub.html b/tests/wpt/tests/css/css-values/urls/referrer-policy/unsafe-url/url-image-referrerpolicy-cross-origin.sub.html new file mode 100644 index 00000000000..dc5a3d51435 --- /dev/null +++ b/tests/wpt/tests/css/css-values/urls/referrer-policy/unsafe-url/url-image-referrerpolicy-cross-origin.sub.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<head> +<title>Request URL Modifiers: referrerpolicy(unsafe-url)</title> +<link rel="help" href="https://drafts.csswg.org/css-values-5/#typedef-request-url-modifier-referrerpolicy-modifier"> +<link rel="author" title="Sam Weinig" href="mailto:weinig@webkit.org"> +<link rel="match" href="../../url-image-ref.html"> +<meta name="assert" content="A cross origin url with the request URL modifier referrerpolicy(unsafe-url) sends the appropriate referrer header."> +<script src="../../support/image-referrerpolicy.sub.js"></script> +<script> + test_image_referrer_policy({ load_type:`cross-origin`, referrer_policy:`unsafe-url`, expected_referrer:`url`}); +</script> +</head> +<body> +<p>Test passes if there is a green square.</p> +<div class="test"></div> +</body> +</html> diff --git a/tests/wpt/tests/css/css-values/urls/referrer-policy/unsafe-url/url-image-referrerpolicy-same-origin.sub.html b/tests/wpt/tests/css/css-values/urls/referrer-policy/unsafe-url/url-image-referrerpolicy-same-origin.sub.html new file mode 100644 index 00000000000..7eaba535f14 --- /dev/null +++ b/tests/wpt/tests/css/css-values/urls/referrer-policy/unsafe-url/url-image-referrerpolicy-same-origin.sub.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<head> +<title>Request URL Modifiers: referrerpolicy(unsafe-url)</title> +<link rel="help" href="https://drafts.csswg.org/css-values-5/#typedef-request-url-modifier-referrerpolicy-modifier"> +<link rel="author" title="Sam Weinig" href="mailto:weinig@webkit.org"> +<link rel="match" href="../../url-image-ref.html"> +<meta name="assert" content="A same origin url with the request URL modifier referrerpolicy(unsafe-url) sends the appropriate referrer header."> +<script src="../../support/image-referrerpolicy.sub.js"></script> +<script> + test_image_referrer_policy({ load_type:`same-origin`, referrer_policy:`unsafe-url`, expected_referrer:`url`}); +</script> +</head> +<body> +<p>Test passes if there is a green square.</p> +<div class="test"></div> +</body> +</html> diff --git a/tests/wpt/tests/css/css-values/urls/support/1x1-green.png b/tests/wpt/tests/css/css-values/urls/support/1x1-green.png Binary files differnew file mode 100644 index 00000000000..b98ca0ba0a0 --- /dev/null +++ b/tests/wpt/tests/css/css-values/urls/support/1x1-green.png diff --git a/tests/wpt/tests/css/css-values/urls/support/1x1-navy.png b/tests/wpt/tests/css/css-values/urls/support/1x1-navy.png Binary files differnew file mode 100644 index 00000000000..9b9a03955ba --- /dev/null +++ b/tests/wpt/tests/css/css-values/urls/support/1x1-navy.png diff --git a/tests/wpt/tests/css/css-values/urls/support/1x1-red.png b/tests/wpt/tests/css/css-values/urls/support/1x1-red.png Binary files differnew file mode 100644 index 00000000000..6bd73ac1018 --- /dev/null +++ b/tests/wpt/tests/css/css-values/urls/support/1x1-red.png diff --git a/tests/wpt/tests/css/css-values/urls/support/image-referrerpolicy.py b/tests/wpt/tests/css/css-values/urls/support/image-referrerpolicy.py new file mode 100644 index 00000000000..cff09165f10 --- /dev/null +++ b/tests/wpt/tests/css/css-values/urls/support/image-referrerpolicy.py @@ -0,0 +1,41 @@ +import os.path + +from wptserve.utils import isomorphic_decode + +def main(request, response): + origin = request.GET[b'origin'] + url = request.GET[b'url'] + expected_referrer = request.GET[b'expected_referrer'] + actual_referrer = request.headers.get(b'referer', b'') + + if expected_referrer == b'none': + if actual_referrer == b'': + body = open(os.path.join(os.path.dirname(isomorphic_decode(__file__)), u"1x1-green.png"), u"rb").read() + else: + body = open(os.path.join(os.path.dirname(isomorphic_decode(__file__)), u"1x1-red.png"), u"rb").read() + elif expected_referrer == b'origin': + if actual_referrer == origin: + body = open(os.path.join(os.path.dirname(isomorphic_decode(__file__)), u"1x1-green.png"), u"rb").read() + else: + body = open(os.path.join(os.path.dirname(isomorphic_decode(__file__)), u"1x1-red.png"), u"rb").read() + elif expected_referrer == b'url': + if actual_referrer == url: + body = open(os.path.join(os.path.dirname(isomorphic_decode(__file__)), u"1x1-green.png"), u"rb").read() + else: + body = open(os.path.join(os.path.dirname(isomorphic_decode(__file__)), u"1x1-red.png"), u"rb").read() + else: + # Return neither red nor green if there is an unexpected "expected_referrer". + body = open(os.path.join(os.path.dirname(isomorphic_decode(__file__)), u"1x1-navy.png"), u"rb").read() + + response.add_required_headers = False + response.writer.write_status(200) + + if b'corp' in request.GET: + response.writer.write_header(b"cross-origin-resource-policy", request.GET[b'corp']) + if b'acao' in request.GET: + response.writer.write_header(b"access-control-allow-origin", request.GET[b'acao']) + response.writer.write_header(b"content-length", len(body)) + response.writer.write_header(b"cache-control", b"no-cache; must-revalidate") + response.writer.end_headers() + + response.writer.write(body) diff --git a/tests/wpt/tests/css/css-values/urls/support/image-referrerpolicy.sub.js b/tests/wpt/tests/css/css-values/urls/support/image-referrerpolicy.sub.js new file mode 100644 index 00000000000..4fc9d46218f --- /dev/null +++ b/tests/wpt/tests/css/css-values/urls/support/image-referrerpolicy.sub.js @@ -0,0 +1,19 @@ +function make_test_url(type, policy, expected) { + if (type == "cross-origin") + return `url("http://{{hosts[][]}}:{{ports[http][1]}}/css/css-values/urls/support/image-referrerpolicy.py?expected_referrer=${expected}&origin=${location.origin}/&url=${document.URL}"${policy ? ` referrerpolicy(${policy})` : ``})`; + if (type == "same-origin") + return `url("http://{{hosts[][]}}:{{ports[http][0]}}/css/css-values/urls/support/image-referrerpolicy.py?expected_referrer=${expected}&origin=${location.origin}/&url=${document.URL}"${policy ? ` referrerpolicy(${policy})` : ``})`; + throw `Unknown type: ${type}`; +} + +function test_image_referrer_policy(descriptor) { + var style = document.createElement("style"); + style.innerHTML = ` + .test { + width: 200px; + height: 200px; + background-color: blue; + background-image: ${make_test_url(descriptor.load_type, descriptor.referrer_policy, descriptor.expected_referrer)}; + };`; + document.head.append(style); +} diff --git a/tests/wpt/tests/css/css-values/urls/url-image-ref.html b/tests/wpt/tests/css/css-values/urls/url-image-ref.html new file mode 100644 index 00000000000..a56c789f147 --- /dev/null +++ b/tests/wpt/tests/css/css-values/urls/url-image-ref.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<html> +<head> +<style> + .test { + width: 200px; + height: 200px; + background-color: green; + } +</style> +</head> +<body> +<p>Test passes if there is a green square.</p> +<div class="test"></div> +</body> +</html> diff --git a/tests/wpt/tests/css/css-values/urls/url-request-modifiers-computed.sub.html b/tests/wpt/tests/css/css-values/urls/url-request-modifiers-computed.sub.html new file mode 100644 index 00000000000..bc8c4ad95df --- /dev/null +++ b/tests/wpt/tests/css/css-values/urls/url-request-modifiers-computed.sub.html @@ -0,0 +1,45 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-values-5/#request-url-modifiers"> +<link rel="author" title="Sam Weinig" href="mailto:weinig@webkit.org"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/computed-testcommon.js"></script> +<div id="container" style="font-size: 20"> + <div id="target"></div> +</div> +<script> + +// No modifiers +test_computed_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png")'); + +// <crossorigin-modifier> = crossorigin(anonymous | use-credentials) +test_computed_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" crossorigin(anonymous))'); +test_computed_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" crossorigin(use-credentials))'); + +// <integrity-modifier> = integrity(<string>) +test_computed_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" integrity("sha384-foobar"))'); +test_computed_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" integrity(""))'); + +// <referrerpolicy-modifier> = referrerpolicy(no-referrer | no-referrer-when-downgrade | same-origin | origin | strict-origin | origin-when-cross-origin | strict-origin-when-cross-origin | unsafe-url) +test_computed_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" referrerpolicy(no-referrer))'); +test_computed_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" referrerpolicy(no-referrer-when-downgrade))'); +test_computed_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" referrerpolicy(same-origin))'); +test_computed_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" referrerpolicy(origin))'); +test_computed_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" referrerpolicy(strict-origin))'); +test_computed_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" referrerpolicy(origin-when-cross-origin))'); +test_computed_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" referrerpolicy(strict-origin-when-cross-origin))'); +test_computed_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" referrerpolicy(unsafe-url))'); + +// Multiple modifiers +test_computed_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" crossorigin(anonymous) integrity("sha384-foobar"))'); +test_computed_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" integrity("sha384-foobar") crossorigin(anonymous))', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" crossorigin(anonymous) integrity("sha384-foobar"))'); +test_computed_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" integrity("sha384-foobar") referrerpolicy(no-referrer))'); +test_computed_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" referrerpolicy(no-referrer) integrity("sha384-foobar"))', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" integrity("sha384-foobar") referrerpolicy(no-referrer))'); +test_computed_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" crossorigin(anonymous) referrerpolicy(no-referrer))'); +test_computed_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" referrerpolicy(no-referrer) crossorigin(anonymous))', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" crossorigin(anonymous) referrerpolicy(no-referrer))'); +test_computed_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" crossorigin(anonymous) integrity("sha384-foobar") referrerpolicy(no-referrer))'); +test_computed_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" integrity("sha384-foobar") referrerpolicy(no-referrer) crossorigin(anonymous))', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" crossorigin(anonymous) integrity("sha384-foobar") referrerpolicy(no-referrer))'); +test_computed_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" referrerpolicy(no-referrer) crossorigin(anonymous) integrity("sha384-foobar"))', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" crossorigin(anonymous) integrity("sha384-foobar") referrerpolicy(no-referrer))'); +test_computed_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" referrerpolicy(no-referrer) integrity("sha384-foobar") crossorigin(anonymous))', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" crossorigin(anonymous) integrity("sha384-foobar") referrerpolicy(no-referrer))'); + +</script> diff --git a/tests/wpt/tests/css/css-values/urls/url-request-modifiers-invalid.sub.html b/tests/wpt/tests/css/css-values/urls/url-request-modifiers-invalid.sub.html new file mode 100644 index 00000000000..c30edfbaeaa --- /dev/null +++ b/tests/wpt/tests/css/css-values/urls/url-request-modifiers-invalid.sub.html @@ -0,0 +1,41 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-values-5/#request-url-modifiers"> +<link rel="author" title="Sam Weinig" href="mailto:weinig@webkit.org"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +<script> + +test_invalid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" crossorigin())'); +test_invalid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" crossorigin(,))'); +test_invalid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" crossorigin(anonymous,))'); +test_invalid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" crossorigin(,anonymous))'); +test_invalid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" crossorigin(anonymous foobar))'); +test_invalid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" crossorigin(anonymous) cross-origin(anonymous))'); +test_invalid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" crossorigin(anonymous) cross-origin(use-credentials))'); +test_invalid_value('background-image', 'url(crossorigin(anonymous) "http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png")'); +test_invalid_value('background-image', '"http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" crossorigin(anonymous)'); + +test_invalid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" integrity())'); +test_invalid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" integrity(,))'); +test_invalid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" integrity("sha384-foobar",))'); +test_invalid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" integrity(,"sha384-foobar"))'); +test_invalid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" integrity("sha384-foobar" foobar))'); +test_invalid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" integrity(sha384-foobar))'); +test_invalid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" integrity("sha384-foobar") integrity("sha384-foobar"))'); +test_invalid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" integrity("sha384-foobar") integrity("sha384-barbaz"))'); +test_invalid_value('background-image', 'url(integrity("sha384-foobar") "http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png")'); +test_invalid_value('background-image', '"http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" integrity("sha384-foobar")'); + +test_invalid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" referrerpolicy())'); +test_invalid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" referrerpolicy(,))'); +test_invalid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" referrerpolicy(no-referrer,))'); +test_invalid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" referrerpolicy(,no-referrer))'); +test_invalid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" referrerpolicy(no-referrer foobar))'); +test_invalid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" referrerpolicy(no-referrer same-origin))'); +test_invalid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" referrerpolicy(no-referrer) referrerpolicy(no-referrer))'); +test_invalid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" referrerpolicy(no-referrer) referrerpolicy(same-origin))'); +test_invalid_value('background-image', 'url(referrerpolicy(no-referrer) "http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png")'); +test_invalid_value('background-image', '"http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" referrerpolicy(no-referrer)'); + +</script> diff --git a/tests/wpt/tests/css/css-values/urls/url-request-modifiers-serialize.sub.html b/tests/wpt/tests/css/css-values/urls/url-request-modifiers-serialize.sub.html new file mode 100644 index 00000000000..cca9f2ccf9b --- /dev/null +++ b/tests/wpt/tests/css/css-values/urls/url-request-modifiers-serialize.sub.html @@ -0,0 +1,43 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-values-5/#request-url-modifiers"> +<link rel="author" title="Sam Weinig" href="mailto:weinig@webkit.org"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +<div id=target></div> +<script> + +// No modifiers +test_valid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png")'); + +// <crossorigin-modifier> = crossorigin(anonymous | use-credentials) +test_valid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" crossorigin(anonymous))'); +test_valid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" crossorigin(use-credentials))'); + +// <integrity-modifier> = integrity(<string>) +test_valid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" integrity("sha384-foobar"))'); +test_valid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" integrity(""))'); + +// <referrerpolicy-modifier> = referrerpolicy(no-referrer | no-referrer-when-downgrade | same-origin | origin | strict-origin | origin-when-cross-origin | strict-origin-when-cross-origin | unsafe-url) +test_valid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" referrerpolicy(no-referrer))'); +test_valid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" referrerpolicy(no-referrer-when-downgrade))'); +test_valid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" referrerpolicy(same-origin))'); +test_valid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" referrerpolicy(origin))'); +test_valid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" referrerpolicy(strict-origin))'); +test_valid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" referrerpolicy(origin-when-cross-origin))'); +test_valid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" referrerpolicy(strict-origin-when-cross-origin))'); +test_valid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" referrerpolicy(unsafe-url))'); + +// Multiple modifiers +test_valid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" crossorigin(anonymous) integrity("sha384-foobar"))'); +test_valid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" integrity("sha384-foobar") crossorigin(anonymous))', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" crossorigin(anonymous) integrity("sha384-foobar"))'); +test_valid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" integrity("sha384-foobar") referrerpolicy(no-referrer))'); +test_valid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" referrerpolicy(no-referrer) integrity("sha384-foobar"))', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" integrity("sha384-foobar") referrerpolicy(no-referrer))'); +test_valid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" crossorigin(anonymous) referrerpolicy(no-referrer))'); +test_valid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" referrerpolicy(no-referrer) crossorigin(anonymous))', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" crossorigin(anonymous) referrerpolicy(no-referrer))'); +test_valid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" crossorigin(anonymous) integrity("sha384-foobar") referrerpolicy(no-referrer))'); +test_valid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" integrity("sha384-foobar") referrerpolicy(no-referrer) crossorigin(anonymous))', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" crossorigin(anonymous) integrity("sha384-foobar") referrerpolicy(no-referrer))'); +test_valid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" referrerpolicy(no-referrer) crossorigin(anonymous) integrity("sha384-foobar"))', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" crossorigin(anonymous) integrity("sha384-foobar") referrerpolicy(no-referrer))'); +test_valid_value('background-image', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" referrerpolicy(no-referrer) integrity("sha384-foobar") crossorigin(anonymous))', 'url("http://{{hosts[][]}}:{{ports[http][0]}}/css/support/1x1-green.png" crossorigin(anonymous) integrity("sha384-foobar") referrerpolicy(no-referrer))'); + +</script> diff --git a/tests/wpt/tests/css/css-view-transitions/nested/adjust-transform-with-scale.tentative.html b/tests/wpt/tests/css/css-view-transitions/nested/adjust-transform-with-scale.tentative.html index e58a7f36300..a1177e7801d 100644 --- a/tests/wpt/tests/css/css-view-transitions/nested/adjust-transform-with-scale.tentative.html +++ b/tests/wpt/tests/css/css-view-transitions/nested/adjust-transform-with-scale.tentative.html @@ -4,6 +4,7 @@ <meta name=fuzzy content="maxDifference=0-255; totalPixels=0-1250"> <link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/"> <link rel="match" href="nested-ref-100.html"> +<link rel=stylesheet href="resources/pause-view-transitions.css"></link> <script src="/common/reftest-wait.js"></script> <script src="resources/compute-test.js"></script> <style> @@ -36,4 +37,4 @@ <div class="parent"> <div class="child"></div> </div> -</body>
\ No newline at end of file +</body> diff --git a/tests/wpt/tests/css/css-view-transitions/nested/adjust-transform.tentative.html b/tests/wpt/tests/css/css-view-transitions/nested/adjust-transform.tentative.html index 915bd22e420..54b5f494419 100644 --- a/tests/wpt/tests/css/css-view-transitions/nested/adjust-transform.tentative.html +++ b/tests/wpt/tests/css/css-view-transitions/nested/adjust-transform.tentative.html @@ -4,6 +4,7 @@ <meta name=fuzzy content="maxDifference=0-255; totalPixels=0-515"> <link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/"> <link rel="match" href="nested-ref-100.html"> +<link rel=stylesheet href="resources/pause-view-transitions.css"></link> <script src="/common/reftest-wait.js"></script> <script src="resources/compute-test.js"></script> <style> diff --git a/tests/wpt/tests/css/css-view-transitions/nested/compute-explicit-name-direct.tentative.html b/tests/wpt/tests/css/css-view-transitions/nested/compute-explicit-name-direct.tentative.html index d0b3e0f16d6..31f49979e8e 100644 --- a/tests/wpt/tests/css/css-view-transitions/nested/compute-explicit-name-direct.tentative.html +++ b/tests/wpt/tests/css/css-view-transitions/nested/compute-explicit-name-direct.tentative.html @@ -5,10 +5,11 @@ <link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/"> <link rel="match" href="nested-ref.html"> <link rel=stylesheet href="resources/compute-common.css"></link> +<link rel=stylesheet href="resources/pause-view-transitions.css"></link> <script src="/common/reftest-wait.js"></script> <script src="resources/compute-test.js"></script> <body> <div class="green"> <div class="test green-ref"></div> </div> -</body>
\ No newline at end of file +</body> diff --git a/tests/wpt/tests/css/css-view-transitions/nested/compute-explicit-name-nested-vt-names.tentative.html b/tests/wpt/tests/css/css-view-transitions/nested/compute-explicit-name-nested-vt-names.tentative.html index dcf56b500f4..0be0f3c56aa 100644 --- a/tests/wpt/tests/css/css-view-transitions/nested/compute-explicit-name-nested-vt-names.tentative.html +++ b/tests/wpt/tests/css/css-view-transitions/nested/compute-explicit-name-nested-vt-names.tentative.html @@ -5,6 +5,7 @@ <link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/"> <link rel="match" href="nested-ref.html"> <link rel=stylesheet href="resources/compute-common.css"></link> +<link rel=stylesheet href="resources/pause-view-transitions.css"></link> <script src="/common/reftest-wait.js"></script> <script src="resources/compute-test.js"></script> <style> @@ -24,4 +25,4 @@ <div class="test green-ref"></div> </div> </div> -</body>
\ No newline at end of file +</body> diff --git a/tests/wpt/tests/css/css-view-transitions/nested/compute-explicit-name-nested.tentative.html b/tests/wpt/tests/css/css-view-transitions/nested/compute-explicit-name-nested.tentative.html index ad47461b142..f455210cce2 100644 --- a/tests/wpt/tests/css/css-view-transitions/nested/compute-explicit-name-nested.tentative.html +++ b/tests/wpt/tests/css/css-view-transitions/nested/compute-explicit-name-nested.tentative.html @@ -5,6 +5,7 @@ <link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/"> <link rel="match" href="nested-ref.html"> <link rel=stylesheet href="resources/compute-common.css"></link> +<link rel=stylesheet href="resources/pause-view-transitions.css"></link> <script src="/common/reftest-wait.js"></script> <script src="resources/compute-test.js"></script> <body> @@ -13,4 +14,4 @@ <div class="test green-ref"></div> </div> </div> -</body>
\ No newline at end of file +</body> diff --git a/tests/wpt/tests/css/css-view-transitions/nested/compute-explicit-name-non-ancestor.tentative.html b/tests/wpt/tests/css/css-view-transitions/nested/compute-explicit-name-non-ancestor.tentative.html index 8a2c69147ad..f16628908d2 100644 --- a/tests/wpt/tests/css/css-view-transitions/nested/compute-explicit-name-non-ancestor.tentative.html +++ b/tests/wpt/tests/css/css-view-transitions/nested/compute-explicit-name-non-ancestor.tentative.html @@ -5,10 +5,11 @@ <link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/"> <link rel="match" href="nested-ref.html"> <link rel=stylesheet href="resources/compute-common.css"></link> +<link rel=stylesheet href="resources/pause-view-transitions.css"></link> <script src="/common/reftest-wait.js"></script> <script src="resources/compute-test.js"></script> <body> <div class="red"></div> <!-- this would appear as green because it inherits from the ::view-transition-group --> <div class="test red-ref"></div> -</body>
\ No newline at end of file +</body> diff --git a/tests/wpt/tests/css/css-view-transitions/nested/compute-explicit-name-non-existent.tentative.html b/tests/wpt/tests/css/css-view-transitions/nested/compute-explicit-name-non-existent.tentative.html index 2e3d71f96d1..090637b8e63 100644 --- a/tests/wpt/tests/css/css-view-transitions/nested/compute-explicit-name-non-existent.tentative.html +++ b/tests/wpt/tests/css/css-view-transitions/nested/compute-explicit-name-non-existent.tentative.html @@ -5,9 +5,10 @@ <link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/"> <link rel="match" href="nested-ref.html"> <link rel=stylesheet href="resources/compute-common.css"></link> +<link rel=stylesheet href="resources/pause-view-transitions.css"></link> <script src="/common/reftest-wait.js"></script> <script src="resources/compute-test.js"></script> <body> <!-- this would appear as green because it inherits from the ::view-transition-group --> <div class="test red-ref"></div> -</body>
\ No newline at end of file +</body> diff --git a/tests/wpt/tests/css/css-view-transitions/nested/compute-explicit-name-self.tentative.html b/tests/wpt/tests/css/css-view-transitions/nested/compute-explicit-name-self.tentative.html index 09aa0f65331..63f3a3523e3 100644 --- a/tests/wpt/tests/css/css-view-transitions/nested/compute-explicit-name-self.tentative.html +++ b/tests/wpt/tests/css/css-view-transitions/nested/compute-explicit-name-self.tentative.html @@ -5,8 +5,9 @@ <link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/"> <link rel="match" href="nested-ref.html"> <link rel=stylesheet href="resources/compute-common.css"></link> +<link rel=stylesheet href="resources/pause-view-transitions.css"></link> <script src="/common/reftest-wait.js"></script> <script src="resources/compute-test.js"></script> <body> <div class="test test-ref"></div> -</body>
\ No newline at end of file +</body> diff --git a/tests/wpt/tests/css/css-view-transitions/nested/contain-direct.tentative.html b/tests/wpt/tests/css/css-view-transitions/nested/contain-direct.tentative.html index 8cc856883df..a90a843b5ee 100644 --- a/tests/wpt/tests/css/css-view-transitions/nested/contain-direct.tentative.html +++ b/tests/wpt/tests/css/css-view-transitions/nested/contain-direct.tentative.html @@ -5,6 +5,7 @@ <link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/"> <link rel="match" href="nested-ref.html"> <link rel=stylesheet href="resources/compute-common.css"></link> +<link rel=stylesheet href="resources/pause-view-transitions.css"></link> <script src="/common/reftest-wait.js"></script> <script src="resources/compute-test.js"></script> <body> @@ -13,4 +14,4 @@ <div class="test"></div> </div> </div> -</body>
\ No newline at end of file +</body> diff --git a/tests/wpt/tests/css/css-view-transitions/nested/contain-nested.tentative.html b/tests/wpt/tests/css/css-view-transitions/nested/contain-nested.tentative.html index 643aad7b6db..b995d11c997 100644 --- a/tests/wpt/tests/css/css-view-transitions/nested/contain-nested.tentative.html +++ b/tests/wpt/tests/css/css-view-transitions/nested/contain-nested.tentative.html @@ -5,6 +5,7 @@ <link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/"> <link rel="match" href="nested-ref.html"> <link rel=stylesheet href="resources/compute-common.css"></link> +<link rel=stylesheet href="resources/pause-view-transitions.css"></link> <script src="/common/reftest-wait.js"></script> <script src="resources/compute-test.js"></script> <body> @@ -13,4 +14,4 @@ <div class="test"></div> </div> </div> -</body>
\ No newline at end of file +</body> diff --git a/tests/wpt/tests/css/css-view-transitions/nested/contain-on-self.tentative.html b/tests/wpt/tests/css/css-view-transitions/nested/contain-on-self.tentative.html index f8662850bb9..a0a63188d3e 100644 --- a/tests/wpt/tests/css/css-view-transitions/nested/contain-on-self.tentative.html +++ b/tests/wpt/tests/css/css-view-transitions/nested/contain-on-self.tentative.html @@ -5,6 +5,7 @@ <link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/"> <link rel="match" href="nested-ref.html"> <link rel=stylesheet href="resources/compute-common.css"></link> +<link rel=stylesheet href="resources/pause-view-transitions.css"></link> <script src="/common/reftest-wait.js"></script> <script src="resources/compute-test.js"></script> <body> @@ -13,4 +14,4 @@ <div class="test contain-ref"></div> </div> </div> -</body>
\ No newline at end of file +</body> diff --git a/tests/wpt/tests/css/css-view-transitions/nested/custom-ident-implies-contain.html b/tests/wpt/tests/css/css-view-transitions/nested/custom-ident-implies-contain.html index 6524d2c2680..545e98bc171 100644 --- a/tests/wpt/tests/css/css-view-transitions/nested/custom-ident-implies-contain.html +++ b/tests/wpt/tests/css/css-view-transitions/nested/custom-ident-implies-contain.html @@ -5,6 +5,7 @@ <link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/"> <link rel="match" href="nested-ref.html"> <link rel=stylesheet href="resources/compute-common.css"></link> +<link rel=stylesheet href="resources/pause-view-transitions.css"></link> <script src="/common/reftest-wait.js"></script> <script src="resources/compute-test.js"></script> <body> @@ -13,4 +14,4 @@ <div class="test"></div> </div> </div> -</body>
\ No newline at end of file +</body> diff --git a/tests/wpt/tests/css/css-view-transitions/nested/nearest-direct.tentative.html b/tests/wpt/tests/css/css-view-transitions/nested/nearest-direct.tentative.html index a42e5a847c0..9bfd2e29c83 100644 --- a/tests/wpt/tests/css/css-view-transitions/nested/nearest-direct.tentative.html +++ b/tests/wpt/tests/css/css-view-transitions/nested/nearest-direct.tentative.html @@ -5,6 +5,7 @@ <link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/"> <link rel="match" href="nested-ref.html"> <link rel=stylesheet href="resources/compute-common.css"></link> +<link rel=stylesheet href="resources/pause-view-transitions.css"></link> <script src="/common/reftest-wait.js"></script> <script src="resources/compute-test.js"></script> <body> @@ -13,4 +14,4 @@ <div class="test nearest-ref"></div> </div> </div> -</body>
\ No newline at end of file +</body> diff --git a/tests/wpt/tests/css/css-view-transitions/nested/nearest-ignores-nearest-name.tentative.html b/tests/wpt/tests/css/css-view-transitions/nested/nearest-ignores-nearest-name.tentative.html index ddae634f87a..3c904f3abb4 100644 --- a/tests/wpt/tests/css/css-view-transitions/nested/nearest-ignores-nearest-name.tentative.html +++ b/tests/wpt/tests/css/css-view-transitions/nested/nearest-ignores-nearest-name.tentative.html @@ -5,6 +5,7 @@ <link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/"> <link rel="match" href="nested-ref.html"> <link rel=stylesheet href="resources/compute-common.css"></link> +<link rel=stylesheet href="resources/pause-view-transitions.css"></link> <script src="/common/reftest-wait.js"></script> <script src="resources/compute-test.js"></script> <body> @@ -15,4 +16,4 @@ </div> </div> </div> -</body>
\ No newline at end of file +</body> diff --git a/tests/wpt/tests/css/css-view-transitions/nested/nearest-implies-contain.html b/tests/wpt/tests/css/css-view-transitions/nested/nearest-implies-contain.html index 94f8b8d1b7e..378d2ebcdc1 100644 --- a/tests/wpt/tests/css/css-view-transitions/nested/nearest-implies-contain.html +++ b/tests/wpt/tests/css/css-view-transitions/nested/nearest-implies-contain.html @@ -5,6 +5,7 @@ <link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/"> <link rel="match" href="nested-ref.html"> <link rel=stylesheet href="resources/compute-common.css"></link> +<link rel=stylesheet href="resources/pause-view-transitions.css"></link> <script src="/common/reftest-wait.js"></script> <script src="resources/compute-test.js"></script> <body> @@ -13,4 +14,4 @@ <div class="test"></div> </div> </div> -</body>
\ No newline at end of file +</body> diff --git a/tests/wpt/tests/css/css-view-transitions/nested/nearest-nested.tentative.html b/tests/wpt/tests/css/css-view-transitions/nested/nearest-nested.tentative.html index 9ec3e8f95ff..3e445c6bfcf 100644 --- a/tests/wpt/tests/css/css-view-transitions/nested/nearest-nested.tentative.html +++ b/tests/wpt/tests/css/css-view-transitions/nested/nearest-nested.tentative.html @@ -5,6 +5,7 @@ <link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/"> <link rel="match" href="nested-ref.html"> <link rel=stylesheet href="resources/compute-common.css"></link> +<link rel=stylesheet href="resources/pause-view-transitions.css"></link> <script src="/common/reftest-wait.js"></script> <script src="resources/compute-test.js"></script> <body> @@ -15,4 +16,4 @@ </div> </div> </div> -</body>
\ No newline at end of file +</body> diff --git a/tests/wpt/tests/css/css-view-transitions/nested/nested-exit.tentative.html b/tests/wpt/tests/css/css-view-transitions/nested/nested-exit.tentative.html index dd1d6562280..83570762061 100644 --- a/tests/wpt/tests/css/css-view-transitions/nested/nested-exit.tentative.html +++ b/tests/wpt/tests/css/css-view-transitions/nested/nested-exit.tentative.html @@ -4,6 +4,7 @@ <meta name=fuzzy content="maxDifference=0-255; totalPixels=0-515"> <link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/"> <link rel="match" href="nested-ref-100.html"> +<link rel=stylesheet href="resources/pause-view-transitions.css"></link> <script src="/common/reftest-wait.js"></script> <script src="resources/compute-test.js"></script> <body> @@ -51,4 +52,4 @@ <div class="parent"> <div class="child"></div> </div> -</body>
\ No newline at end of file +</body> diff --git a/tests/wpt/tests/css/css-view-transitions/nested/nested-group-display-none.tentative.html b/tests/wpt/tests/css/css-view-transitions/nested/nested-group-display-none.tentative.html index 08434873254..a4aad5aeee6 100644 --- a/tests/wpt/tests/css/css-view-transitions/nested/nested-group-display-none.tentative.html +++ b/tests/wpt/tests/css/css-view-transitions/nested/nested-group-display-none.tentative.html @@ -3,6 +3,7 @@ <title>Nested view-transition-group with display:none</title> <link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/"> <link rel="match" href="nested-ref.html"> +<link rel=stylesheet href="resources/pause-view-transitions.css"></link> <meta name=fuzzy content="maxDifference=0-255; totalPixels=0-515"> <script src="/common/reftest-wait.js"></script> <style> @@ -41,4 +42,4 @@ async function runTest() { } onload = () => requestAnimationFrame(() => requestAnimationFrame(runTest)); </script> -</body>
\ No newline at end of file +</body> diff --git a/tests/wpt/tests/css/css-view-transitions/nested/nested-group-in-pseudo-basic.tentative.html b/tests/wpt/tests/css/css-view-transitions/nested/nested-group-in-pseudo-basic.tentative.html index 77241d06b73..f2a228144e2 100644 --- a/tests/wpt/tests/css/css-view-transitions/nested/nested-group-in-pseudo-basic.tentative.html +++ b/tests/wpt/tests/css/css-view-transitions/nested/nested-group-in-pseudo-basic.tentative.html @@ -3,6 +3,7 @@ <title>Basic hierarchy of view-transition-group</title> <link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/"> <link rel="match" href="nested-ref.html"> +<link rel=stylesheet href="resources/pause-view-transitions.css"></link> <meta name=fuzzy content="maxDifference=0-255; totalPixels=0-515"> <script src="/common/reftest-wait.js"></script> <style> @@ -57,4 +58,4 @@ async function runTest() { } onload = () => requestAnimationFrame(() => requestAnimationFrame(runTest)); </script> -</body>
\ No newline at end of file +</body> diff --git a/tests/wpt/tests/css/css-view-transitions/nested/nested-root-capture-with-clip-ref.html b/tests/wpt/tests/css/css-view-transitions/nested/nested-root-capture-with-clip-ref.html index 40275ab555c..b598df17a0e 100644 --- a/tests/wpt/tests/css/css-view-transitions/nested/nested-root-capture-with-clip-ref.html +++ b/tests/wpt/tests/css/css-view-transitions/nested/nested-root-capture-with-clip-ref.html @@ -3,6 +3,7 @@ <title>Nested View Transitions root capture with border radius (ref)</title> <link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/"> <link rel="author" href="mailto:vmpstr@chromium.org"> +<link rel=stylesheet href="resources/pause-view-transitions.css"></link> <style> body { background: lightgreen; } diff --git a/tests/wpt/tests/css/css-view-transitions/nested/nested-root-capture-with-clip.html b/tests/wpt/tests/css/css-view-transitions/nested/nested-root-capture-with-clip.html index a55997a3f63..4a063b57ba1 100644 --- a/tests/wpt/tests/css/css-view-transitions/nested/nested-root-capture-with-clip.html +++ b/tests/wpt/tests/css/css-view-transitions/nested/nested-root-capture-with-clip.html @@ -4,6 +4,7 @@ <link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/"> <link rel="author" href="mailto:vmpstr@chromium.org"> <link rel="match" href="nested-root-capture-with-clip-ref.html"> +<link rel=stylesheet href="resources/pause-view-transitions.css"></link> <meta name=fuzzy content="maxDifference=0-40; totalPixels=0-500"> <script src="/common/reftest-wait.js"></script> <script src="/dom/events/scrolling/scroll_support.js"></script> diff --git a/tests/wpt/tests/css/css-view-transitions/nested/normal-goes-up.tentative.html b/tests/wpt/tests/css/css-view-transitions/nested/normal-goes-up.tentative.html index f68c93d4744..b027e36672f 100644 --- a/tests/wpt/tests/css/css-view-transitions/nested/normal-goes-up.tentative.html +++ b/tests/wpt/tests/css/css-view-transitions/nested/normal-goes-up.tentative.html @@ -5,6 +5,7 @@ <link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/"> <link rel="match" href="nested-ref.html"> <link rel=stylesheet href="resources/compute-common.css"></link> +<link rel=stylesheet href="resources/pause-view-transitions.css"></link> <script src="/common/reftest-wait.js"></script> <script src="resources/compute-test.js"></script> <body> @@ -13,4 +14,4 @@ <div class="test normal-ref"></article> </div> </div> -</body>
\ No newline at end of file +</body> diff --git a/tests/wpt/tests/css/css-view-transitions/nested/render-element.tentative.html b/tests/wpt/tests/css/css-view-transitions/nested/render-element.tentative.html index 59a5a108314..4b74290279b 100644 --- a/tests/wpt/tests/css/css-view-transitions/nested/render-element.tentative.html +++ b/tests/wpt/tests/css/css-view-transitions/nested/render-element.tentative.html @@ -4,6 +4,7 @@ <meta name=fuzzy content="maxDifference=0-255; totalPixels=0-515"> <link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/"> <link rel="match" href="nested-ref-100.html"> +<link rel=stylesheet href="resources/pause-view-transitions.css"></link> <script src="/common/reftest-wait.js"></script> <script src="resources/compute-test.js"></script> <style> @@ -34,4 +35,4 @@ <div class="parent"> <div class="child"></div> </div> -</body>
\ No newline at end of file +</body> diff --git a/tests/wpt/tests/css/css-view-transitions/nested/resources/pause-view-transitions.css b/tests/wpt/tests/css/css-view-transitions/nested/resources/pause-view-transitions.css new file mode 100644 index 00000000000..823235f3fbb --- /dev/null +++ b/tests/wpt/tests/css/css-view-transitions/nested/resources/pause-view-transitions.css @@ -0,0 +1,7 @@ +::view-transition-group(*), +::view-transition-image-pair(*), +::view-transition-new(*), +::view-transition-old(*) { + animation-play-state: paused; +} + diff --git a/tests/wpt/tests/css/css-view-transitions/only-child-group.html b/tests/wpt/tests/css/css-view-transitions/only-child-group.html index 551e8816116..970a5a50114 100644 --- a/tests/wpt/tests/css/css-view-transitions/only-child-group.html +++ b/tests/wpt/tests/css/css-view-transitions/only-child-group.html @@ -1,5 +1,5 @@ <!DOCTYPE html> -<html class="reftest-wait foo"> +<html class="foo"> <title>View transitions: ensure :only-child is supported on view-transition-group</title> <link rel="help" href="https://drafts.csswg.org/css-view-transitions-1/"> <link rel="author" href="mailto:khushalsagar@chromium.org"> @@ -49,11 +49,20 @@ html:only-child { <div id="target2"></div> <script> -promise_test(() => { +function resetState() { + if (window.transition) + window.transition.skipTransition(); + document.documentElement.style.viewTransitionName = ""; + target.style.viewTransitionName = ""; + target2.style.viewTransitionName = ""; +} + +promise_test((t) => { assert_implements(document.startViewTransition, "Missing document.startViewTransition"); + t.add_cleanup(resetState); return new Promise(async (resolve, reject) => { - let transition = document.startViewTransition(); - transition.ready.then(() => { + window.transition = document.startViewTransition(); + window.transition.ready.then(() => { let style = getComputedStyle(document.documentElement, "::view-transition-group(root)"); if (style.backgroundColor == "rgb(255, 0, 0)" && style.color == "rgb(255, 0, 0)") resolve(); @@ -63,12 +72,13 @@ promise_test(() => { }); }, ":only-child should match because ::view-transition-group is generated for root element only"); -promise_test(() => { +promise_test((t) => { assert_implements(document.startViewTransition, "Missing document.startViewTransition"); + t.add_cleanup(resetState); return new Promise(async (resolve, reject) => { target.style.viewTransitionName = "target"; - let transition = document.startViewTransition(); - transition.ready.then(() => { + window.transition = document.startViewTransition(); + window.transition.ready.then(() => { let style = getComputedStyle(document.documentElement, "::view-transition-group(root)"); if (style.backgroundColor == "rgb(0, 0, 255)" && style.color == "rgb(0, 0, 255)") resolve(); @@ -78,13 +88,14 @@ promise_test(() => { }); }, ":only-child should not match because ::view-transition-group is generated for multiple elements"); -promise_test(() => { +promise_test((t) => { assert_implements(document.startViewTransition, "Missing document.startViewTransition"); + t.add_cleanup(resetState); return new Promise(async (resolve, reject) => { document.documentElement.style.viewTransitionName = "none"; target.style.viewTransitionName = "target"; - let transition = document.startViewTransition(); - transition.ready.then(() => { + window.transition = document.startViewTransition(); + window.transition.ready.then(() => { let style = getComputedStyle(document.documentElement, "::view-transition-group(target)"); if (style.backgroundColor == "rgb(255, 0, 0)" && style.color == "rgb(255, 0, 0)") resolve(); @@ -94,14 +105,15 @@ promise_test(() => { }); }, ":only-child should match because ::view-transition-group is generated for sub element only"); -promise_test(() => { +promise_test((t) => { assert_implements(document.startViewTransition, "Missing document.startViewTransition"); + t.add_cleanup(resetState); return new Promise(async (resolve, reject) => { document.documentElement.style.viewTransitionName = "none"; target.style.viewTransitionName = "target"; target2.style.viewTransitionName = "target2"; - let transition = document.startViewTransition(); - transition.ready.then(() => { + window.transition = document.startViewTransition(); + window.transition.ready.then(() => { let style = getComputedStyle(document.documentElement, "::view-transition-group(target)"); if (style.backgroundColor == "rgb(0, 0, 255)" && style.color == "rgb(0, 0, 255)") resolve(); diff --git a/tests/wpt/tests/css/css-writing-modes/test-plan/req-tcu-font.html b/tests/wpt/tests/css/css-writing-modes/test-plan/req-tcu-font.html index d329eea041c..16414a1b2b1 100644 --- a/tests/wpt/tests/css/css-writing-modes/test-plan/req-tcu-font.html +++ b/tests/wpt/tests/css/css-writing-modes/test-plan/req-tcu-font.html @@ -372,7 +372,7 @@ OpenType implementations must use width-specific variants (OpenType features hwi <h3>Glyphs to check the optional processing regarding U+6C34</h3> <p>The last paragraph in <a href="https://drafts.csswg.org/css-writing-modes/#text-combine-compression">9.1.3 Compression Rules</a> says: <blockquote> -In some fonts, the ideographic glyphs are given a compressed design such that they are 1em wide but shorter than 1em tall. To accommodate such fonts, the UA may vertically scale the the composition to match the advance height of 水 U+6C34. +In some fonts, the ideographic glyphs are given a compressed design such that they are 1em wide but shorter than 1em tall. To accommodate such fonts, the UA may vertically scale the composition to match the advance height of 水 U+6C34. </blockquote> <p>We need two glyphs: <ul> diff --git a/tests/wpt/tests/css/filter-effects/empty-element-with-filter-004.html b/tests/wpt/tests/css/filter-effects/empty-element-with-filter-004.html new file mode 100644 index 00000000000..38f746ff405 --- /dev/null +++ b/tests/wpt/tests/css/filter-effects/empty-element-with-filter-004.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<title>CSS Filter Effects: ref filters on zero-sized block elements with 'will-change: transform' and no visible content</title> +<link rel="help" href="https://drafts.fxtf.org/filter-effects/#FilterProperty"> +<link rel="match" href="reference/green-100x100.html"> +<meta name="assert" content="This test ensures we properly render filters on block elements with 'will-change: transform' that are zero-sized with no visible content."> +<style> + .flood { + width: 0px; + height: 0px; + filter: url(#f_flood); + will-change: transform; + } +</style> +<div class="flood"></div> +<svg xmlns="http://www.w3.org/2000/svg" width="0" height="0" version="1.1"> + <defs> + <filter id="f_flood" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" x="0" y="0" width="100" height="100"> + <feFlood flood-color="green"/> + </filter> + </defs> +</svg> diff --git a/tests/wpt/tests/css/filter-effects/svg-feimage-005.html b/tests/wpt/tests/css/filter-effects/svg-feimage-005.html index 21846db376b..52ecaac3ffd 100644 --- a/tests/wpt/tests/css/filter-effects/svg-feimage-005.html +++ b/tests/wpt/tests/css/filter-effects/svg-feimage-005.html @@ -7,6 +7,7 @@ filter: url(#f); width: 100px; height: 100px; + background-color: red; } </style> <div id="target"></div> diff --git a/tests/wpt/tests/css/motion/animation/offset-path-interpolation-008.html b/tests/wpt/tests/css/motion/animation/offset-path-interpolation-008.html index 2af20f78d1f..5fb7c7c333c 100644 --- a/tests/wpt/tests/css/motion/animation/offset-path-interpolation-008.html +++ b/tests/wpt/tests/css/motion/animation/offset-path-interpolation-008.html @@ -251,9 +251,9 @@ from: 'path("M 5 5 A 10,20 0 0,0 15,-15 a 30,30 30 1,1 15,-5 A 10,5 0 0,0 25 20")', to: 'shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px cw rotate 270deg small, arc to 25px 20px of 10px 5px small cw)' }, [ - {at: -0.3, expect: 'shape(from 2px 2px, arc to 18px -12px of 7px 17px ccw small, arc by 12px -2px of 33px 33px rotate -42deg cw large , arc to 25px 20px of 10px 5px ccw small)'}, + {at: -0.3, expect: 'shape(from 2px 2px, arc to 18px -12px of 7px 17px ccw small, arc by 12px -2px of 33px 33px rotate -42deg cw large, arc to 25px 20px of 10px 5px ccw small)'}, {at: 0, expect: 'shape(from 5px 5px, arc to 15px -15px of 10px 20px, arc by 15px -5px of 30px cw rotate 30deg large, arc to 25px 20px of 10px 5px small)'}, - {at: 0.3, expect: 'shape(from 8px 8px, arc to 12px -18px of 13px 23px ccw small, arc by 18px -8px of 27px 27px rotate 102deg cw large, arc to 25px 20px of 10px 5px ccw small )'}, + {at: 0.3, expect: 'shape(from 8px 8px, arc to 12px -18px of 13px 23px ccw small, arc by 18px -8px of 27px 27px rotate 102deg cw large, arc to 25px 20px of 10px 5px cw small)'}, {at: 0.5, expect: 'shape(from 10px 10px, arc to 10px -20px of 15px 25px ccw small, arc by 20px -10px of 25px rotate 150deg cw large, arc to 25px 20px of 10px 5px cw small)'}, {at: 1, expect: 'shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px rotate 270deg cw small, arc to 25px 20px of 10px 5px cw small)'}, {at: 1.5, expect: 'shape(from 20px 20px, arc to 0px -30px of 25px 35px ccw small, arc by 30px -20px of 15px rotate 390deg cw small, arc to 25px 20px of 10px 5px cw small)'}, diff --git a/tests/wpt/tests/css/motion/offset-path-shape-shape-001.html b/tests/wpt/tests/css/motion/offset-path-shape-shape-001.html index 4cca1744d06..dd2fc6327b8 100644 --- a/tests/wpt/tests/css/motion/offset-path-shape-shape-001.html +++ b/tests/wpt/tests/css/motion/offset-path-shape-shape-001.html @@ -14,6 +14,7 @@ width: 600px; height: 400px; } + #box { width: 100px; height: 100px; diff --git a/tests/wpt/tests/css/motion/parsing/offset-path-shape-computed.html b/tests/wpt/tests/css/motion/parsing/offset-path-shape-computed.html index 8904eaf16a2..c9ecc3acb06 100644 --- a/tests/wpt/tests/css/motion/parsing/offset-path-shape-computed.html +++ b/tests/wpt/tests/css/motion/parsing/offset-path-shape-computed.html @@ -23,9 +23,9 @@ test_computed_value("offset-path", "shape(from 1em 50px, line to 10rem 10%)", "s test_computed_value("offset-path", "shape(from 10px 10px, move by 10px 5px, line by 20px 40%, close)"); test_computed_value("offset-path", "shape(from 10px 10px, hline by 10px, vline to 5rem)", "shape(from 10px 10px, hline by 10px, vline to 80px)"); test_computed_value("offset-path", "shape(from 10px 10px, vline by 5%, hline to 1px)"); -test_computed_value("offset-path", "shape(from 10px 10px, curve to 50px 20px via 10rem 1%)", "shape(from 10px 10px, curve to 50px 20px via 160px 1%)"); -test_computed_value("offset-path", "shape(from 10px 10px, curve to 50px 20px via 10rem 1px 20% 1em)", "shape(from 10px 10px, curve to 50px 20px via 160px 1px 20% 16px)"); -test_computed_value("offset-path", "shape(from 10px 10px, smooth to 50px 20px via 10rem 1%)", "shape(from 10px 10px, smooth to 50px 20px via 160px 1%)"); +test_computed_value("offset-path", "shape(from 10px 10px, curve to 50px 20px with 10rem 1%)", "shape(from 10px 10px, curve to 50px 20px with 160px 1%)"); +test_computed_value("offset-path", "shape(from 10px 10px, curve to 50px 20px with 10rem 1px / 20% 1em)", "shape(from 10px 10px, curve to 50px 20px with 160px 1px / 20% 16px)"); +test_computed_value("offset-path", "shape(from 10px 10px, smooth to 50px 20px with 10rem 1%)", "shape(from 10px 10px, smooth to 50px 20px with 160px 1%)"); test_computed_value("offset-path", "shape(from 10px 10px, smooth to 50px 3pt)", "shape(from 10px 10px, smooth to 50px 4px)"); test_computed_value("offset-path", "shape(from 10px 10px, arc to 50px 3pt of 10px 10px)", "shape(from 10px 10px, arc to 50px 4px of 10px)"); test_computed_value("offset-path", "shape(from 10px 10px, arc to 50px 3pt of 10px 10px small rotate 0deg)", "shape(from 10px 10px, arc to 50px 4px of 10px)"); diff --git a/tests/wpt/tests/css/motion/parsing/offset-path-shape-parsing.html b/tests/wpt/tests/css/motion/parsing/offset-path-shape-parsing.html index 6ca288b660e..013cea2c821 100644 --- a/tests/wpt/tests/css/motion/parsing/offset-path-shape-parsing.html +++ b/tests/wpt/tests/css/motion/parsing/offset-path-shape-parsing.html @@ -23,26 +23,26 @@ test_valid_value("offset-path", "shape(from 1ch -50px, line to -10% 12px)"); test_valid_value("offset-path", "shape(from 10px 10px, move by 10px 5px, line by 20px 40%, close)"); test_valid_value("offset-path", "shape(from 10px 10px, hline by 10px, vline to 5rem)"); test_valid_value("offset-path", "shape(from 10px 10px, vline by 5%, hline to 1vw)"); -test_valid_value("offset-path", "shape(from 10px 10px, curve to 50px 20px via 10rem 1%)"); -test_valid_value("offset-path", "shape(from 10px 10px, curve to 50px 20px via 10rem 1px 20vh 1ch)"); -test_valid_value("offset-path", "shape(from 10px 10px, curve by 50px 20px via 10rem 1px 20vh 1ch)"); -test_valid_value("offset-path", "shape(from 10px 10px, smooth to 50px 20px via 10rem 1%)"); +test_valid_value("offset-path", "shape(from 10px 10px, curve to 50px 20px with 10rem 1%)"); +test_valid_value("offset-path", "shape(from 10px 10px, curve to 50px 20px with 10rem 1px / 20vh 1ch)"); +test_valid_value("offset-path", "shape(from 10px 10px, curve by 50px 20px with 10rem 1px / 20vh 1ch)"); +test_valid_value("offset-path", "shape(from 10px 10px, smooth to 50px 20px with 10rem 1%)"); test_valid_value("offset-path", "shape(from 10px 10px, smooth to 50px 1pt)"); test_valid_value("offset-path", "shape(from 10px 10px, arc to 50px 1pt of 10px 10px)", "shape(from 10px 10px, arc to 50px 1pt of 10px)"); test_valid_value("offset-path", "shape(from 10px 10px, arc to 50px 1pt of 10px 10px small rotate 0deg)", "shape(from 10px 10px, arc to 50px 1pt of 10px)"); test_valid_value("offset-path", "shape(from 10% 1rem, arc to 50px 1pt of 20% cw large rotate 25deg)", "shape(from 10% 1rem, arc to 50px 1pt of 20% cw large rotate 25deg)"); +test_valid_value("offset-path", "shape(evenodd from 0px 0px, line to 10px 10px)"); +test_valid_value("offset-path", "shape(nonzero from 0px 0px, line to 10px 10px)", "shape(from 0px 0px, line to 10px 10px)"); +test_valid_value("offset-path", "shape(evenodd from 0px 0px, close)"); +test_valid_value("offset-path", "shape(from 10px 10px, curve to 50px 20px with 10rem center)", "shape(from 10px 10px, curve to 50px 20px with 10rem center)"); // nonsense -test_invalid_value("offset-path", "shape(evenodd from 0px 0px, line to 10px 10px)"); -test_invalid_value("offset-path", "shape(nonzero from 0px 0px, line to 10px 10px)"); -test_invalid_value("offset-path", "shape(evenodd from 0px 0px, close)"); test_invalid_value("offset-path", "shape(from 0px 0px, close path)"); -test_invalid_value("offset-path", "shape(from 10px 10px, curve to 50px 20px via 10rem)"); -test_invalid_value("offset-path", "shape(from 10px 10px, curve to 50px 20px via 10rem 1% 12px)"); +test_invalid_value("offset-path", "shape(from 10px 10px, curve to 50px 20px with 10rem 1% 12px)"); test_invalid_value("offset-path", "shape(from 10px 10px, hline byy 10px, vline to 5rem)"); test_invalid_value("offset-path", "shape(from 10px 10px, vline by 5% hline by 1vw"); -test_invalid_value("offset-path", "shape(from 10px 10px, smooth to 50px 20px via 10rem)"); -test_invalid_value("offset-path", "shape(from 10px 10px, smooth to 50px 20px via 10rem 2px 2pt)"); +test_invalid_value("offset-path", "shape(from 10px 10px, smooth to 50px 20px via 10rem)"); +test_invalid_value("offset-path", "shape(from 10px 10px, smooth to 50px 20px via 10rem 2px 2pt)"); test_invalid_value("offset-path", "shape()"); test_invalid_value("offset-path", "shape(from)"); test_invalid_value("offset-path", "shape(from 0px)"); diff --git a/tests/wpt/tests/css/selectors/dir-selector-auto-direction-change-001.html b/tests/wpt/tests/css/selectors/dir-selector-auto-direction-change-001.html index f6c6393b08a..f376e33e2ba 100644 --- a/tests/wpt/tests/css/selectors/dir-selector-auto-direction-change-001.html +++ b/tests/wpt/tests/css/selectors/dir-selector-auto-direction-change-001.html @@ -1,7 +1,7 @@ <!doctype html> <html> <head> - <title>CSS Selectors Level 4 Test: Check for correctly updating :dir=auto when the the directionality is changed in a display:none subtree </title> + <title>CSS Selectors Level 4 Test: Check for correctly updating :dir=auto when the directionality is changed in a display:none subtree </title> <meta charset="utf8"> <link rel="author" title="Miyoung Shin" href="mailto:myid.shin@igalia.com"> <link rel="help" href="http://www.w3.org/TR/selectors4/#dir-pseudo"> diff --git a/tests/wpt/tests/custom-elements/revamped-scoped-registry/Construct.tentative.html b/tests/wpt/tests/custom-elements/registries/Construct.html index a5e825f439a..a5e825f439a 100644 --- a/tests/wpt/tests/custom-elements/revamped-scoped-registry/Construct.tentative.html +++ b/tests/wpt/tests/custom-elements/registries/Construct.html diff --git a/tests/wpt/tests/custom-elements/revamped-scoped-registry/CustomElementRegistry-define.tentative.html b/tests/wpt/tests/custom-elements/registries/CustomElementRegistry-define.html index 9ade81bef0c..9ade81bef0c 100644 --- a/tests/wpt/tests/custom-elements/revamped-scoped-registry/CustomElementRegistry-define.tentative.html +++ b/tests/wpt/tests/custom-elements/registries/CustomElementRegistry-define.html diff --git a/tests/wpt/tests/custom-elements/revamped-scoped-registry/CustomElementRegistry-initialize.tentative.html b/tests/wpt/tests/custom-elements/registries/CustomElementRegistry-initialize.html index 142dc56746c..142dc56746c 100644 --- a/tests/wpt/tests/custom-elements/revamped-scoped-registry/CustomElementRegistry-initialize.tentative.html +++ b/tests/wpt/tests/custom-elements/registries/CustomElementRegistry-initialize.html diff --git a/tests/wpt/tests/custom-elements/revamped-scoped-registry/CustomElementRegistry-multi-register.tentative.html b/tests/wpt/tests/custom-elements/registries/CustomElementRegistry-multi-register.html index bd97017308a..bd97017308a 100644 --- a/tests/wpt/tests/custom-elements/revamped-scoped-registry/CustomElementRegistry-multi-register.tentative.html +++ b/tests/wpt/tests/custom-elements/registries/CustomElementRegistry-multi-register.html diff --git a/tests/wpt/tests/custom-elements/revamped-scoped-registry/CustomElementRegistry-upgrade.tentative.html b/tests/wpt/tests/custom-elements/registries/CustomElementRegistry-upgrade.html index 0f7a7a835be..0f7a7a835be 100644 --- a/tests/wpt/tests/custom-elements/revamped-scoped-registry/CustomElementRegistry-upgrade.tentative.html +++ b/tests/wpt/tests/custom-elements/registries/CustomElementRegistry-upgrade.html diff --git a/tests/wpt/tests/custom-elements/revamped-scoped-registry/Document-createElement.tentative.html b/tests/wpt/tests/custom-elements/registries/Document-createElement.html index c3dd6d9b857..c3dd6d9b857 100644 --- a/tests/wpt/tests/custom-elements/revamped-scoped-registry/Document-createElement.tentative.html +++ b/tests/wpt/tests/custom-elements/registries/Document-createElement.html diff --git a/tests/wpt/tests/custom-elements/revamped-scoped-registry/Document-createElementNS.tentative.html b/tests/wpt/tests/custom-elements/registries/Document-createElementNS.html index d9b21113339..d9b21113339 100644 --- a/tests/wpt/tests/custom-elements/revamped-scoped-registry/Document-createElementNS.tentative.html +++ b/tests/wpt/tests/custom-elements/registries/Document-createElementNS.html diff --git a/tests/wpt/tests/custom-elements/revamped-scoped-registry/Document-customElementRegistry.html b/tests/wpt/tests/custom-elements/registries/Document-customElementRegistry.html index ba062aa3cfc..ba062aa3cfc 100644 --- a/tests/wpt/tests/custom-elements/revamped-scoped-registry/Document-customElementRegistry.html +++ b/tests/wpt/tests/custom-elements/registries/Document-customElementRegistry.html diff --git a/tests/wpt/tests/custom-elements/revamped-scoped-registry/Document-importNode.tentative.html b/tests/wpt/tests/custom-elements/registries/Document-importNode.html index 149a135c41c..149a135c41c 100644 --- a/tests/wpt/tests/custom-elements/revamped-scoped-registry/Document-importNode.tentative.html +++ b/tests/wpt/tests/custom-elements/registries/Document-importNode.html diff --git a/tests/wpt/tests/custom-elements/revamped-scoped-registry/Element-customElementRegistry-exceptions.tentative.html b/tests/wpt/tests/custom-elements/registries/Element-customElementRegistry-exceptions.html index fb213b1d15a..fb213b1d15a 100644 --- a/tests/wpt/tests/custom-elements/revamped-scoped-registry/Element-customElementRegistry-exceptions.tentative.html +++ b/tests/wpt/tests/custom-elements/registries/Element-customElementRegistry-exceptions.html diff --git a/tests/wpt/tests/custom-elements/revamped-scoped-registry/Element-customElementRegistry.tentative.html b/tests/wpt/tests/custom-elements/registries/Element-customElementRegistry.html index 72e54bdbaab..72e54bdbaab 100644 --- a/tests/wpt/tests/custom-elements/revamped-scoped-registry/Element-customElementRegistry.tentative.html +++ b/tests/wpt/tests/custom-elements/registries/Element-customElementRegistry.html diff --git a/tests/wpt/tests/custom-elements/revamped-scoped-registry/Element-innerHTML.tentative.html b/tests/wpt/tests/custom-elements/registries/Element-innerHTML.html index c4f3ad34ddf..c4f3ad34ddf 100644 --- a/tests/wpt/tests/custom-elements/revamped-scoped-registry/Element-innerHTML.tentative.html +++ b/tests/wpt/tests/custom-elements/registries/Element-innerHTML.html diff --git a/tests/wpt/tests/custom-elements/revamped-scoped-registry/ShadowRoot-init-customElementRegistry.tentative.html b/tests/wpt/tests/custom-elements/registries/ShadowRoot-init-customElementRegistry.html index bbf1b414aa0..bbf1b414aa0 100644 --- a/tests/wpt/tests/custom-elements/revamped-scoped-registry/ShadowRoot-init-customElementRegistry.tentative.html +++ b/tests/wpt/tests/custom-elements/registries/ShadowRoot-init-customElementRegistry.html diff --git a/tests/wpt/tests/custom-elements/revamped-scoped-registry/ShadowRoot-innerHTML.tentative.html b/tests/wpt/tests/custom-elements/registries/ShadowRoot-innerHTML.html index 0d4be665440..0d4be665440 100644 --- a/tests/wpt/tests/custom-elements/revamped-scoped-registry/ShadowRoot-innerHTML.tentative.html +++ b/tests/wpt/tests/custom-elements/registries/ShadowRoot-innerHTML.html diff --git a/tests/wpt/tests/custom-elements/custom-element-registry/WEB_FEATURES.yml b/tests/wpt/tests/custom-elements/registries/WEB_FEATURES.yml index c8486615c1e..c8486615c1e 100644 --- a/tests/wpt/tests/custom-elements/custom-element-registry/WEB_FEATURES.yml +++ b/tests/wpt/tests/custom-elements/registries/WEB_FEATURES.yml diff --git a/tests/wpt/tests/custom-elements/revamped-scoped-registry/constructor-reentry-with-different-definition.tentative.html b/tests/wpt/tests/custom-elements/registries/constructor-reentry-with-different-definition.html index ef104ebe4c1..ef104ebe4c1 100644 --- a/tests/wpt/tests/custom-elements/revamped-scoped-registry/constructor-reentry-with-different-definition.tentative.html +++ b/tests/wpt/tests/custom-elements/registries/constructor-reentry-with-different-definition.html diff --git a/tests/wpt/tests/custom-elements/custom-element-registry/define-customized-builtins.html b/tests/wpt/tests/custom-elements/registries/define-customized-builtins.html index b691033871c..b691033871c 100644 --- a/tests/wpt/tests/custom-elements/custom-element-registry/define-customized-builtins.html +++ b/tests/wpt/tests/custom-elements/registries/define-customized-builtins.html diff --git a/tests/wpt/tests/custom-elements/custom-element-registry/define.html b/tests/wpt/tests/custom-elements/registries/define.html index d3d923bd916..d3d923bd916 100644 --- a/tests/wpt/tests/custom-elements/custom-element-registry/define.html +++ b/tests/wpt/tests/custom-elements/registries/define.html diff --git a/tests/wpt/tests/custom-elements/revamped-scoped-registry/initial-about-blank.tentative.window.js b/tests/wpt/tests/custom-elements/registries/initial-about-blank.window.js index b3bb7e139b5..b3bb7e139b5 100644 --- a/tests/wpt/tests/custom-elements/revamped-scoped-registry/initial-about-blank.tentative.window.js +++ b/tests/wpt/tests/custom-elements/registries/initial-about-blank.window.js diff --git a/tests/wpt/tests/custom-elements/custom-element-registry/per-global.html b/tests/wpt/tests/custom-elements/registries/per-global.html index 3570dcf811d..3570dcf811d 100644 --- a/tests/wpt/tests/custom-elements/custom-element-registry/per-global.html +++ b/tests/wpt/tests/custom-elements/registries/per-global.html diff --git a/tests/wpt/tests/custom-elements/registries/pseudo-class-defined.window.js b/tests/wpt/tests/custom-elements/registries/pseudo-class-defined.window.js new file mode 100644 index 00000000000..71c0459e39c --- /dev/null +++ b/tests/wpt/tests/custom-elements/registries/pseudo-class-defined.window.js @@ -0,0 +1,29 @@ +test(() => { + const otherDocument = new Document(); + const element = otherDocument.createElement("blah"); + assert_true(element.matches(":defined")); + const registry = new CustomElementRegistry(); + registry.initialize(element); + assert_equals(element.customElementRegistry, registry); + assert_true(element.matches(":defined")); +}, `"uncustomized" :defined doesn't care about your registry'`); + +test(() => { + const registry = new CustomElementRegistry(); + registry.define("sw-r2d2", class extends HTMLElement {}); + const element = document.createElement("sw-r2d2", { customElementRegistry: registry }); + assert_equals(element.customElementRegistry, registry); + assert_true(element.matches(":defined")); +}, `"custom" :defined doesn't care about your registry`); + +test(() => { + const otherDocument = new Document(); + const element = otherDocument.createElementNS("http://www.w3.org/1999/xhtml", "sw-r2d2"); + assert_false(element.matches(":defined")); + const registry = new CustomElementRegistry(); + registry.define("sw-r2d2", class extends HTMLElement {}); + registry.initialize(element); + assert_false(element.matches(":defined")); + registry.upgrade(element); + assert_true(element.matches(":defined")); +}); diff --git a/tests/wpt/tests/custom-elements/revamped-scoped-registry/scoped-registry-define-upgrade-criteria.tentative.html b/tests/wpt/tests/custom-elements/registries/scoped-registry-define-upgrade-criteria.html index 9c9b076aa8d..9c9b076aa8d 100644 --- a/tests/wpt/tests/custom-elements/revamped-scoped-registry/scoped-registry-define-upgrade-criteria.tentative.html +++ b/tests/wpt/tests/custom-elements/registries/scoped-registry-define-upgrade-criteria.html diff --git a/tests/wpt/tests/custom-elements/revamped-scoped-registry/scoped-registry-define-upgrade-order.tentative.html b/tests/wpt/tests/custom-elements/registries/scoped-registry-define-upgrade-order.html index d115522a7b8..d115522a7b8 100644 --- a/tests/wpt/tests/custom-elements/revamped-scoped-registry/scoped-registry-define-upgrade-order.tentative.html +++ b/tests/wpt/tests/custom-elements/registries/scoped-registry-define-upgrade-order.html diff --git a/tests/wpt/tests/custom-elements/revamped-scoped-registry/scoped-registry-registry-define-get-etc.tentative.html b/tests/wpt/tests/custom-elements/registries/scoped-registry-registry-define-get-etc.html index 29e11d97052..29e11d97052 100644 --- a/tests/wpt/tests/custom-elements/revamped-scoped-registry/scoped-registry-registry-define-get-etc.tentative.html +++ b/tests/wpt/tests/custom-elements/registries/scoped-registry-registry-define-get-etc.html diff --git a/tests/wpt/tests/custom-elements/revamped-scoped-registry/template.tentative.window.js b/tests/wpt/tests/custom-elements/registries/template.window.js index 7d442a618f8..7d442a618f8 100644 --- a/tests/wpt/tests/custom-elements/revamped-scoped-registry/template.tentative.window.js +++ b/tests/wpt/tests/custom-elements/registries/template.window.js diff --git a/tests/wpt/tests/custom-elements/custom-element-registry/upgrade.html b/tests/wpt/tests/custom-elements/registries/upgrade.html index e020d95a576..e020d95a576 100644 --- a/tests/wpt/tests/custom-elements/custom-element-registry/upgrade.html +++ b/tests/wpt/tests/custom-elements/registries/upgrade.html diff --git a/tests/wpt/tests/custom-elements/revamped-scoped-registry/idlharness.tentative.window.js b/tests/wpt/tests/custom-elements/revamped-scoped-registry/idlharness.tentative.window.js new file mode 100644 index 00000000000..1f5c776cc25 --- /dev/null +++ b/tests/wpt/tests/custom-elements/revamped-scoped-registry/idlharness.tentative.window.js @@ -0,0 +1,21 @@ +// META: script=/resources/WebIDLParser.js +// META: script=/resources/idlharness.js +// META: global=window,dedicatedworker,shadowrealm-in-window + +idl_test( + ["scoped-custom-elements-registry.tentative"], + ["html", "dom"], + (idl_array) => { + let element = document.createElement("div"); + let shadowRoot = element.attachShadow({ mode: "open" }); + let customElementRegistry = new CustomElementRegistry(); + let templateElement = document.createElement("template"); + idl_array.add_objects({ + document, + element, + shadowRoot, + customElementRegistry, + templateElement, + }); + }, +); diff --git a/tests/wpt/tests/digital-credentials/non-fully-active.https.html b/tests/wpt/tests/digital-credentials/non-fully-active.https.html index 9e617827f64..3c09b132daf 100644 --- a/tests/wpt/tests/digital-credentials/non-fully-active.https.html +++ b/tests/wpt/tests/digital-credentials/non-fully-active.https.html @@ -26,7 +26,7 @@ const iframe = document.querySelector("iframe"); // The signal check happens after the fully active check. - // This allows us to confirm the the right error is thrown + // This allows us to confirm the right error is thrown // and in the right order. const controller = new iframe.contentWindow.AbortController(); const signal = controller.signal; diff --git a/tests/wpt/tests/docs/writing-tests/testdriver.md b/tests/wpt/tests/docs/writing-tests/testdriver.md index 537b3c01976..67757af63f2 100644 --- a/tests/wpt/tests/docs/writing-tests/testdriver.md +++ b/tests/wpt/tests/docs/writing-tests/testdriver.md @@ -186,6 +186,12 @@ the global scope. .. js:autofunction:: test_driver.remove_virtual_pressure_source ``` +### Viewport Segments ### +```eval_rst +.. js:autofunction:: test_driver.set_display_features +.. js:autofunction:: test_driver.clear_display_features +``` + ### Using test_driver in other browsing contexts ### Testdriver can be used in browsing contexts (i.e. windows or frames) diff --git a/tests/wpt/tests/dom/nodes/attributes-namednodemap.html b/tests/wpt/tests/dom/nodes/attributes-namednodemap.html index 96f9d30703b..0b631c1fb93 100644 --- a/tests/wpt/tests/dom/nodes/attributes-namednodemap.html +++ b/tests/wpt/tests/dom/nodes/attributes-namednodemap.html @@ -115,6 +115,6 @@ test(() => { assert_equals(element.attributes.length, 1, "one attribute"); -}, "setting an attribute should not overwrite the the length property of an `NamedNodeMap` object"); +}, "setting an attribute should not overwrite the length property of an `NamedNodeMap` object"); </script> diff --git a/tests/wpt/tests/dom/observable/tentative/observable-from.any.js b/tests/wpt/tests/dom/observable/tentative/observable-from.any.js index b5fcb5ed1fc..3caf99052c8 100644 --- a/tests/wpt/tests/dom/observable/tentative/observable-from.any.js +++ b/tests/wpt/tests/dom/observable/tentative/observable-from.any.js @@ -866,7 +866,7 @@ test(() => { }, "from(): Errors thrown in Symbol.asyncIterator() are propagated synchronously"); // AsyncIterable: next() throws exception instead of return Promise. Any errors -// that occur during the the retrieval of `next()` always result in a rejected +// that occur during the retrieval of `next()` always result in a rejected // Promise. Therefore, the error makes it to the Observer with microtask timing. promise_test(async () => { const nextError = new Error('next error'); diff --git a/tests/wpt/tests/dom/xslt/document-element.window.js b/tests/wpt/tests/dom/xslt/document-element.window.js new file mode 100644 index 00000000000..4079533c1e0 --- /dev/null +++ b/tests/wpt/tests/dom/xslt/document-element.window.js @@ -0,0 +1,26 @@ +const xmlString = ` +<items> + <item>Item 1</item> + <item>Item 2</item> +</items> +`; +const xsltString = ` +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> + <xsl:template match="*"> + <xsl:value-of select="name(.)"/> + </xsl:template> +</xsl:stylesheet> +`; +const parser = new DOMParser(); + +const xmlDoc = parser.parseFromString(xmlString, "application/xml"); +const xsltDoc = parser.parseFromString(xsltString, "application/xml"); +const xsltProcessor = new XSLTProcessor(); + +xsltProcessor.importStylesheet(xsltDoc); + +test(() => { + const resultFragment = xsltProcessor.transformToFragment(xmlDoc.documentElement, document); + assert_equals(resultFragment.childNodes.length, 1); + assert_equals(resultFragment.firstChild.nodeValue, "items"); +}, `'*' should match the documentElement`); diff --git a/tests/wpt/tests/editing/include/editor-test-utils.js b/tests/wpt/tests/editing/include/editor-test-utils.js index f88a9bac3b4..9c5600af77b 100644 --- a/tests/wpt/tests/editing/include/editor-test-utils.js +++ b/tests/wpt/tests/editing/include/editor-test-utils.js @@ -81,6 +81,26 @@ class EditorTestUtils { return this.sendKey(kArrowRight, modifier); } + sendMoveWordLeftKey(modifier) { + const kArrowLeft = "\uE012"; + return this.sendKey( + kArrowLeft, + this.window.navigator.platform.includes("Mac") + ? this.kAlt + : this.kControl + ); + } + + sendMoveWordRightKey(modifier) { + const kArrowRight = "\uE014"; + return this.sendKey( + kArrowRight, + this.window.navigator.platform.includes("Mac") + ? this.kAlt + : this.kControl + ); + } + sendHomeKey(modifier) { const kHome = "\uE011"; return this.sendKey(kHome, modifier); diff --git a/tests/wpt/tests/editing/other/insert-space-at-beginning-of-wrapped-line.html b/tests/wpt/tests/editing/other/insert-space-at-beginning-of-wrapped-line.html new file mode 100644 index 00000000000..6afedff12b5 --- /dev/null +++ b/tests/wpt/tests/editing/other/insert-space-at-beginning-of-wrapped-line.html @@ -0,0 +1,58 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/resources/testdriver-actions.js"></script> +<script src="../include/editor-test-utils.js"></script> +<style> + #textarea, + #plaintext, + #richedit { + font-family: "Courier", monospace; + width: 10ch; + } + #plaintext, + #richedit { + border: 1px solid black; + white-space: pre-wrap; + } +</style> +<textarea id="textarea"></textarea> +<div id="plaintext" contenteditable="plaintext-only"></div> +<div id="richedit" contenteditable></div> +<script> + async function runInElement(element, before, after) { + promise_test(async () => { + const utils = new EditorTestUtils(element); + let offset = before.length; + let acutal; + if (element.tagName === "TEXTAREA") { + element.value = before + after; + element.focus(); + element.setSelectionRange(offset, offset); + await utils.sendKey(" "); + actual = element.value; + } else { + element.textContent = before + after; + let textNode = element.firstChild; + window + .getSelection() + .setBaseAndExtent(textNode, offset, textNode, offset); + await utils.sendKey(" "); + actual = element.textContent; + } + assert_equals(actual, before + " " + after); + }, `Typing space at "${before}|${after}" should insert a space in ${element.id}`); + } + + function run(before, after) { + runInElement(textarea, before, after); + runInElement(plaintext, before, after); + runInElement(richedit, before, after); + } + run("123456789 ", "XY"); + run("12345 ", "XY"); + run("12345 ", "XY"); + run("123456789-", "XY"); +</script> diff --git a/tests/wpt/tests/editing/other/insertparagraph-in-non-splittable-element.html b/tests/wpt/tests/editing/other/insertparagraph-in-non-splittable-element.html index c77862fecb2..5ee72175830 100644 --- a/tests/wpt/tests/editing/other/insertparagraph-in-non-splittable-element.html +++ b/tests/wpt/tests/editing/other/insertparagraph-in-non-splittable-element.html @@ -42,7 +42,7 @@ const tests = [ selector: "colgroup", initial: "<div><table><colgroup><col></colgroup><tbody><tr><td>abc</td></tr></tbody></table></div>", // <colgroup> and its table parents cannot have paragraphs nor <br>, - // therefore, it should be handled outside <table> or the the first cell + // therefore, it should be handled outside <table> or the first cell // in the table. expected: [ "<div><table><colgroup><col></colgroup><tbody><tr><td><br>abc</td></tr></tbody></table></div>", // handled with the first cell case diff --git a/tests/wpt/tests/editing/other/shadow_root_iteration_in_block_style.html b/tests/wpt/tests/editing/other/shadow_root_iteration_in_block_style.html new file mode 100644 index 00000000000..2a7d8ac178e --- /dev/null +++ b/tests/wpt/tests/editing/other/shadow_root_iteration_in_block_style.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<script src='/resources/testdriver-vendor.js'></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> + <div id="container" contenteditable></div> + <div id="div" contenteditable>hello<span id="span" contenteditable style="color:red">world</span></div> +</body> +<script> + test(() => { + const shadowRoot = container.attachShadow({ mode: "open" }); + shadowRoot.innerHTML = + `<span contenteditable>shadow root</span>`; + const span = document.getElementById('span'); + const div = document.getElementById('div'); + const range = document.createRange(); + const selection = window.getSelection(); + range.selectNodeContents(span); + selection.removeAllRanges(); + selection.addRange(range); + document.execCommand("RemoveFormat"); + assert_equals( + div.innerHTML, + 'hello<span id="span" contenteditable="" style="">world</span>' + ); + }, "RemoveFormat should remove CSS styles of selected node"); +</script>
\ No newline at end of file diff --git a/tests/wpt/tests/fedcm/support/manifest_with_variable_accounts.json b/tests/wpt/tests/fedcm/support/manifest_with_variable_accounts.json index b3161e5f286..b0fa2bbcc15 100644 --- a/tests/wpt/tests/fedcm/support/manifest_with_variable_accounts.json +++ b/tests/wpt/tests/fedcm/support/manifest_with_variable_accounts.json @@ -3,12 +3,5 @@ "client_metadata_endpoint": "client_metadata.py", "id_assertion_endpoint": "token_with_account_id.py", "login_url": "login.html", - "modes": { - "active": { - "supports_use_other_account": true - }, - "passive": { - "supports_use_other_account": true - } - } + "supports_use_other_account": true } diff --git a/tests/wpt/tests/fetch/api/body/mime-type.any.js b/tests/wpt/tests/fetch/api/body/mime-type.any.js index 67c9af7da2d..ed19309bdb2 100644 --- a/tests/wpt/tests/fetch/api/body/mime-type.any.js +++ b/tests/wpt/tests/fetch/api/body/mime-type.any.js @@ -87,7 +87,7 @@ [ () => new Request("about:blank", { method: "POST", body: new Blob([""], { type: "Text/Plain" }), headers: [["Content-Type", "Text/Html"]] }), - () => new Response(new Blob([""], { type: "Text/Plain" }, { headers: [["Content-Type", "Text/Html"]] })) + () => new Response(new Blob([""], { type: "Text/Plain" }), { headers: [["Content-Type", "Text/Html"]] }) ].forEach(bodyContainerCreator => { const bodyContainer = bodyContainerCreator(); const cloned = bodyContainer.clone(); diff --git a/tests/wpt/tests/fetch/api/resources/keepalive-helper.js b/tests/wpt/tests/fetch/api/resources/keepalive-helper.js index 1e75c060aea..ad0e9bfa06c 100644 --- a/tests/wpt/tests/fetch/api/resources/keepalive-helper.js +++ b/tests/wpt/tests/fetch/api/resources/keepalive-helper.js @@ -117,7 +117,7 @@ function assertStashedTokenAsync( * * `unloadIframe` to unload the iframe before verifying stashed token to * simulate the situation that unloads after fetching. Note that this test is - * different from `keepaliveRedirectInUnloadTest()` in that the the latter + * different from `keepaliveRedirectInUnloadTest()` in that the latter * performs fetch() call directly in `unload` event handler, while this test * does it in `load`. */ diff --git a/tests/wpt/tests/fetch/http-cache/README.md b/tests/wpt/tests/fetch/http-cache/README.md index 512c422e108..f3815aabfd9 100644 --- a/tests/wpt/tests/fetch/http-cache/README.md +++ b/tests/wpt/tests/fetch/http-cache/README.md @@ -62,6 +62,7 @@ Possible members of a request object: - expected_response_headers - An array of `[header_name_string, header_value_string]` representing headers to check the response for. See also response_headers. - expected_response_text - A string to check the response body against. If not present, `response_body` will be checked if present and non-null; otherwise the response body will be checked for the test uuid (unless the status code disallows a body). Set to `null` to disable all response body checking. +- url_params - A string of url parameters that will be appended to the end of the url, separated by "&" and without leading "&". Some headers in `response_headers` are treated specially: @@ -69,4 +70,3 @@ Some headers in `response_headers` are treated specially: * For URL-carrying headers, the value will be appended as a query parameter for `target`. See the source for exact details. - diff --git a/tests/wpt/tests/fetch/http-cache/http-cache.js b/tests/wpt/tests/fetch/http-cache/http-cache.js index 0ca5fcc2bc0..e2234736910 100644 --- a/tests/wpt/tests/fetch/http-cache/http-cache.js +++ b/tests/wpt/tests/fetch/http-cache/http-cache.js @@ -255,6 +255,9 @@ function makeTestUrl (uuid, config) { if ('query_arg' in config) { arg = `&target=${config.query_arg}` } + if ('url_params' in config) { + arg = `${arg}&${config.url_params}` + } return `${base_url}resources/http-cache.py?dispatch=test&uuid=${uuid}${arg}` } diff --git a/tests/wpt/tests/fetch/http-cache/no-vary-search.tentative.any.js b/tests/wpt/tests/fetch/http-cache/no-vary-search.tentative.any.js new file mode 100644 index 00000000000..379da6a0594 --- /dev/null +++ b/tests/wpt/tests/fetch/http-cache/no-vary-search.tentative.any.js @@ -0,0 +1,33 @@ +// META: global=window,worker +// META: title=NoVarySearch HTTP Cache +// META: timeout=long +// META: script=/common/utils.js +// META: script=/common/get-host-info.sub.js +// META: script=http-cache.js +/* +NOTE for testing No-Vary-Search-Header: +If `params` is set to true, `expect=("dispatch" "uuid")` must be specified. +Otherwise: +- The same HTTP Cache will be used by other tests, which are supposed + to be distinguished by uuid. +- The test utility cannot get the server's states because UA will use the HTTP + Cache instead of sending a new request to server to ask for the latest state. +*/ +var tests = [ + { + name: "When params is set to true, URL differs only by their parameters (other than `dispatch` and `uuid`) should not be cached as different entries.", + requests: [ + { + url_params: "a=1&b=2", + response_headers: [ + ["Cache-Control", "max-age=10000"], + ["No-Vary-Search", "params, except=(\"dispatch\" \"uuid\")"], + ], + }, + { + expected_type: "cached" + } + ] + } +]; +run_tests(tests); diff --git a/tests/wpt/tests/fetch/security/dangling-markup/dangling-markup-mitigation-allowed-apis.tentative.https.html b/tests/wpt/tests/fetch/security/dangling-markup/dangling-markup-mitigation-allowed-apis.https.html index 428decfc583..62804283075 100644 --- a/tests/wpt/tests/fetch/security/dangling-markup/dangling-markup-mitigation-allowed-apis.tentative.https.html +++ b/tests/wpt/tests/fetch/security/dangling-markup/dangling-markup-mitigation-allowed-apis.https.html @@ -11,13 +11,18 @@ `location.replace(\`${dangling_url}\`)`, ]; - function get_requests(worker, expected) { - return new Promise(resolve => { + function get_requests(test, worker, expected) { + return new Promise((resolve, reject) => { + let didTimeout = false; + test.step_timeout(() => { + didTimeout = true; + reject("get_requests timed out"); + }, 1000); navigator.serviceWorker.addEventListener('message', function onMsg(evt) { if (evt.data.size >= expected) { navigator.serviceWorker.removeEventListener('message', onMsg); resolve(evt.data); - } else { + } else if (!didTimeout) { worker.postMessage(""); } }); @@ -40,6 +45,7 @@ }); const dangling_resource = "404?type=text/javascript&\n<" + const dangling_resource_expected = "404?type=text/javascript&%3C" const api_calls = [ [`const xhr = new XMLHttpRequest(); xhr.open("GET", \`${"xhr" + dangling_resource}\`); @@ -54,22 +60,30 @@ ]; - navigator.serviceWorker.register('service-worker.js'); - const iframe = document.createElement('iframe'); - iframe.src = "resources/empty.html"; - document.body.appendChild(iframe); + let iframe, registration; + promise_test(async t => { + iframe = document.createElement('iframe'); + iframe.src = "resources/empty.html"; + document.body.appendChild(iframe); + await new Promise(resolve => iframe.onload = resolve); + registration = await navigator.serviceWorker.register('service-worker.js'); + if (!iframe.contentWindow.navigator.serviceWorker.controller) + await new Promise(resolve => iframe.contentWindow.navigator.serviceWorker.oncontrollerchange = resolve); + }, "Setup controlled frame"); + + let number_api_calls = 0; api_calls.forEach(call => { - promise_test(t => { - return new Promise(resolve => { - navigator.serviceWorker.ready.then(t.step_func(registration => { - iframe.contentWindow.eval(call[0]); - get_requests(registration.active, 0).then(t.step_func(requests => { - resolve(assert_true(requests.has(call[1] + dangling_resource))); - })); - })); - }); + promise_test(async t => { + iframe.contentWindow.eval(call[0]); + const requests = await get_requests(t, registration.active, number_api_calls + 1); + assert_equals(Array.from(requests)[number_api_calls], call[1] + dangling_resource_expected); + number_api_calls++; }, `Does not block ${call[1]}`); }); + promise_test(async () => { + iframe.remove(); + registration.unregister(); + }, "Clean up iframe"); async_test(t => { let url = new URL(location.origin + "/" + dangling_url); diff --git a/tests/wpt/tests/fledge/tentative/component-ads.https.window.js b/tests/wpt/tests/fledge/tentative/component-ads.https.window.js index 6fec80102bb..9e3e6e8878d 100644 --- a/tests/wpt/tests/fledge/tentative/component-ads.https.window.js +++ b/tests/wpt/tests/fledge/tentative/component-ads.https.window.js @@ -169,15 +169,14 @@ subsetTest(promise_test, async test => { window.fence.reportEvent({eventType: "beacon", eventData: status, destination: ["buyer"]});`); - await joinInterestGroup( - test, uuid, - { biddingLogicURL: - createBiddingScriptURL({ - generateBid: - 'if (interestGroup.componentAds !== undefined) throw "unexpected componentAds"', - reportWin: - `registerAdBeacon({beacon: "${createBidderBeaconURL(uuid)}"});` }), - ads: [{renderUrl: renderURL}]}); + await joinInterestGroup(test, uuid, { + biddingLogicURL: createBiddingScriptURL({ + generateBid: + 'if (interestGroup.componentAds !== undefined) throw "unexpected componentAds"', + reportWin: `registerAdBeacon({beacon: "${createBidderBeaconURL(uuid)}"});` + }), + ads: [{renderURL: renderURL}] + }); await runBasicFledgeAuctionAndNavigate( test, uuid, {decisionLogicURL: createDecisionScriptURL( diff --git a/tests/wpt/tests/fledge/tentative/cross-origin.https.window.js b/tests/wpt/tests/fledge/tentative/cross-origin.https.window.js index 6c95f74c1f5..c1119a94d59 100644 --- a/tests/wpt/tests/fledge/tentative/cross-origin.https.window.js +++ b/tests/wpt/tests/fledge/tentative/cross-origin.https.window.js @@ -132,7 +132,7 @@ subsetTest(promise_test, async test => { subsetTest(promise_test, async test => { const uuid = generateUuid(test); - // Join an interest group owned by the the main frame's origin. + // Join an interest group owned by the main frame's origin. await joinInterestGroup(test, uuid); let iframe = await createIframe(test, OTHER_ORIGIN1); @@ -147,7 +147,7 @@ subsetTest(promise_test, async test => { subsetTest(promise_test, async test => { const uuid = generateUuid(test); - // Join an interest group owned by the the main frame's origin. + // Join an interest group owned by the main frame's origin. await joinInterestGroup(test, uuid); let iframe = await createIframe(test, OTHER_ORIGIN1, "run-ad-auction"); @@ -183,7 +183,7 @@ subsetTest(promise_test, async test => { subsetTest(promise_test, async test => { const uuid = generateUuid(test); - // Join an interest group owned by the the main frame's origin. + // Join an interest group owned by the main frame's origin. await joinInterestGroup(test, uuid); let iframe = await createIframe(test, OTHER_ORIGIN1, `run-ad-auction ${OTHER_ORIGIN1}`); diff --git a/tests/wpt/tests/fledge/tentative/interest-group-update.https.window.js b/tests/wpt/tests/fledge/tentative/interest-group-update.https.window.js index 04110054744..24d814cf091 100644 --- a/tests/wpt/tests/fledge/tentative/interest-group-update.https.window.js +++ b/tests/wpt/tests/fledge/tentative/interest-group-update.https.window.js @@ -81,6 +81,12 @@ const makeTestForUpdate = ({ }; interestGroupOverrides.updateURL = createUpdateURL(updateParams); await joinInterestGroup(test, uuid, interestGroupOverrides); + if (interestGroupFieldName === `ads`) { + let interestGroup = createInterestGroupForOrigin( + uuid, window.location.origin, interestGroupOverrides); + interestGroup.ads = responseOverride; + await makeInterestGroupKAnonymous(interestGroup); + } // Run an auction until there's a winner, which means update occurred. let auctionResult = await runBasicFledgeAuction(test, uuid, auctionConfigOverrides); @@ -404,4 +410,3 @@ makeTestForNoUpdate({ trustedBiddingSignalsKeys: ['key'], }, }); - diff --git a/tests/wpt/tests/fledge/tentative/kanon-status-below-threshold.https.window.js b/tests/wpt/tests/fledge/tentative/kanon-status-below-threshold.https.window.js index 419b94bd781..12e8747af0b 100644 --- a/tests/wpt/tests/fledge/tentative/kanon-status-below-threshold.https.window.js +++ b/tests/wpt/tests/fledge/tentative/kanon-status-below-threshold.https.window.js @@ -6,16 +6,35 @@ "use strict"; -subsetTest(promise_test, async test => { - const uuid = generateUuid(test); - await runReportTest( - test, uuid, - { reportWinSuccessCondition: - `browserSignals.kAnonStatus === "belowThreshold"`, - reportWin: - `sendReportTo('${createBidderReportURL(uuid)}');` }, - // expectedReportURLs: - [createBidderReportURL(uuid)]); +subsetTest( + promise_test, + async test => { + const uuid = generateUuid(test); + + let reportWin = ` + if (browserSignals.kAnonStatus !== "belowThreshold") { + sendReportTo('${createBidderReportURL(uuid, 'error')}'); + return false; + } + sendReportTo('${createBidderReportURL(uuid)}'); + `; + let interestGroupOverrides = { + biddingLogicURL: createBiddingScriptURL({reportWin: reportWin}) + }; + let interestGroup = createInterestGroupForOrigin( + uuid, window.location.origin, interestGroupOverrides); + await joinInterestGroupWithoutDefaults(test, interestGroup); + + // Make the interest group not k-anonymous. + await test_driver.set_protected_audience_k_anonymity( + interestGroup.owner, interestGroup.name, []); + + let auctionConfigOverrides = { + decisionLogicURL: createDecisionScriptURL(uuid, {}) + }; + await runBasicFledgeAuctionAndNavigate( + test, uuid, auctionConfigOverrides); + await waitForObservedRequests(uuid, [createBidderReportURL(uuid)]); }, 'Check kAnonStatus is "belowThreshold" when FledgeConsiderKAnonymity' + - 'is enabled and FledgeEnforceKAnonymity is disabled'); + 'is enabled and FledgeEnforceKAnonymity is disabled'); diff --git a/tests/wpt/tests/fledge/tentative/resources/fledge-util.sub.js b/tests/wpt/tests/fledge/tentative/resources/fledge-util.sub.js index e0d5d99bb65..0a18ea40d3d 100644 --- a/tests/wpt/tests/fledge/tentative/resources/fledge-util.sub.js +++ b/tests/wpt/tests/fledge/tentative/resources/fledge-util.sub.js @@ -288,6 +288,7 @@ function createInterestGroupForOrigin(uuid, origin, async function joinInterestGroupWithoutDefaults(test, interestGroup, durationSeconds = 60) { await navigator.joinAdInterestGroup(interestGroup, durationSeconds); + await makeInterestGroupKAnonymous(interestGroup); test.add_cleanup( async () => { await navigator.leaveAdInterestGroup(interestGroup); }); } @@ -1030,3 +1031,107 @@ async function setCookie(test) { document.cookie = 'cookie=cookie; path=/' test.add_cleanup(deleteAllCookies); } + +async function makeInterestGroupKAnonymous(passedInterestGroup) { + // Make a copy so we can sanitize fields without affecting the tests. + let interestGroup = structuredClone(passedInterestGroup); + const ownerURL = new URL(interestGroup.owner); + interestGroup.owner = ownerURL.origin; + interestGroup.name = String(interestGroup.name).toWellFormed(); + interestGroup.biddingLogicURL = + (new URL(interestGroup.biddingLogicURL, BASE_URL)).toString(); + + function b64(array) { + return btoa(String.fromCharCode.apply(null, array)); + } + let hashes = []; + if (Array.isArray(interestGroup.ads)) { + for (const ad of interestGroup.ads) { + hashes.push(b64(await computeKeyHashOfAd(interestGroup, ad))); + hashes.push( + b64(await computeKeyHashOfReportingId(interestGroup, ad, null))); + if (Array.isArray(ad.selectableBuyerAndSellerReportingIds)) { + for (const id of ad.selectableBuyerAndSellerReportingIds) { + hashes.push( + b64(await computeKeyHashOfReportingId(interestGroup, ad, id))); + } + } + } + } + if (Array.isArray(interestGroup.adComponents)) { + for (const ad of interestGroup.adComponents) { + hashes.push(b64(await computeKeyHashOfComponentAd(interestGroup, ad))); + } + } + await test_driver.set_protected_audience_k_anonymity( + interestGroup.owner, interestGroup.name, hashes); +} + +async function computeKeyHashOfAd(ig, ad) { + const encoder = new TextEncoder(); + const kAnonKey = encoder.encode( + `AdBid\n${ig.owner}/\n${ig.biddingLogicURL}\n${ad.renderURL}`); + return new Uint8Array(await window.crypto.subtle.digest('SHA-256', kAnonKey)); +} + +async function computeKeyHashOfReportingId(ig, ad, selectedReportingId = null) { + const encoder = new TextEncoder(); + let kAnonKey = null; + if (!selectedReportingId) { + if (ad.buyerAndSellerReportingId) { + kAnonKey = encoder.encode( + `BuyerAndSellerReportId\n${ig.owner}/\n${ig.biddingLogicURL}\n${ + ad.renderURL}\n${ad.buyerAndSellerReportingId}`); + } else if (ad.buyerReportingId) { + kAnonKey = encoder.encode(`BuyerReportId\n${ig.owner}/\n${ + ig.biddingLogicURL}\n${ad.renderURL}\n${ad.buyerReportingId}`); + } else { + kAnonKey = encoder.encode(`NameReport\n${ig.owner}/\n${ + ig.biddingLogicURL}\n${ad.renderURL}\n${ig.name}`); + } + } else { + function encodeKeyPartInto(part, array) { + array[0] = 0x0a; + if (!part) { + for (let i = 1; i < 6; i++) { + array[i] = 0x00; + } + return 6; + } + const len = part.length; + array[1] = 0x01; + array[2] = (len >> 24) % 256 + array[3] = (len >> 16) % 256 + array[4] = (len >> 8) % 256 + array[5] = len % 256; + encoder.encodeInto(part, array.subarray(6)); + return 1 + 5 + len; + } + const baseText = `SelectedBuyerAndSellerReportId\n${ig.owner}/\n${ + ig.biddingLogicURL}\n${ad.renderURL}`; + const selectedReportingIdLen = + 1 + 5 + (selectedReportingId ? selectedReportingId.length : 0); + const buyerAndSellerReportingIdLen = 1 + 5 + + (ad.buyerAndSellerReportingId ? ad.buyerAndSellerReportingId.length : 0) + const buyerReportingIdLen = + 1 + 5 + (ad.buyerReportingId ? ad.buyerReportingId.length : 0) + const expectedLen = baseText.length + selectedReportingIdLen + + buyerAndSellerReportingIdLen + buyerReportingIdLen; + kAnonKey = new Uint8Array(expectedLen); + let actualLen = 0; + actualLen += encoder.encodeInto(baseText, kAnonKey).written; + actualLen += + encodeKeyPartInto(selectedReportingId, kAnonKey.subarray(actualLen)); + actualLen += encodeKeyPartInto( + ad.buyerAndSellerReportingId, kAnonKey.subarray(actualLen)); + actualLen += + encodeKeyPartInto(ad.buyerReportingId, kAnonKey.subarray(actualLen)); + } + return new Uint8Array(await window.crypto.subtle.digest('SHA-256', kAnonKey)); +} + +async function computeKeyHashOfComponentAd(ig, ad) { + const encoder = new TextEncoder(); + const kAnonKey = encoder.encode(`ComponentBid\n${ad.renderURL}`); + return new Uint8Array(await window.crypto.subtle.digest('SHA-256', kAnonKey)); +} diff --git a/tests/wpt/tests/fledge/tentative/trusted-scoring-signals.https.window.js b/tests/wpt/tests/fledge/tentative/trusted-scoring-signals.https.window.js index ea820d3acf5..df613facaad 100644 --- a/tests/wpt/tests/fledge/tentative/trusted-scoring-signals.https.window.js +++ b/tests/wpt/tests/fledge/tentative/trusted-scoring-signals.https.window.js @@ -1023,12 +1023,12 @@ subsetTest(promise_test, async test => { }], adComponents: [ { - renderUrl: componentURL1, + renderURL: componentURL1, sizeGroup: 'flexible', creativeScanningMetadata: 'c1' }, { - renderUrl: componentURL2, + renderURL: componentURL2, sizeGroup: 'flexible', creativeScanningMetadata: 'c2' } diff --git a/tests/wpt/tests/focus/focus-double-sync-calls.tentative.html b/tests/wpt/tests/focus/focus-double-sync-calls.html index 6dbfa71e735..8d5f5c8a79f 100644 --- a/tests/wpt/tests/focus/focus-double-sync-calls.tentative.html +++ b/tests/wpt/tests/focus/focus-double-sync-calls.html @@ -11,32 +11,32 @@ <input id="input2" placeholder="input2"/> </body> <script> -// Tentative due to https://github.com/whatwg/html/issues/11177 - // This test tests calling focus() in the "focus" event // listener on the element again when the focus has // moved away. -promise_test((t) => { + +// This is for https://github.com/whatwg/html/pull/11182 +async_test((t) => { let previouslyCalled = false; let counter = 0; - let p = new Promise(r=>{ - input1.addEventListener("focus", function(e) { - counter++; - if (!previouslyCalled) { - input2.focus(); - previouslyCalled = true; - } - input1.focus(); - // In a success run, counter can only be 2 here - // because focus() synchronously fire the event listener. - if (counter == 2) { - r(); - } - }); + input1.addEventListener("focus", function(e) { + counter++; + if (!previouslyCalled) { + input2.focus(); + previouslyCalled = true; + } + + input1.focus(); + + if (counter !== 2) { + // If `lock-for-focus` is implemented, the above input1.focus() + // shouldn't work, so the counter should never be 2. + assert_unreached(); + } + t.done(); }); input1.focus(); - return p; }, "Element.focus() in focus listener when focus has moved away"); </script> diff --git a/tests/wpt/tests/focus/nested-focus-within-iframe-focus-event.html b/tests/wpt/tests/focus/nested-focus-within-iframe-focus-event.html new file mode 100644 index 00000000000..e0daf56386e --- /dev/null +++ b/tests/wpt/tests/focus/nested-focus-within-iframe-focus-event.html @@ -0,0 +1,29 @@ +<!doctype html> +<head> + <meta charset=utf-8> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <title>Test calling dialog focusing steps in navigable's focus handler</title> + <script src=/resources/testharness.js></script> + <script src=/resources/testharnessreport.js></script> +</head> +<body> + <iframe id="iframe" srcdoc="<dialog>Hello</dialog>"></iframe> +</body> +<script> +// https://github.com/whatwg/html/pull/11182 +window.onload = function() { + async_test((t) => { + iframe.addEventListener("focus", function() { + const dialog = iframe.contentDocument.body.querySelector("dialog"); + dialog.showModal(); + // If `lock-for-focus` is implemented, showModal() can't + // trigger the dialog-focusing-steps, hence the activeElement + // shouldn't be the dialog. + assert_equals(iframe.contentDocument.activeElement, dialog); + t.done(); + }) + + iframe.focus(); + }, "dialog.focus() in navigable's focus handler"); +} +</script> diff --git a/tests/wpt/tests/fonts/adobe-fonts/LICENSE b/tests/wpt/tests/fonts/adobe-fonts/LICENSE index ac5f0b04320..4cbddfbc646 100644 --- a/tests/wpt/tests/fonts/adobe-fonts/LICENSE +++ b/tests/wpt/tests/fonts/adobe-fonts/LICENSE @@ -1,4 +1,4 @@ -CSS Half-Width Orientation Test and CSS Full-Width Orientation Test are released under the SIL Open Font License - please read it carefully and do not download the fonts unless you agree to the the terms of the license: +CSS Half-Width Orientation Test and CSS Full-Width Orientation Test are released under the SIL Open Font License - please read it carefully and do not download the fonts unless you agree to the terms of the license: Copyright © 2013 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Names CSS Half-Width Orientation Test and CSS Full-Width Orientation Test This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL diff --git a/tests/wpt/tests/fonts/math/largeop-displayoperatorminheight3000-2AFF-axisheight1000.woff b/tests/wpt/tests/fonts/math/largeop-displayoperatorminheight3000-2AFF-axisheight1000.woff Binary files differnew file mode 100644 index 00000000000..13d3e4ad4ed --- /dev/null +++ b/tests/wpt/tests/fonts/math/largeop-displayoperatorminheight3000-2AFF-axisheight1000.woff diff --git a/tests/wpt/tests/forced-colors-mode/forced-colors-mode-55-ref.html b/tests/wpt/tests/forced-colors-mode/forced-colors-mode-55-ref.html new file mode 100644 index 00000000000..55ecd284b70 --- /dev/null +++ b/tests/wpt/tests/forced-colors-mode/forced-colors-mode-55-ref.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Forced colors mode - outline and column color reference.</title> +<style> + .grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + height: 320px; + width: 320px; + forced-color-adjust: none; + row-rule-color: CanvasText; + row-rule-style: dotted; + column-rule-color: CanvasText; + column-rule-style: solid; + } + .grid-item { + width: 100px; + height: 100px; + } +</style> +<p> + The grid's column-rule-color and row-rule-color should be blue + when forced colors mode is off and CanvasText in forced colors mode. +</p> +<div class="grid"> + <div class="grid-item"></div> + <div class="grid-item"></div> + <div class="grid-item"></div> + <div class="grid-item"></div> + <div class="grid-item"></div> +</div> diff --git a/tests/wpt/tests/forced-colors-mode/forced-colors-mode-55.html b/tests/wpt/tests/forced-colors-mode/forced-colors-mode-55.html new file mode 100644 index 00000000000..db457fb0cfe --- /dev/null +++ b/tests/wpt/tests/forced-colors-mode/forced-colors-mode-55.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Forced colors mode - grid column-rule-color and row-rule-color.</title> +<link rel="help" href="https://www.w3.org/TR/css-color-adjust-1/#forced-colors-properties"> +<link rel=match href="forced-colors-mode-55-ref.html"> +<style> + .grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + height: 320px; + width: 320px; + row-rule-style: dotted; + column-rule-style: solid; + row-rule-color: rgb(0, 0, 255); + column-rule-color: rgb(0, 0, 255); + } + + .grid-item { + width: 100px; + height: 100px; + } +</style> +<p> + The grid's column-rule-color and row-rule-color should be blue + when forced colors mode is off and CanvasText in forced colors mode. +</p> +<div class="grid"> + <div class="grid-item"></div> + <div class="grid-item"></div> + <div class="grid-item"></div> + <div class="grid-item"></div> + <div class="grid-item"></div> +</div> diff --git a/tests/wpt/tests/forced-colors-mode/forced-colors-mode-56-ref.html b/tests/wpt/tests/forced-colors-mode/forced-colors-mode-56-ref.html new file mode 100644 index 00000000000..d3a90b8c87f --- /dev/null +++ b/tests/wpt/tests/forced-colors-mode/forced-colors-mode-56-ref.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Forced colors mode - grid column and row color with sys colors.</title> +<style> + .grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + height: 320px; + width: 320px; + forced-color-adjust: none; + row-rule-color: LinkText; + row-rule-style: dotted; + column-rule-color: LinkText; + column-rule-style: solid; + } + + .grid-item { + width: 100px; + height: 100px; + } +</style> +<p> + The grid's column-rule-color and row-rule-color should be LinkText when + forced colors mode is enabled. +</p> +<div class="grid"> + <div class="grid-item"></div> + <div class="grid-item"></div> + <div class="grid-item"></div> + <div class="grid-item"></div> + <div class="grid-item"></div> +</div> diff --git a/tests/wpt/tests/forced-colors-mode/forced-colors-mode-56.html b/tests/wpt/tests/forced-colors-mode/forced-colors-mode-56.html new file mode 100644 index 00000000000..632a6c7bd03 --- /dev/null +++ b/tests/wpt/tests/forced-colors-mode/forced-colors-mode-56.html @@ -0,0 +1,37 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Forced colors mode - grid column and row color with sys colors.</title> +<link rel="help" href="https://www.w3.org/TR/css-color-adjust-1/#forced-colors-properties"> +<link rel=match href="forced-colors-mode-56-ref.html"> +<style> + :root { + --hc-color: LinkText; + } + + .grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + height: 320px; + width: 320px; + row-rule-style: dotted; + column-rule-style: solid; + row-rule-color: var(--hc-color); + column-rule-color: var(--hc-color); + } + .grid-item { + width: 100px; + height: 100px; + } +</style> +<p> + The grid's column-rule-color and row-rule-color should be LinkText when + forced colors mode is enabled. +</p> +<div class="grid"> + <div class="grid-item"></div> + <div class="grid-item"></div> + <div class="grid-item"></div> + <div class="grid-item"></div> + <div class="grid-item"></div> +</div> diff --git a/tests/wpt/tests/html-aam/roles-contextual.tentative.html b/tests/wpt/tests/html-aam/roles-contextual.tentative.html index 0f918b24c70..e3b5f4e925b 100644 --- a/tests/wpt/tests/html-aam/roles-contextual.tentative.html +++ b/tests/wpt/tests/html-aam/roles-contextual.tentative.html @@ -16,7 +16,7 @@ See https://github.com/w3c/aria/pull/1931 --> <nav> - <footer data-testname="el-footer" aria-label="x" data-expectedrole="sectionfooter" class="ex">x</aside> + <footer data-testname="el-footer" aria-label="x" data-expectedrole="sectionfooter" class="ex">x</footer> </nav> <main> <footer data-testname="el-footer-ancestormain" data-expectedrole="sectionfooter" class="ex">x</footer> @@ -33,4 +33,4 @@ AriaUtils.verifyRolesBySelector(".ex"); </script> </body> -</html>
\ No newline at end of file +</html> diff --git a/tests/wpt/tests/html/anonymous-iframe/fenced-frame-bypass.tentative.https.window.js b/tests/wpt/tests/html/anonymous-iframe/fenced-frame-bypass.tentative.https.window.js index e5d12397a9a..b84dffb9aa4 100644 --- a/tests/wpt/tests/html/anonymous-iframe/fenced-frame-bypass.tentative.https.window.js +++ b/tests/wpt/tests/html/anonymous-iframe/fenced-frame-bypass.tentative.https.window.js @@ -26,7 +26,7 @@ promise_test(async test => { const cross_origin = get_host_info().HTTPS_REMOTE_ORIGIN; const msg_queue = token(); - // Create the the 3 actors. + // Create the 3 actors. const iframe_credentialless_1 = newIframeCredentialless(cross_origin); const fenced_frame = await newFencedFrame(cross_origin); send(fenced_frame, ` diff --git a/tests/wpt/tests/html/browsers/browsing-the-web/history-traversal/pagereveal/order-in-bfcache-restore.html b/tests/wpt/tests/html/browsers/browsing-the-web/history-traversal/pagereveal/order-in-bfcache-restore.html index f453c80a2ae..fae06df00f6 100644 --- a/tests/wpt/tests/html/browsers/browsing-the-web/history-traversal/pagereveal/order-in-bfcache-restore.html +++ b/tests/wpt/tests/html/browsers/browsing-the-web/history-traversal/pagereveal/order-in-bfcache-restore.html @@ -15,7 +15,7 @@ runBfcacheTest({ funcBeforeNavigation: async () => { // This function executes in pageA - // Wait for an animation frame to ensure the the initial-load + // Wait for an animation frame to ensure the initial-load // `pagereveal` has already been fired so it doesn't get recorded // below. const raf = new Promise(resolve => requestAnimationFrame(resolve)); diff --git a/tests/wpt/tests/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/nav-cancelation-2.sub.html b/tests/wpt/tests/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/nav-cancelation-2.sub.html index c081513b7c8..21096519503 100644 --- a/tests/wpt/tests/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/nav-cancelation-2.sub.html +++ b/tests/wpt/tests/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/nav-cancelation-2.sub.html @@ -131,7 +131,7 @@ promise_test(async t => { // This indicates a weird state where the grandparent's immediate child fired // its load event in response to navigation cancelation (see the assertions // above), but the grandparent itself is still blocked on the grandchild - // loading. If this is the case, the the postMessage() (that sets + // loading. If this is the case, the postMessage() (that sets // `grandchild_iframe_load_fired = true`) is received by the grandparent just // before the grandparent's load event is unblocked and fired. Therefore we // can detect this situation by checking `grandchild_iframe_load_fired`. diff --git a/tests/wpt/tests/html/browsers/browsing-the-web/unloading-documents/prompt/004-1.html b/tests/wpt/tests/html/browsers/browsing-the-web/unloading-documents/prompt/004-1.html index a3ca82f520a..5391f933f9a 100644 --- a/tests/wpt/tests/html/browsers/browsing-the-web/unloading-documents/prompt/004-1.html +++ b/tests/wpt/tests/html/browsers/browsing-the-web/unloading-documents/prompt/004-1.html @@ -23,6 +23,6 @@ onload = function() { } </script> // child frame with no onbeforeunload listener. Should leave the parent as unsalvageable. -// Adding the iframe prevents potential implementation bugs where the the recursive steps of #prompt-to-unload-a-document +// Adding the iframe prevents potential implementation bugs where the recursive steps of #prompt-to-unload-a-document // would overwrite the salvageable state of the parent. <iframe></iframe> diff --git a/tests/wpt/tests/html/cross-origin-embedder-policy/blob.https.html b/tests/wpt/tests/html/cross-origin-embedder-policy/blob.https.html index ce72f247ef7..e27b281a11d 100644 --- a/tests/wpt/tests/html/cross-origin-embedder-policy/blob.https.html +++ b/tests/wpt/tests/html/cross-origin-embedder-policy/blob.https.html @@ -2,6 +2,7 @@ <meta charset=utf-8> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/common/dispatcher/dispatcher.js"></script> <script src="/common/get-host-info.sub.js"></script> <script src="/common/utils.js"></script> <div id=log></div> @@ -22,6 +23,14 @@ const origins = get_host_info(); } ].forEach(({ origin, crossOrigin }) => { ["subframe", "navigate", "popup"].forEach(variant => { + // Due to `noopener` being enforced on Blob URLs where the corresponding + // origin is cross-site to the opening context's top-level site, require + // dispatcher.js to pass information back after window.open(). + if (origin === origins.HTTPS_NOTSAMESITE_ORIGIN && + crossOrigin === origins.HTTPS_ORIGIN && + variant === "popup") { + return; + } async_test(t => { const id = token(); const frame = document.createElement("iframe"); @@ -41,4 +50,29 @@ const origins = get_host_info(); }, `Cross-Origin-Embedder-Policy and blob: URL from ${origin} in subframe via ${variant}`); }); }); + +// New test for the specific case using dispatcher.js for popups. +promise_test(async t => { + const origin = origins.HTTPS_NOTSAMESITE_ORIGIN; + const crossOrigin = origins.HTTPS_ORIGIN; + const variant = "popup-dispatch"; + const id = token(); + + const frame = document.createElement("iframe"); + t.add_cleanup(() => { frame.remove(); }); + + const path = new URL("resources/blob-url-factory.html", window.location).pathname; + frame.src = `${origin}${path}?id=${id}&variant=${variant}&crossOrigin=${crossOrigin}`; + document.body.append(frame); + + // Use dispatcher to wait for the message. + const message = await receive(id); + const data = JSON.parse(message); + + assert_equals(data.origin, origin, "Message origin should match test origin"); + assert_true(data.sameOriginNoCORPSuccess, "Same-origin fetch without CORP should succeed"); + assert_true(data.crossOriginNoCORPFailure, "Cross-origin fetch without CORP should fail"); + +}, `Cross-Origin-Embedder-Policy and blob: URL from ${origins.HTTPS_NOTSAMESITE_ORIGIN} in popup (using dispatcher)`); + </script> diff --git a/tests/wpt/tests/html/cross-origin-embedder-policy/resources/blob-url-factory.html b/tests/wpt/tests/html/cross-origin-embedder-policy/resources/blob-url-factory.html index 928d404672d..98937a2501d 100644 --- a/tests/wpt/tests/html/cross-origin-embedder-policy/resources/blob-url-factory.html +++ b/tests/wpt/tests/html/cross-origin-embedder-policy/resources/blob-url-factory.html @@ -1,22 +1,37 @@ <body> +<script src="/common/utils.js"></script> +<script src="/common/dispatcher/dispatcher.js"></script> <script src="script-factory.js"></script> <script> const query = new URLSearchParams(window.location.search); const id = query.get("id"); const variant = query.get("variant"); let parent = "parent"; +let useDispatcher = false; + if (variant === "subframe") { parent = "parent.parent"; } else if (variant === "popup") { parent = "opener.parent"; +} else if (variant === "popup-dispatch") { + useDispatcher = true; } -const blob = new Blob([`<script>${createScript(window.origin, query.get("crossOrigin"), parent, id)}<\/script>`], { type: "text/html" }); + +const blobContent = ` + <!doctype html> + <base href="${window.location.href}"> + <script src="/common/utils.js"><\/script> + <script src="/common/dispatcher/dispatcher.js"><\/script> + + <script>${createScript(window.origin, query.get("crossOrigin"), parent, id, useDispatcher)}<\/script> +`; +const blob = new Blob([blobContent], { type: "text/html" }); const blobURL = URL.createObjectURL(blob); if (variant === "subframe") { const frame = document.createElement("iframe"); frame.src = blobURL; document.body.append(frame); -} else if (variant === "popup") { +} else if (variant === "popup" || variant === "popup-dispatch") { window.open(blobURL); } else { window.location = blobURL; diff --git a/tests/wpt/tests/html/cross-origin-embedder-policy/resources/script-factory.js b/tests/wpt/tests/html/cross-origin-embedder-policy/resources/script-factory.js index ac7a1fda06f..e57449abac4 100644 --- a/tests/wpt/tests/html/cross-origin-embedder-policy/resources/script-factory.js +++ b/tests/wpt/tests/html/cross-origin-embedder-policy/resources/script-factory.js @@ -1,6 +1,5 @@ // This creates a serialized <script> element that is useful for blob/data/srcdoc-style tests. - -function createScript(sameOrigin, crossOrigin, type="parent", id="") { +function createScript(sameOrigin, crossOrigin, type="parent", id="", useDispatcher=false) { return `const data = { id: "${id}", opener: !!window.opener, origin: window.origin, @@ -23,6 +22,8 @@ Promise.all(records).then(() => { if ("${type}" === "channel") { const bc = new BroadcastChannel("${id}"); bc.postMessage(data); + } else if (${useDispatcher}) { + send("${id}", JSON.stringify(data)); } else { window.${type}.postMessage(data, "*"); } diff --git a/tests/wpt/tests/html/cross-origin-opener-policy/resource-popup.https.html b/tests/wpt/tests/html/cross-origin-opener-policy/resource-popup.https.html index 481cceb72f0..ec2f7af28fe 100644 --- a/tests/wpt/tests/html/cross-origin-opener-policy/resource-popup.https.html +++ b/tests/wpt/tests/html/cross-origin-opener-policy/resource-popup.https.html @@ -40,7 +40,7 @@ const coop_resource_test = ({parentCoop, resourceCoop, resource, resourceName, v // redirected to the HTML document. bc.postMessage(null); // Prepare to close the "child" popup in the case that it has not yet - // redirected to the the HTML document. + // redirected to the HTML document. bc.onmessage = () => bc.postMessage(null); }); }, `${resource} - parent COOP: "${parentCoop}"; child COOP: "${resourceCoop}"`); diff --git a/tests/wpt/tests/html/semantics/embedded-content/media-elements/error-sequence.html b/tests/wpt/tests/html/semantics/embedded-content/media-elements/error-sequence.html new file mode 100644 index 00000000000..e2cf4123111 --- /dev/null +++ b/tests/wpt/tests/html/semantics/embedded-content/media-elements/error-sequence.html @@ -0,0 +1,353 @@ +<!DOCTYPE html> +<html> +<head> +<title>Test sequence of effects of errors +</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/media-source/mediasource-util.js"></script> +</head> +<body> +</body> +<script> +'use strict'; + +function create_audio(t) { + const audio = document.createElement('audio'); + audio.controls = true; + audio.watcher = new EventWatcher( + t, audio, + [ + 'loadstart', + 'waiting', + 'error', + 'ended', + 'loadedmetadata', + 'canplay', + 'volumechange', + 'playing', + 'pause', + ]); + document.body.appendChild(audio); + return audio; +} + +promise_test(async t => { + const audio = create_audio(t); + audio.src = ''; + assert_equals(audio.error, null, 'initial error attribute'); + // Queue a volumechange event on the media element task source. + audio.volume = 0; + // The dedicated media source failure steps are described as queued, but + // browsers do not make state changes asynchronously. + // https://github.com/whatwg/html/issues/11155 + audio.onvolumechange = t.step_func(() => { + assert_equals(audio.error?.code, MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED, + 'error code'); + // Queue a second volumechange. This arrives after the error event + // because the error event is queued immediately after the resource + // selection algorithm synchronous steps. + audio.volume = 1; + }); + await audio.watcher.wait_for( + ['volumechange', 'loadstart', 'error', 'volumechange']); +}, 'empty src attribute'); + +promise_test(async t => { + const audio = create_audio(t); + // src is such that "the result of encoding-parsing a URL" is failure. + audio.src = 'https://#fragment'; + assert_equals(audio.error, null, 'initial error attribute'); + // Queue a volumechange event on the media element task source. + audio.volume = 0; + // The dedicated media source failure steps are described as queued from + // parallel steps in the resource selection algorithm, but browsers do not + // make state changes asynchronously, and they queue the error event + // immediately after the resource selection algorithm synchronous steps. + // https://github.com/whatwg/html/issues/11155 + audio.onvolumechange = t.step_func(() => { + assert_equals(audio.error?.code, MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED, + 'error code'); + audio.volume = 1; + }); + await audio.watcher.wait_for( + ['volumechange', 'loadstart', 'error', 'volumechange']); +}, 'urlRecord failure'); + +let resource; +promise_test(async t => { + resource = await MediaSourceUtil.fetchResourceOfManifest( + t, + '/media-source/webm/test-a-128k-44100Hz-1ch-manifest.json'); +}, 'fetch resource'); + +async function create_audio_with_source_buffer(t) { + const audio = create_audio(t); + + audio.source = new MediaSource(); + audio.source.watcher = new EventWatcher(t, audio.source, ['sourceopen']); + audio.src = URL.createObjectURL(audio.source); + await audio.watcher.wait_for('loadstart'); + await audio.source.watcher.wait_for('sourceopen'); + + assert_implements_optional(MediaSource.isTypeSupported(resource.type), + `${resource.type} supported`); + + audio.buffer = audio.source.addSourceBuffer(resource.type); + assert_equals(audio.buffer.mode, 'segments', + `${resource.type} buffer.mode`); + audio.buffer.watcher = + new EventWatcher(t, audio.buffer, ['updateend']); + return audio; +} + +// While different browsers pass different HAVE_NOTHING subtests, the four +// subtests are helpful to identify the different interactions. + +promise_test(async t => { + const audio = await create_audio_with_source_buffer(t); + assert_equals(audio.readyState, audio.HAVE_NOTHING, 'readyState'); + + // Queue a volumechange event on the media element task source to check that + // the event named 'error' is fired from the same task source. + audio.volume = 0; + audio.source.endOfStream("decode"); + audio.volume = 1; + await audio.watcher.wait_for(['volumechange', 'error', 'volumechange']); +}, 'error event while HAVE_NOTHING'); + +// This subtest is arranged to demonstrate that the specification does not +// describe what browsers do. Please do not adjust implementations to make +// this pass as https://github.com/whatwg/html/issues/11155 proposes changing +// the spec. +promise_test(async t => { + const audio = await create_audio_with_source_buffer(t); + assert_equals(audio.readyState, audio.HAVE_NOTHING, 'readyState'); + + // Queue a volumechange event on the media element task source + audio.volume = 0; + audio.source.endOfStream("decode"); + // The dedicated media source failure steps are described as queued so state + // would not change until the task runs. + await audio.watcher.wait_for('volumechange'); + assert_equals(audio.error, null, 'error attribute'); + await audio.watcher.wait_for('error'); + assert_equals(audio.error?.code, MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED, + 'error code'); +}, 'error attribute while HAVE_NOTHING'); + +// This subtest is arranged to demonstrate that the specification does not +// describe what browsers do. Please do not adjust implementations to make +// this pass as https://github.com/whatwg/html/issues/11155 proposes changing +// the spec. +promise_test(async t => { + const audio = await create_audio_with_source_buffer(t); + assert_equals(audio.readyState, audio.HAVE_NOTHING, 'readyState'); + + const play_promise = audio.play(); + await audio.watcher.wait_for('waiting'); + assert_false(audio.paused, 'paused attribute'); + + // 'error event while HAVE_NOTHING' checks the order of events. + audio.watcher.stop_watching(); + + // Queue a volumechange event on the media element task source to see + // whether the play promise is rejected from a task on same task source. + audio.volume = 0; + audio.source.endOfStream("decode"); + audio.volume = 1; + const sequence = []; + const events_promise = new Promise(resolve => { + audio.onvolumechange = t.step_func(() => { + sequence.push('volumechange'); + if (sequence.filter(_ => _ == 'volumechange').length == 2) { + resolve(); + } + }); + }); + try { + await play_promise; + assert_unreached('promise should reject'); + } catch { + sequence.push('rejection'); + } + await events_promise; + assert_array_equals(sequence, ['volumechange', 'rejection', 'volumechange'], + 'sequence'); +}, 'play() promise while HAVE_NOTHING'); + +// This subtest is arranged to demonstrate inconsistencies between +// implementations. Please do not adjust implementations to make this pass as +// https://github.com/whatwg/html/issues/11155 proposes changing the spec. +promise_test(async t => { + const audio = await create_audio_with_source_buffer(t); + assert_equals(audio.readyState, audio.HAVE_NOTHING, 'readyState'); + + const play_promise = audio.play(); + await audio.watcher.wait_for('waiting'); + assert_false(audio.paused, 'paused attribute'); + + // 'error event while HAVE_NOTHING' checks the order of events. + audio.watcher.stop_watching(); + + // The resource selection algorithm describes the dedicated media source + // failure steps as queued and the event named "error" as fired + // synchronously from those steps. + // https://html.spec.whatwg.org/multipage/media.html#concept-media-load-algorithm + // That is not what browsers do, but, as described, the error event would + // arrive before the pending play promise rejection. + audio.source.endOfStream("decode"); + const sequence = []; + const event_promise = new Promise(resolve => { + audio.onerror = t.step_func(() => { + sequence.push('event'); + assert_equals(audio.error?.code, MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED, + 'error code on event'); + resolve(); + }); + }); + try { + await play_promise; + assert_unreached('promise should reject'); + } catch { + sequence.push('rejection'); + } + assert_equals(audio.error?.code, MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED, + 'error code on rejection'); + await event_promise; + assert_array_equals(sequence, ['event', 'rejection'], 'sequence'); +}, 'play() promise after error event while HAVE_NOTHING'); + +promise_test(async t => { + const audio = await create_audio_with_source_buffer(t); + // Truncate at the end of the metadata. + audio.buffer.appendBuffer( + resource.data.subarray(0, resource.cluster_start[0])); + await Promise.all([ + audio.watcher.wait_for('loadedmetadata'), + audio.buffer.watcher.wait_for('updateend'), + ]); + assert_equals(audio.readyState, audio.HAVE_METADATA, 'loadedmetadata'); + + const play_promise1 = audio.play(); + await audio.watcher.wait_for('waiting'); + assert_false(audio.paused, 'paused attribute'); + + let settled = 'NOT SETTLED'; + play_promise1.catch(_ => _).then(_ => settled = _); + + assert_equals(audio.error, null, 'error attribute'); + // Trigger "If the media data is corrupted" in the media data processing + // steps list. + // https://html.spec.whatwg.org/multipage/media.html#media-data-processing-steps-list + audio.source.endOfStream("decode"); + // The error event is described as firing synchronously during endOfStream(), + // but no browsers do this. https://github.com/whatwg/html/issues/11155 + await audio.watcher.wait_for('error'); + // The error attribute should be set synchronously, but this checked late + // just for Blink. + assert_equals(audio.error?.code, MediaError.MEDIA_ERR_DECODE, 'error code'); + // The end of stream algorithm does not change duration on error + // https://w3c.github.io/media-source/#dfn-end-of-stream + assert_equals(audio.duration, 2.023, 'duration'); + // MEDIA_ERR_DECODE does not reject the pending play promise + // https://github.com/whatwg/html/issues/505#issuecomment-178046408 + // because playback is sometimes possible after such errors, + // https://github.com/whatwg/html/pull/509#issuecomment-174967812 + // as in the 'error after HAVE_FUTURE_DATA' subtest below. + // Trigger volumechange for media element task source tasks. + // Await 2 tasks to check that the play() promise is not about to be + // rejected. + // 2 is the number of tasks necessary to wait for the spurious promise + // rejection with Blink. + for (const i of Array(2).keys()) { + audio.volume = i % 2; + await audio.watcher.wait_for('volumechange'); + } + assert_equals(settled, 'NOT SETTLED', 'play(() promise should not settle'); + + // Check that the promise is rejected when appropriate. + audio.pause(); + const sequence = []; + const play_promise2 = new Promise(resolve => { + audio.onpause = () => { + sequence.push('pause'); + if (sequence.filter(_ => _ == 'pause').length == 2) { + audio.onpause = null; + return; + } + resolve(audio.play()); + audio.pause(); + } + }); + audio.onwaiting = () => { + sequence.push('waiting'); + } + assert_true(audio.paused, 'paused attribute'); + await Promise.all([ + audio.watcher.wait_for(['pause', 'waiting', 'pause']), + play_promise1.catch(() => sequence.push('promise1')), + play_promise2.catch(() => sequence.push('promise2')), + ]); + assert_array_equals(sequence, + ['pause', 'promise1', 'waiting', 'pause', 'promise2'], + 'sequence'); + promise_rejects_dom( + t, 'AbortError', play_promise1, 'play promise rejection'); +}, 'error event while HAVE_METADATA'); + +async function create_audio_with_full_resource(t) { + const audio = await create_audio_with_source_buffer(t); + // Just to reduce sound impacts + audio.volume = 0; + audio.buffer.appendBuffer(resource.data); + await Promise.all([ + audio.watcher.wait_for(['volumechange', 'loadedmetadata', 'canplay']), + audio.buffer.watcher.wait_for('updateend'), + ]); + assert_greater_than(audio.readyState, audio.HAVE_CURRENT_DATA, + 'readyState'); + + assert_equals(audio.error, null, 'error attribute'); + return audio; +} + +promise_test(async t => { + const audio = await create_audio_with_full_resource(t); + audio.source.endOfStream("decode"); + // The error event is specified to fire synchronously during endOfStream(), + // but no browsers do this. https://github.com/whatwg/html/issues/11155 + await audio.watcher.wait_for('error'); + // The error attribute should be set synchronously, but this is checked late + // just for Blink. It is checked synchronously in the 'error attribute + // after DECODE_ERROR' subtest below. + assert_equals(audio.error?.code, MediaError.MEDIA_ERR_DECODE, 'error code'); + + const sequence = []; + const play_promise1 = audio.play().then(() => sequence.push('promise1')); + const play_promise2 = new Promise(resolve => { + audio.onplaying = () => { + sequence.push('event'); + resolve(audio.play().then(() => sequence.push('promise2'))); + }; + }); + assert_false(audio.paused, 'paused attribute'); + await Promise.all([ + audio.watcher.wait_for('playing'), + play_promise1, + play_promise2, + ]); + assert_array_equals(sequence, ['event', 'promise1', 'promise2'], 'sequence'); +}, 'error event after HAVE_FUTURE_DATA'); + +// This subtest could be merged into 'error event after HAVE_FUTURE_DATA' and +// 'error event while HAVE_METADATA' if/when Blink conforms with the synchronous +// attribute change. +promise_test(async t => { + const audio = await create_audio_with_full_resource(t); + audio.source.endOfStream("decode"); + // The error attribute is set synchronously. + assert_equals(audio.error?.code, MediaError.MEDIA_ERR_DECODE, 'error code'); +}, 'error attribute after DECODE_ERROR'); +</script> +</html> diff --git a/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select/resources/customizable-select-styles.css b/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select/resources/customizable-select-styles.css index 13a500a6197..acf84493d5c 100644 --- a/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select/resources/customizable-select-styles.css +++ b/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select/resources/customizable-select-styles.css @@ -70,8 +70,10 @@ /* min-size rules ensure that we meet accessibility guidelines for minimum target size. * https://github.com/openui/open-ui/issues/1026 * https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html */ - min-inline-size: 24px; - min-block-size: max(24px, 1lh); + min-inline-size: 24px; /* fallback for lack of calc-size() support */ + min-inline-size: calc-size(auto, max(size, 24px)); + min-block-size: max(24px, 1lh); /* fallback for lack of calc-size() support */ + min-block-size: calc-size(auto, max(size, 24px, 1lh)); } .customizable-select-button.disabled { diff --git a/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select/select-appearance-sizing-in-flex-ref.html b/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select/select-appearance-sizing-in-flex-ref.html new file mode 100644 index 00000000000..66b27ea686e --- /dev/null +++ b/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select/select-appearance-sizing-in-flex-ref.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<html> +<title>Test of sizing customizable select inside of flex</title> +<link rel=author href="mailto:dbaron@chromium.org"> + +<style> + .container > * { + display: inline-block; + vertical-align: top; + white-space: nowrap; + } + + select { + appearance: base-select; + } +</style> + +<div class="container"> + <select> + <option>First Option</option> + <option>Second Option</option> + </select + ><div class="after">The content after the select.</div> +</div> diff --git a/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select/select-appearance-sizing-in-flex.tentative.html b/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select/select-appearance-sizing-in-flex.tentative.html new file mode 100644 index 00000000000..563cf72b5f3 --- /dev/null +++ b/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select/select-appearance-sizing-in-flex.tentative.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html> +<title>Test of sizing customizable select inside of flex</title> +<link rel=author href="mailto:dbaron@chromium.org"> +<link rel=help href="https://github.com/whatwg/html/issues/9799"> +<link rel=help href="https://github.com/w3c/csswg-drafts/issues/12085"> +<link rel=match href="select-appearance-sizing-in-flex-ref.html"> +<meta name="assert" content="The min-content size of a customizable select is a function of its content."> + +<style> + .container { + display: inline-flex; + width: 15em; + } + + select { + appearance: base-select; + } + + select, .after { + white-space: nowrap; + } +</style> + +<div class="container"> + <select> + <option>First Option</option> + <option>Second Option</option> + </select> + <div class="after">The content after the select.</div> +</div> diff --git a/tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/dialog-requestclose-2-crash.html b/tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/dialog-requestclose-2-crash.html new file mode 100644 index 00000000000..a6ddac7e09c --- /dev/null +++ b/tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/dialog-requestclose-2-crash.html @@ -0,0 +1,11 @@ +<!doctype html> +<link rel="author" href="mailto:wpt@keithcirkel.co.uk" /> +<link rel="help" href="https://html.spec.whatwg.org/#dom-dialog-requestclose" /> + +<!-- This test passes if it does not crash. --> + +<script> + const dialog = document.createElement("dialog"); + dialog.setAttribute("open", ""); + dialog.requestClose(); +</script> diff --git a/tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/dialog-requestclose-3-crash.html b/tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/dialog-requestclose-3-crash.html new file mode 100644 index 00000000000..121e8645597 --- /dev/null +++ b/tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/dialog-requestclose-3-crash.html @@ -0,0 +1,13 @@ +<!doctype html> +<link rel="author" href="mailto:wpt@keithcirkel.co.uk" /> +<link rel="help" href="https://html.spec.whatwg.org/#dom-dialog-requestclose" /> + +<!-- This test passes if it does not crash. --> + +<script> + const doc = document.implementation.createHTMLDocument(""); + const dialog = doc.createElement("dialog"); + doc.body.append(dialog); + dialog.setAttribute("open", ""); + dialog.requestClose(); +</script> diff --git a/tests/wpt/tests/html/semantics/the-button-element/interest-target/interesttarget-has-interest-pseudo.tentative.html b/tests/wpt/tests/html/semantics/the-button-element/interest-target/interesttarget-has-interest-pseudo.tentative.html deleted file mode 100644 index 2ace6fdcd44..00000000000 --- a/tests/wpt/tests/html/semantics/the-button-element/interest-target/interesttarget-has-interest-pseudo.tentative.html +++ /dev/null @@ -1,63 +0,0 @@ -<!DOCTYPE html> -<meta charset="utf-8" /> -<link rel="author" href="mailto:masonf@chromium.org"> -<link rel="help" href="https://open-ui.org/components/interest-invokers.explainer"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="/resources/testdriver.js"></script> -<script src="/resources/testdriver-actions.js"></script> -<script src="/resources/testdriver-vendor.js"></script> -<script src="resources/invoker-utils.js"></script> - -<div id=unrelated>Unrelated</div> -<button id=button interesttarget=target>Button</button> -<div id=target>Target</div> -<style> - button { - interest-target-delay: 0s; - } -</style> -<script> -promise_test(async (t) => { - let hasInterest = false; - target.addEventListener('interest',() => (hasInterest=true)); - target.addEventListener('loseinterest',() => (hasInterest=false)); - assert_false(button.matches(':has-interest')); - assert_false(target.matches(':has-interest')); - assert_false(hasInterest); - await hoverOver(button); - assert_true(button.matches(':has-interest'),'hovering button shows interest'); - assert_false(target.matches(':has-interest'),'target never matches the pseudo class'); - assert_true(hasInterest,'event was fired'); - await hoverOver(target); - assert_true(button.matches(':has-interest'),'hovering the target maintains interest'); - assert_false(target.matches(':has-interest'),'target never matches the pseudo class'); - assert_true(hasInterest,'loseinterest event was not yet fired'); - await hoverOver(unrelated); - assert_false(button.matches(':has-interest'),'hovering unrelated loses interest'); - assert_false(target.matches(':has-interest'),'target never matches the pseudo class'); - assert_false(hasInterest,'loseinterest event was fired'); -},'The :has-interest pseudo class matches when an element has interest'); - -const invokerDelayMs = 100; // The CSS delay setting. -const hoverWaitTime = 200; // How long to wait to cover the delay for sure. -promise_test(async (t) => { - t.add_cleanup(() => button.removeAttribute('style')); - button.setAttribute('style',`interest-target-delay: ${invokerDelayMs}ms`); - assert_false(button.matches(':has-interest')); - const token1 = await mouseOverAndRecord(t,button); - const immediate_result = button.matches(':has-interest'); - if (msSinceMouseOver(token1) < invokerDelayMs) { - assert_false(immediate_result,':has-interest should not match before the show delay elapses'); - } - await waitForHoverTime(hoverWaitTime); - assert_true(button.matches(':has-interest'),':has-interest should match after hover delay'); - const token2 = await mouseOverAndRecord(t,unrelated); - const immediate_result2 = button.matches(':has-interest'); - if (msSinceMouseOver(token2) < invokerDelayMs) { - assert_true(immediate_result2,':has-interest should still match before the hide delay elapses'); - } - await waitForHoverTime(hoverWaitTime); - assert_false(button.matches(':has-interest'),':has-interest should not match after de-hover delay'); -},'The :has-interest pseudo class only matches after delays, once interest is shown'); -</script> diff --git a/tests/wpt/tests/html/semantics/the-button-element/interest-target/interesttarget-keyboard-invalidation-ref.html b/tests/wpt/tests/html/semantics/the-button-element/interest-target/interesttarget-keyboard-invalidation-ref.html index 76424374fb8..0ba07b16f49 100644 --- a/tests/wpt/tests/html/semantics/the-button-element/interest-target/interesttarget-keyboard-invalidation-ref.html +++ b/tests/wpt/tests/html/semantics/the-button-element/interest-target/interesttarget-keyboard-invalidation-ref.html @@ -7,7 +7,7 @@ <button id=hasinterest>Button</button> <button class=otherselector>Button</button> <button class=otherselector>Button</button> -<div>Target</div> +<div id=target>Target</div> <style> #hasinterest { @@ -17,6 +17,9 @@ .otherselector { background-color: green; } + #target { + background-color: yellow; + } </style> <script> diff --git a/tests/wpt/tests/html/semantics/the-button-element/interest-target/interesttarget-keyboard-invalidation.tentative.html b/tests/wpt/tests/html/semantics/the-button-element/interest-target/interesttarget-keyboard-invalidation.tentative.html index f6d572a2ef2..8c0ebd7a2cd 100644 --- a/tests/wpt/tests/html/semantics/the-button-element/interest-target/interesttarget-keyboard-invalidation.tentative.html +++ b/tests/wpt/tests/html/semantics/the-button-element/interest-target/interesttarget-keyboard-invalidation.tentative.html @@ -17,14 +17,20 @@ <style> :has-interest { + background-color: purple; + } + :has-interest:has-partial-interest { background-color: red; } - :has-interest + button { + :has-partial-interest + button { background-color: green; } :root:has(:has-interest) #b5 { background-color: green; } + :target-of-interest:target-of-partial-interest { + background-color: yellow; + } [interesttarget] { interest-target-delay: 0s; } diff --git a/tests/wpt/tests/html/semantics/the-button-element/interest-target/interesttarget-popover-focus.tentative.html b/tests/wpt/tests/html/semantics/the-button-element/interest-target/interesttarget-popover-focus.tentative.html new file mode 100644 index 00000000000..6cf64d953fe --- /dev/null +++ b/tests/wpt/tests/html/semantics/the-button-element/interest-target/interesttarget-popover-focus.tentative.html @@ -0,0 +1,46 @@ +<!DOCTYPE html> +<meta charset="utf-8" /> +<link rel="author" href="mailto:masonf@chromium.org"> +<link rel="help" href="https://open-ui.org/components/interest-invokers.explainer/" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-actions.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="resources/invoker-utils.js"></script> +<script src="/html/semantics/popovers/resources/popover-utils.js"></script> + +<button id=el interesttarget=target>Button</button> +<div id=target popover>Popover with <button id=contained>button</button></div> +<button id=otherbutton>Other button</button> + +<style> + [interesttarget] { + interest-target-delay: 0s; + } +</style> + +<script> + promise_test(async function (t) { + let interestCount = 0; + let loseInterestCount = 0; + target.addEventListener('interest',(e) => ++interestCount); + target.addEventListener('loseinterest',(e) => ++loseInterestCount); + assert_false(target.matches(':popover-open')); + await focusOn(el); + assert_equals(document.activeElement,el); + assert_true(target.matches(':popover-open'),'Focusing should trigger interest'); + assert_equals(interestCount,1); + assert_equals(loseInterestCount,0); + await sendTab(); + assert_equals(document.activeElement,contained); + assert_true(target.matches(':popover-open'),'Moving focus into popover should not lose interest'); + assert_equals(interestCount,1); + assert_equals(loseInterestCount,0); + await sendTab(); + assert_equals(document.activeElement,otherbutton); + assert_false(target.matches(':popover-open'),'Moving focus out of popover and invoker should lose interest'); + assert_equals(interestCount,1); + assert_equals(loseInterestCount,1); + },'It should be possible to move focus into target popover'); +</script> diff --git a/tests/wpt/tests/html/semantics/the-button-element/interest-target/interesttarget-pseudo-classes.tentative.html b/tests/wpt/tests/html/semantics/the-button-element/interest-target/interesttarget-pseudo-classes.tentative.html new file mode 100644 index 00000000000..348d9ae7310 --- /dev/null +++ b/tests/wpt/tests/html/semantics/the-button-element/interest-target/interesttarget-pseudo-classes.tentative.html @@ -0,0 +1,108 @@ +<!DOCTYPE html> +<meta charset="utf-8" /> +<link rel="author" href="mailto:masonf@chromium.org"> +<link rel="help" href="https://open-ui.org/components/interest-invokers.explainer"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-actions.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="resources/invoker-utils.js"></script> + +<div id=unrelated tabindex=0>Unrelated</div> +<button id=invoker interesttarget=target>Invoker</button> +<div id=target>Target <button id=target_button>contained button</button></div> +<style> + button { + interest-target-delay: 0s; + } +</style> +<script> +function checkPseudos(invoker,target,expectHasPartialInterest,expectHasInterest,expectTargetHasPartialInterest,expectTargetHasInterest,msg) { + msg = msg ?? 'Error'; + assert_true(!expectHasPartialInterest || expectHasInterest,'Partial interest can\'t be true without full interest'); + assert_true(!expectTargetHasPartialInterest || expectTargetHasInterest,'Partial interest can\'t be true without full interest (target)'); + assert_equals(invoker.matches(':has-interest'),expectHasInterest,`${msg}: :has-interest mismatch`); + assert_equals(invoker.matches(':has-partial-interest'),expectHasPartialInterest,`${msg}: :has-partial-interest mismatch`); + assert_equals(target.matches(':target-of-interest'),expectTargetHasInterest,`${msg}: :target-of-partial-interest mismatch`); + assert_equals(target.matches(':target-of-partial-interest'),expectTargetHasPartialInterest,`${msg}: :target-of-partial-interest mismatch`); + assert_false(invoker.matches(':target-of-interest'),'invoker should never match :target-of-interest'); + assert_false(invoker.matches(':target-of-partial-interest'),'invoker should never match :target-of-partial-interest'); + assert_false(target.matches(':has-interest'),'target should never match :has-interest'); + assert_false(target.matches(':has-partial-interest'),'target should never match :has-partial-interest'); +} +function add_cleanups(t) { + t.add_cleanup(async() => { + invoker.removeAttribute('style'); + await focusOn(unrelated); + await hoverOver(unrelated); + }); +} + +promise_test(async (t) => { + add_cleanups(t); + let hasInterest = false; + target.addEventListener('interest',() => (hasInterest=true)); + target.addEventListener('loseinterest',() => (hasInterest=false)); + checkPseudos(invoker,target,false,false,false,false,'initial'); + assert_false(hasInterest); + await hoverOver(invoker); + checkPseudos(invoker,target,false,true,false,true,'hovering invoker shows full interest (and not partial interest)'); + assert_true(hasInterest,'event was fired'); + await hoverOver(target); + checkPseudos(invoker,target,false,true,false,true,'hovering the target maintains interest'); + assert_true(hasInterest,'loseinterest event was not yet fired'); + await hoverOver(unrelated); + checkPseudos(invoker,target,false,false,false,false,'hovering unrelated loses interest'); + assert_false(hasInterest,'loseinterest event was fired'); +},'Basic pseudo class function, with mouse hover triggering'); + +promise_test(async (t) => { + add_cleanups(t); + let hasInterest = false; + target.addEventListener('interest',() => (hasInterest=true)); + target.addEventListener('loseinterest',() => (hasInterest=false)); + checkPseudos(invoker,target,false,false,false,false,'initial'); + assert_false(hasInterest); + await focusOn(invoker); + checkPseudos(invoker,target,true,true,true,true,'focusing invoker shows partial interest (and therefore also interest)'); + assert_true(hasInterest,'event was fired'); + await focusOn(target_button); + checkPseudos(invoker,target,false,true,false,true,'focusing the target upgrades to full interest (no longer partial interest)'); + assert_true(hasInterest,'loseinterest event was not yet fired'); + await focusOn(invoker); + checkPseudos(invoker,target,false,true,false,true,'focusing back on invoker keeps full interest'); + assert_true(hasInterest,'loseinterest event was not yet fired'); + await focusOn(unrelated); + checkPseudos(invoker,target,false,false,false,false,'focusing unrelated loses interest'); + assert_false(hasInterest,'loseinterest event was fired'); +},'Basic pseudo class function, with keyboard focus triggering'); + +const invokerDelayMs = 100; // The CSS delay setting. +const hoverWaitTime = 200; // How long to wait to cover the delay for sure. +promise_test(async (t) => { + add_cleanups(t); + invoker.setAttribute('style',`interest-target-delay: ${invokerDelayMs}ms`); + checkPseudos(invoker,target,false,false,false,false,'initial'); + const token1 = await mouseOverAndRecord(t,invoker); + const immediate_result = invoker.matches(':has-interest') || + invoker.matches(':has-partial-interest') || + target.matches(':target-of-interest') || + target.matches(':target-of-partial-interest'); + if (msSinceMouseOver(token1) < invokerDelayMs) { + assert_false(immediate_result,'No pseudos should match before the show delay elapses'); + } + await waitForHoverTime(hoverWaitTime); + checkPseudos(invoker,target,false,true,false,true,'full interest pseudos (but not partial interest) should match after hover delay'); + const token2 = await mouseOverAndRecord(t,unrelated); + const immediate_result2 = invoker.matches(':has-interest') && + !invoker.matches(':has-partial-interest') && + target.matches(':target-of-interest') && + !target.matches(':target-of-partial-interest'); + if (msSinceMouseOver(token2) < invokerDelayMs) { + assert_true(immediate_result2,'all pseudos should still represent full interest before the hide delay elapses'); + } + await waitForHoverTime(hoverWaitTime); + checkPseudos(invoker,target,false,false,false,false,'no pseudos should match after de-hover delay'); +},'The pseudo classes only match after delays, once interest is shown'); +</script> diff --git a/tests/wpt/tests/html/syntax/serializing-html-fragments/serializing-lt-gt.tentative.html b/tests/wpt/tests/html/syntax/serializing-html-fragments/serializing-lt-gt.tentative.html new file mode 100644 index 00000000000..6c74b443a83 --- /dev/null +++ b/tests/wpt/tests/html/syntax/serializing-html-fragments/serializing-lt-gt.tentative.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<title>Escape "<" and ">" in attribute values when serializing</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> + +<span id="test"><a b="<>"></a></span> + +<script> +const test_el = document.getElementById("test"); + +test(() => { + assert_equals(test_el.innerHTML, "<a b=\"<>\"></a>"); +}, "innerHTML"); + +test(() => { + assert_equals(test_el.outerHTML, "<span id=\"test\"><a b=\"<>\"></a></span>"); +}, "outerHTML"); +</script> diff --git a/tests/wpt/tests/inert/inert-node-is-uneditable.html b/tests/wpt/tests/inert/inert-node-is-uneditable.html index ecb69695793..18cc079ea4e 100644 --- a/tests/wpt/tests/inert/inert-node-is-uneditable.html +++ b/tests/wpt/tests/inert/inert-node-is-uneditable.html @@ -14,7 +14,7 @@ <span inert id="not-editable" contenteditable>I'm not editable.</span> <span id="editable" contenteditable>I'm editable.</span> <span inert> - <span id="editable-interactivity" style="interactivity:auto" contenteditable>I'm editable.</span> + <span id="editable-interactivity" style="interactivity:auto" contenteditable>I'm not editable.</span> </span> <script> var notEditable = document.querySelector('#not-editable'); @@ -47,10 +47,10 @@ promise_test(async () => { promise_test(async () => { editableInteractivity.focus(); var oldValue = editableInteractivity.textContent; - assert_equals(oldValue, "I'm editable."); + assert_equals(oldValue, "I'm not editable."); await sendKey('a'); - assert_not_equals(editableInteractivity.textContent, oldValue); -}, "Can edit interactivity:auto contenteditable inside inert"); + assert_equals(editableInteractivity.textContent, oldValue); +}, "Can't edit interactivity:auto contenteditable inside inert"); </script> </body> diff --git a/tests/wpt/tests/infrastructure/metadata/infrastructure/assumptions/ahem.html.ini b/tests/wpt/tests/infrastructure/metadata/infrastructure/assumptions/ahem.html.ini index 8587775d8fc..ada156a59f5 100644 --- a/tests/wpt/tests/infrastructure/metadata/infrastructure/assumptions/ahem.html.ini +++ b/tests/wpt/tests/infrastructure/metadata/infrastructure/assumptions/ahem.html.ini @@ -1,3 +1,3 @@ [ahem.html] expected: - if product == "safari": FAIL # system fonts not loaded since macOS Mojave + if product == "safari": [FAIL, CRASH] # system fonts not loaded since macOS Mojave diff --git a/tests/wpt/tests/infrastructure/metadata/infrastructure/assumptions/allowed-to-play.html.ini b/tests/wpt/tests/infrastructure/metadata/infrastructure/assumptions/allowed-to-play.html.ini index 6891cbe24e3..17ceac0d26d 100644 --- a/tests/wpt/tests/infrastructure/metadata/infrastructure/assumptions/allowed-to-play.html.ini +++ b/tests/wpt/tests/infrastructure/metadata/infrastructure/assumptions/allowed-to-play.html.ini @@ -1,6 +1,4 @@ [allowed-to-play.html] - disabled: - if product == "firefox": https://bugzilla.mozilla.org/show_bug.cgi?id=1607802 expected: if product == "safari": ERROR # https://bugs.webkit.org/show_bug.cgi?id=190775 diff --git a/tests/wpt/tests/infrastructure/metadata/infrastructure/assumptions/canvas-background.html.ini b/tests/wpt/tests/infrastructure/metadata/infrastructure/assumptions/canvas-background.html.ini new file mode 100644 index 00000000000..198b67c43cd --- /dev/null +++ b/tests/wpt/tests/infrastructure/metadata/infrastructure/assumptions/canvas-background.html.ini @@ -0,0 +1,3 @@ +[canvas-background.html] + expected: + if product == "safari": [ERROR, CRASH] diff --git a/tests/wpt/tests/infrastructure/metadata/infrastructure/reftest/reftest.www.sub.html.ini b/tests/wpt/tests/infrastructure/metadata/infrastructure/reftest/reftest.www.sub.html.ini new file mode 100644 index 00000000000..b6066673120 --- /dev/null +++ b/tests/wpt/tests/infrastructure/metadata/infrastructure/reftest/reftest.www.sub.html.ini @@ -0,0 +1,3 @@ +[reftest.www.sub.html] + expected: + if product == "safari": ERROR diff --git a/tests/wpt/tests/infrastructure/metadata/infrastructure/reftest/testdriver-in-ref.html.ini b/tests/wpt/tests/infrastructure/metadata/infrastructure/reftest/testdriver-in-ref.html.ini index 05850761b16..5dbd6945aa0 100644 --- a/tests/wpt/tests/infrastructure/metadata/infrastructure/reftest/testdriver-in-ref.html.ini +++ b/tests/wpt/tests/infrastructure/metadata/infrastructure/reftest/testdriver-in-ref.html.ini @@ -1,5 +1,5 @@ [testdriver-in-ref.html] - disabled: + expected: # https://github.com/web-platform-tests/wpt/issues/13183 - if product == "firefox" or product == "firefox_android": - "marionette executor doesn't currently implement testdriver for reftests" + # marionette executor doesn't currently implement testdriver for reftests + if product == "firefox" or product == "firefox_android": TIMEOUT diff --git a/tests/wpt/tests/infrastructure/metadata/infrastructure/testdriver/bidi/bluetooth/handle_request_device_prompt.https.html.ini b/tests/wpt/tests/infrastructure/metadata/infrastructure/testdriver/bidi/bluetooth/handle_request_device_prompt.https.html.ini index 1a5ac47c67d..fd44ded394b 100644 --- a/tests/wpt/tests/infrastructure/metadata/infrastructure/testdriver/bidi/bluetooth/handle_request_device_prompt.https.html.ini +++ b/tests/wpt/tests/infrastructure/metadata/infrastructure/testdriver/bidi/bluetooth/handle_request_device_prompt.https.html.ini @@ -1,2 +1,3 @@ -disabled: - if product != "chrome": @True +[handle_request_device_prompt.https.html] + expected: + if product != "chrome": ERROR diff --git a/tests/wpt/tests/infrastructure/metadata/infrastructure/testdriver/bidi/bluetooth/simulate_adapter.https.html.ini b/tests/wpt/tests/infrastructure/metadata/infrastructure/testdriver/bidi/bluetooth/simulate_adapter.https.html.ini index 1a5ac47c67d..feaf5ceae7a 100644 --- a/tests/wpt/tests/infrastructure/metadata/infrastructure/testdriver/bidi/bluetooth/simulate_adapter.https.html.ini +++ b/tests/wpt/tests/infrastructure/metadata/infrastructure/testdriver/bidi/bluetooth/simulate_adapter.https.html.ini @@ -1,2 +1,3 @@ -disabled: - if product != "chrome": @True +[simulate_adapter.https.html] + expected: + if product != "chrome": ERROR diff --git a/tests/wpt/tests/infrastructure/metadata/infrastructure/testdriver/bidi/bluetooth/simulate_preconnected_peripheral.https.html.ini b/tests/wpt/tests/infrastructure/metadata/infrastructure/testdriver/bidi/bluetooth/simulate_preconnected_peripheral.https.html.ini index 1a5ac47c67d..b2c823097f6 100644 --- a/tests/wpt/tests/infrastructure/metadata/infrastructure/testdriver/bidi/bluetooth/simulate_preconnected_peripheral.https.html.ini +++ b/tests/wpt/tests/infrastructure/metadata/infrastructure/testdriver/bidi/bluetooth/simulate_preconnected_peripheral.https.html.ini @@ -1,2 +1,3 @@ -disabled: - if product != "chrome": @True +[simulate_preconnected_peripheral.https.html] + expected: + if product != "chrome": ERROR diff --git a/tests/wpt/tests/infrastructure/metadata/infrastructure/testdriver/bidi/permissions/set_permission.https.html.ini b/tests/wpt/tests/infrastructure/metadata/infrastructure/testdriver/bidi/permissions/set_permission.https.html.ini index 1a5ac47c67d..2101196fa2f 100644 --- a/tests/wpt/tests/infrastructure/metadata/infrastructure/testdriver/bidi/permissions/set_permission.https.html.ini +++ b/tests/wpt/tests/infrastructure/metadata/infrastructure/testdriver/bidi/permissions/set_permission.https.html.ini @@ -1,2 +1,3 @@ -disabled: - if product != "chrome": @True +[set_permission.https.html] + expected: + if product != "chrome": ERROR diff --git a/tests/wpt/tests/infrastructure/metadata/infrastructure/testdriver/file_upload.sub.html.ini b/tests/wpt/tests/infrastructure/metadata/infrastructure/testdriver/file_upload.sub.html.ini index 8b7c0f25e6a..ce88c728e03 100644 --- a/tests/wpt/tests/infrastructure/metadata/infrastructure/testdriver/file_upload.sub.html.ini +++ b/tests/wpt/tests/infrastructure/metadata/infrastructure/testdriver/file_upload.sub.html.ini @@ -5,3 +5,4 @@ expected: if (product == "epiphany") or (product == "webkit"): FAIL if product == "firefox_android": FAIL + if product == "safari": FAIL diff --git a/tests/wpt/tests/infrastructure/metadata/infrastructure/webdriver/bidi/subscription.html.ini b/tests/wpt/tests/infrastructure/metadata/infrastructure/webdriver/bidi/subscription.html.ini index 1a5ac47c67d..2d828266f10 100644 --- a/tests/wpt/tests/infrastructure/metadata/infrastructure/webdriver/bidi/subscription.html.ini +++ b/tests/wpt/tests/infrastructure/metadata/infrastructure/webdriver/bidi/subscription.html.ini @@ -1,2 +1,3 @@ -disabled: - if product != "chrome": @True +[subscription.html] + expected: + if product != "chrome": ERROR diff --git a/tests/wpt/tests/infrastructure/metadata/infrastructure/webdriver/bidi/subscription.window.js.ini b/tests/wpt/tests/infrastructure/metadata/infrastructure/webdriver/bidi/subscription.window.js.ini index 1a5ac47c67d..1acf3eb9819 100644 --- a/tests/wpt/tests/infrastructure/metadata/infrastructure/webdriver/bidi/subscription.window.js.ini +++ b/tests/wpt/tests/infrastructure/metadata/infrastructure/webdriver/bidi/subscription.window.js.ini @@ -1,2 +1,3 @@ -disabled: - if product != "chrome": @True +[subscription.window.html] + expected: + if product != "chrome": ERROR diff --git a/tests/wpt/tests/infrastructure/metadata/infrastructure/webdriver/tests/test_load_file.py.ini b/tests/wpt/tests/infrastructure/metadata/infrastructure/webdriver/tests/test_load_file.py.ini deleted file mode 100644 index 7e6ef522c9b..00000000000 --- a/tests/wpt/tests/infrastructure/metadata/infrastructure/webdriver/tests/test_load_file.py.ini +++ /dev/null @@ -1,2 +0,0 @@ -disabled: - if product == "firefox": @True diff --git a/tests/wpt/tests/interfaces/dom.idl b/tests/wpt/tests/interfaces/dom.idl index 7b4fcb920e2..253e7bf913e 100644 --- a/tests/wpt/tests/interfaces/dom.idl +++ b/tests/wpt/tests/interfaces/dom.idl @@ -110,6 +110,7 @@ Document includes NonElementParentNode; DocumentFragment includes NonElementParentNode; interface mixin DocumentOrShadowRoot { + readonly attribute CustomElementRegistry? customElementRegistry; }; Document includes DocumentOrShadowRoot; ShadowRoot includes DocumentOrShadowRoot; @@ -293,7 +294,7 @@ interface Document : Node { [NewObject] Comment createComment(DOMString data); [NewObject] ProcessingInstruction createProcessingInstruction(DOMString target, DOMString data); - [CEReactions, NewObject] Node importNode(Node node, optional boolean subtree = false); + [CEReactions, NewObject] Node importNode(Node node, optional (boolean or ImportNodeOptions) options = false); [CEReactions] Node adoptNode(Node node); [NewObject] Attr createAttribute(DOMString localName); @@ -312,9 +313,15 @@ interface Document : Node { interface XMLDocument : Document {}; dictionary ElementCreationOptions { + CustomElementRegistry customElementRegistry; DOMString is; }; +dictionary ImportNodeOptions { + CustomElementRegistry customElementRegistry; + boolean selfOnly = false; +}; + [Exposed=Window] interface DOMImplementation { [NewObject] DocumentType createDocumentType(DOMString qualifiedName, DOMString publicId, DOMString systemId); @@ -344,6 +351,7 @@ interface ShadowRoot : DocumentFragment { readonly attribute boolean clonable; readonly attribute boolean serializable; readonly attribute Element host; + attribute EventHandler onslotchange; }; @@ -384,6 +392,8 @@ interface Element : Node { ShadowRoot attachShadow(ShadowRootInit init); readonly attribute ShadowRoot? shadowRoot; + readonly attribute CustomElementRegistry? customElementRegistry; + Element? closest(DOMString selectors); boolean matches(DOMString selectors); boolean webkitMatchesSelector(DOMString selectors); // legacy alias of .matches @@ -402,6 +412,7 @@ dictionary ShadowRootInit { SlotAssignmentMode slotAssignment = "named"; boolean clonable = false; boolean serializable = false; + CustomElementRegistry customElementRegistry; }; [Exposed=Window, diff --git a/tests/wpt/tests/interfaces/fedcm.idl b/tests/wpt/tests/interfaces/fedcm.idl index c26e2b14c73..215f375432e 100644 --- a/tests/wpt/tests/interfaces/fedcm.idl +++ b/tests/wpt/tests/interfaces/fedcm.idl @@ -74,7 +74,7 @@ dictionary IdentityProviderBranding { dictionary IdentityProviderAPIConfig { required USVString accounts_endpoint; - required USVString client_metadata_endpoint; + USVString client_metadata_endpoint; required USVString id_assertion_endpoint; required USVString login_url; USVString disconnect_endpoint; diff --git a/tests/wpt/tests/interfaces/html.idl b/tests/wpt/tests/interfaces/html.idl index 61378c801d4..102149c4dfa 100644 --- a/tests/wpt/tests/interfaces/html.idl +++ b/tests/wpt/tests/interfaces/html.idl @@ -1261,6 +1261,7 @@ interface HTMLTemplateElement : HTMLElement { [CEReactions] attribute boolean shadowRootDelegatesFocus; [CEReactions] attribute boolean shadowRootClonable; [CEReactions] attribute boolean shadowRootSerializable; + [CEReactions] attribute DOMString shadowRootCustomElementRegistry; }; [Exposed=Window] @@ -1629,11 +1630,14 @@ OffscreenCanvasRenderingContext2D includes CanvasPath; [Exposed=Window] interface CustomElementRegistry { + constructor(); + [CEReactions] undefined define(DOMString name, CustomElementConstructor constructor, optional ElementDefinitionOptions options = {}); (CustomElementConstructor or undefined) get(DOMString name); DOMString? getName(CustomElementConstructor constructor); Promise<CustomElementConstructor> whenDefined(DOMString name); [CEReactions] undefined upgrade(Node root); + undefined initialize(Node root); }; callback CustomElementConstructor = HTMLElement (); diff --git a/tests/wpt/tests/interfaces/scoped-custom-elements-registry.tentative.idl b/tests/wpt/tests/interfaces/scoped-custom-elements-registry.tentative.idl new file mode 100644 index 00000000000..46ca2d6b9c4 --- /dev/null +++ b/tests/wpt/tests/interfaces/scoped-custom-elements-registry.tentative.idl @@ -0,0 +1,38 @@ +[Exposed=Window] +partial interface CustomElementRegistry { + constructor(); + undefined initialize(Node root); +}; + +[Exposed=Window] +partial interface HTMLTemplateElement { + [CEReactions] attribute DOMString shadowRootCustomElementRegistry; +}; + +[Exposed=Window] +partial interface Document { + readonly attribute CustomElementRegistry? customElementRegistry; +}; + +[Exposed=Window] +partial interface Element { + readonly attribute CustomElementRegistry? customElementRegistry; +}; + +[Exposed=Window] +partial interface ShadowRoot { + readonly attribute CustomElementRegistry? customElementRegistry; +}; + +dictionary ImportNodeOptions { + CustomElementRegistry customElementRegistry; + boolean selfOnly = false; +}; + +partial dictionary ShadowRootInit { + CustomElementRegistry customElementRegistry; +}; + +partial dictionary ElementCreationOptions { + CustomElementRegistry customElementRegistry; +}; diff --git a/tests/wpt/tests/interfaces/secure-payment-confirmation.idl b/tests/wpt/tests/interfaces/secure-payment-confirmation.idl index bec599d7a23..5b67ca62678 100644 --- a/tests/wpt/tests/interfaces/secure-payment-confirmation.idl +++ b/tests/wpt/tests/interfaces/secure-payment-confirmation.idl @@ -16,8 +16,16 @@ dictionary SecurePaymentConfirmationRequest { boolean showOptOut; }; +enum SecurePaymentConfirmationAvailability { + "available", + "unavailable-unknown-reason", + "unavailable-feature-not-enabled", + "unavailable-no-permission-policy", + "unavailable-no-user-verifying-platform-authenticator", +}; + partial interface PaymentRequest { - static Promise<boolean> isSecurePaymentConfirmationAvailable(); + static Promise<SecurePaymentConfirmationAvailability> securePaymentConfirmationAvailability(); }; partial dictionary AuthenticationExtensionsClientInputs { diff --git a/tests/wpt/tests/interfaces/speech-api.idl b/tests/wpt/tests/interfaces/speech-api.idl index 5bc9df337dd..0e07b4619a5 100644 --- a/tests/wpt/tests/interfaces/speech-api.idl +++ b/tests/wpt/tests/interfaces/speech-api.idl @@ -13,6 +13,7 @@ interface SpeechRecognition : EventTarget { attribute boolean interimResults; attribute unsigned long maxAlternatives; attribute SpeechRecognitionMode mode; + attribute SpeechRecognitionPhraseList phrases; // methods to drive the speech interaction undefined start(); @@ -43,7 +44,8 @@ enum SpeechRecognitionErrorCode { "network", "not-allowed", "service-not-allowed", - "language-not-supported" + "language-not-supported", + "phrases-not-supported" }; enum SpeechRecognitionMode { @@ -106,6 +108,24 @@ dictionary SpeechRecognitionEventInit : EventInit { required SpeechRecognitionResultList results; }; +// The object representing a phrase for contextual biasing. +[Exposed=Window] +interface SpeechRecognitionPhrase { + constructor(DOMString phrase, optional float boost = 1.0); + readonly attribute DOMString phrase; + readonly attribute float boost; +}; + +// The object representing a list of phrases for contextual biasing. +[Exposed=Window] +interface SpeechRecognitionPhraseList { + constructor(sequence<SpeechRecognitionPhrase> phrases); + readonly attribute unsigned long length; + SpeechRecognitionPhrase item(unsigned long index); + undefined addItem(SpeechRecognitionPhrase item); + undefined removeItem(unsigned long index); +}; + [Exposed=Window] interface SpeechSynthesis : EventTarget { readonly attribute boolean pending; diff --git a/tests/wpt/tests/largest-contentful-paint/animated/observe-cross-origin-animated-image.tentative.html b/tests/wpt/tests/largest-contentful-paint/animated/observe-cross-origin-animated-image.tentative.html index 49207f9d690..8ef198dac68 100644 --- a/tests/wpt/tests/largest-contentful-paint/animated/observe-cross-origin-animated-image.tentative.html +++ b/tests/wpt/tests/largest-contentful-paint/animated/observe-cross-origin-animated-image.tentative.html @@ -14,12 +14,26 @@ assert_implements(window.LargestContentfulPaint, "LargestContentfulPaint is not implemented"); const beforeLoad = performance.now(); - // 262 is the size of the animated PNG up until the first frame, - // including the chunk that starts the second frame (indicating that - //the first frame data is done). + // Offsets inside `anim-gr.png`: + // IHDR: 8..33 + // acTL: 33..53 + // fcTL (1st frame): 53..91 + // IDAT (1st frame): 91..254 + // fcTL (2nd frame): 254..292 + // fcTL payload starts at offset 262 + // fdAT (2nd frame): 292..448 + // fdAT payload starts at offset 304 + // + // The HTTP request below will stall for 2 seconds after all pixels of + // the 1st frame are available, but before any 2nd frame pixels are + // available. The test will verify that LargestContentfulPaint fires + // "immediately", without waiting for the rest of the bytes. + // + // See https://crbug.com/393205780 why this offset (and not an earlier + // one) is used in the test. const {REMOTE_ORIGIN} = get_host_info(); const url = REMOTE_ORIGIN + - '/images/anim-gr.png?pipe=trickle(262:d1)'; + '/images/anim-gr.png?pipe=trickle(304:d1)'; const entry = await load_and_observe(url); // anim-gr.png is 100 by 50. const size = 100 * 50; diff --git a/tests/wpt/tests/largest-contentful-paint/animated/observe-cross-origin-tao-animated-image.tentative.html b/tests/wpt/tests/largest-contentful-paint/animated/observe-cross-origin-tao-animated-image.tentative.html index 137dde66383..13181670c16 100644 --- a/tests/wpt/tests/largest-contentful-paint/animated/observe-cross-origin-tao-animated-image.tentative.html +++ b/tests/wpt/tests/largest-contentful-paint/animated/observe-cross-origin-tao-animated-image.tentative.html @@ -14,12 +14,26 @@ assert_implements(window.LargestContentfulPaint, "LargestContentfulPaint is not implemented"); const beforeLoad = performance.now(); - // 262 is the size of the animated PNG up until the first frame, - // including the chunk that starts the second frame (indicating that - //the first frame data is done). + // Offsets inside `anim-gr.png`: + // IHDR: 8..33 + // acTL: 33..53 + // fcTL (1st frame): 53..91 + // IDAT (1st frame): 91..254 + // fcTL (2nd frame): 254..292 + // fcTL payload starts at offset 262 + // fdAT (2nd frame): 292..448 + // fdAT payload starts at offset 304 + // + // The HTTP request below will stall for 2 seconds after all pixels of + // the 1st frame are available, but before any 2nd frame pixels are + // available. The test will verify that LargestContentfulPaint fires + // "immediately", without waiting for the rest of the bytes. + // + // See https://crbug.com/393205780 why this offset (and not an earlier + // one) is used in the test. const {REMOTE_ORIGIN} = get_host_info(); const url = REMOTE_ORIGIN + - '/images/anim-tao.png?pipe=trickle(262:d1)'; + '/images/anim-tao.png?pipe=trickle(304:d1)'; const entry = await load_and_observe(url); // anim-gr.png is 100 by 50. const size = 100 * 50; diff --git a/tests/wpt/tests/mathml/presentation-markup/operators/symmetric-largeop.html b/tests/wpt/tests/mathml/presentation-markup/operators/symmetric-largeop.html new file mode 100644 index 00000000000..b93ed5214e2 --- /dev/null +++ b/tests/wpt/tests/mathml/presentation-markup/operators/symmetric-largeop.html @@ -0,0 +1,76 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>Test placement of non-stretchy symmetric/non-symmetric largeops with a block-direction intrinsic stretch axis</title> +<link rel="help" href="https://issues.chromium.org/issues/40889877"> +<link rel="help" href="https://github.com/w3c/mathml-core/issues/250"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/mathml/support/feature-detection.js"></script> +<script src="/mathml/support/fonts.js"></script> +<style> +@font-face { + font-family: TestFont; + src: url("/fonts/math/largeop-displayoperatorminheight3000-2AFF-axisheight1000.woff"); +} +math { + font-family: TestFont; + font-size: 30px; + margin-bottom: 15px; /* to distinguish the tests visually */ +} +mspace { + background-color: green; +} +</style> +<script> + setup({ explicit_done: true }); + window.addEventListener("load", () => { loadAllFonts().then(runTests); }); + + // U+2AFF has intrinsic block stretch axis and the symmetric, largeop and movablelimits properties. + // + // We compare the operator top to the mspace bottom (which will always be the alphabetic baseline). + // + // The operator should center around the math axis for symmetric largeops. + // The ascent of the largeop is: + // largeop height / 2 (= 1.5em) + // + AxisHeight (= 1em) + // = 2.5em (75px). + // + // The operator should place on the baseline for non-symmetric largeops, + // so the ascent of the largeop = 3em (90px). + + function runTests() { + test(function() { + const container = document.getElementById("container"); + [ + [ 75, "symmetric largeop is centered around the math axis" ], + [ 90, "non-symmetric largeop is placed on the baseline" ], + ].forEach(([ spacing, desc ], i) => { + const mrow = container.children[i].firstElementChild; + let opBbox = mrow.firstElementChild.getBoundingClientRect(); + let spaceBbox = mrow.lastElementChild.getBoundingClientRect(); + assert_equals(spaceBbox.bottom - opBbox.top, spacing, desc); + }) + }, "Placement of operators"); + done(); + } +</script> +</head> +<body> + <div id="container"> + <math display="block"> + <mrow> + <mo symmetric="true" largeop="true">⫿</mo> + <mspace height="1em" width="1em"></mspace> + </mrow> + </math> + <math display="block"> + <mrow> + <mo symmetric="false" largeop="true">⫿</mo> + <mspace height="1em" width="1em"></mspace> + </mrow> + </math> + </div> +</body> +</html> diff --git a/tests/wpt/tests/mathml/tools/largeop.py b/tests/wpt/tests/mathml/tools/largeop.py index 9832ff0039c..62515751948 100755 --- a/tests/wpt/tests/mathml/tools/largeop.py +++ b/tests/wpt/tests/mathml/tools/largeop.py @@ -14,6 +14,25 @@ mathfont.drawRectangleGlyph(g, mathfont.em, v1, 0) f[nAryWhiteVerticalBarCodePoint].verticalVariants = "uni2AFF uni2AFF.display" mathfont.save(f) +v1 = 3 * mathfont.em +v2 = mathfont.em +f = mathfont.create("largeop-displayoperatorminheight%d-2AFF-axisheight%d" % (v1, v2), + "Copyright (c) 2025 Igalia S.L.") +f.math.DisplayOperatorMinHeight = v1 +f.math.AxisHeight = v2 +mathfont.createSquareGlyph(f, nAryWhiteVerticalBarCodePoint) +g = f.createChar(-1, "uni2AFF.display") +p = g.glyphPen() +p.moveTo(0, 0) +p.lineTo(0, v1) +p.lineTo(mathfont.em, v1) +p.lineTo(mathfont.em, 0) +p.closePath() +g.width = mathfont.em +g.italicCorrection = 0 +f[nAryWhiteVerticalBarCodePoint].verticalVariants = "uni2AFF uni2AFF.display" +mathfont.save(f) + v1 = 2 * mathfont.em v2 = 3 * mathfont.em f = mathfont.create("largeop-displayoperatorminheight%d-2AFF-italiccorrection%d" % (v1, v2), diff --git a/tests/wpt/tests/media-source/mediasource-util.js b/tests/wpt/tests/media-source/mediasource-util.js index 0bbb6a73863..00105238e6b 100644 --- a/tests/wpt/tests/media-source/mediasource-util.js +++ b/tests/wpt/tests/media-source/mediasource-util.js @@ -161,24 +161,37 @@ loadData_(test, url, callback, true); }; - MediaSourceUtil.fetchManifestAndData = function(test, manifestFilename, callback) + /** + * Return a promise that resolves to an object having the properties + * specified in the manifest plus a 'data' property with the media data. + */ + MediaSourceUtil.fetchResourceOfManifest = function(test, manifestFilename) { var baseURL = ''; var manifestURL = baseURL + manifestFilename; - MediaSourceUtil.loadTextData(test, manifestURL, function(manifestText) - { - var manifest = JSON.parse(manifestText); + return new Promise(resolve => { + MediaSourceUtil.loadTextData(test, manifestURL, function(manifestText) + { + var manifest = JSON.parse(manifestText); - assert_true(MediaSource.isTypeSupported(manifest.type), manifest.type + " is supported."); + assert_true(MediaSource.isTypeSupported(manifest.type), manifest.type + " is supported."); - var mediaURL = baseURL + manifest.url; - MediaSourceUtil.loadBinaryData(test, mediaURL, function(mediaData) - { - callback(manifest.type, mediaData); + var mediaURL = manifest.url; + MediaSourceUtil.loadBinaryData(test, mediaURL, function(mediaData) + { + manifest.data = mediaData; + resolve(manifest); + }); }); }); }; + MediaSourceUtil.fetchManifestAndData = async function(test, manifestFilename, callback) + { + const resource = await MediaSourceUtil.fetchResourceOfManifest(test, manifestFilename); + test.step(() => callback(resource.type, resource.data)); + }; + MediaSourceUtil.extractSegmentData = function(mediaData, info) { var start = info.offset; diff --git a/tests/wpt/tests/media-source/mp4/test-a-128k-44100Hz-1ch-manifest.json b/tests/wpt/tests/media-source/mp4/test-a-128k-44100Hz-1ch-manifest.json index f3caa460e9f..9e448d16f0a 100644 --- a/tests/wpt/tests/media-source/mp4/test-a-128k-44100Hz-1ch-manifest.json +++ b/tests/wpt/tests/media-source/mp4/test-a-128k-44100Hz-1ch-manifest.json @@ -1,4 +1,4 @@ { - "url": "mp4/test-a-128k-44100Hz-1ch.mp4", + "url": "/media-source/mp4/test-a-128k-44100Hz-1ch.mp4", "type": "audio/mp4;codecs=\"mp4a.40.2\"" }
\ No newline at end of file diff --git a/tests/wpt/tests/media-source/mp4/test-a-192k-44100Hz-1ch-manifest.json b/tests/wpt/tests/media-source/mp4/test-a-192k-44100Hz-1ch-manifest.json index 41a6f339b79..1cfeddb8d7d 100644 --- a/tests/wpt/tests/media-source/mp4/test-a-192k-44100Hz-1ch-manifest.json +++ b/tests/wpt/tests/media-source/mp4/test-a-192k-44100Hz-1ch-manifest.json @@ -1,4 +1,4 @@ { - "url": "mp4/test-a-192k-44100Hz-1ch.mp4", + "url": "/media-source/mp4/test-a-192k-44100Hz-1ch.mp4", "type": "audio/mp4;codecs=\"mp4a.40.2\"" }
\ No newline at end of file diff --git a/tests/wpt/tests/media-source/mp4/test-av-384k-44100Hz-1ch-320x240-30fps-10kfr-manifest.json b/tests/wpt/tests/media-source/mp4/test-av-384k-44100Hz-1ch-320x240-30fps-10kfr-manifest.json index 7731e3170e5..642eae99f22 100644 --- a/tests/wpt/tests/media-source/mp4/test-av-384k-44100Hz-1ch-320x240-30fps-10kfr-manifest.json +++ b/tests/wpt/tests/media-source/mp4/test-av-384k-44100Hz-1ch-320x240-30fps-10kfr-manifest.json @@ -1,4 +1,4 @@ { - "url": "mp4/test-av-384k-44100Hz-1ch-320x240-30fps-10kfr.mp4", + "url": "/media-source/mp4/test-av-384k-44100Hz-1ch-320x240-30fps-10kfr.mp4", "type": "video/mp4;codecs=\"avc1.4D4001,mp4a.40.2\"" }
\ No newline at end of file diff --git a/tests/wpt/tests/media-source/mp4/test-av-384k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json b/tests/wpt/tests/media-source/mp4/test-av-384k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json index 78ded611f68..6d7d53878d5 100644 --- a/tests/wpt/tests/media-source/mp4/test-av-384k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json +++ b/tests/wpt/tests/media-source/mp4/test-av-384k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json @@ -1,4 +1,4 @@ { - "url": "mp4/test-av-384k-44100Hz-1ch-640x480-30fps-10kfr.mp4", + "url": "/media-source/mp4/test-av-384k-44100Hz-1ch-640x480-30fps-10kfr.mp4", "type": "video/mp4;codecs=\"avc1.4D4001,mp4a.40.2\"" }
\ No newline at end of file diff --git a/tests/wpt/tests/media-source/mp4/test-av-448k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json b/tests/wpt/tests/media-source/mp4/test-av-448k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json index ba46349f93e..7b2972b7e04 100644 --- a/tests/wpt/tests/media-source/mp4/test-av-448k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json +++ b/tests/wpt/tests/media-source/mp4/test-av-448k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json @@ -1,4 +1,4 @@ { - "url": "mp4/test-av-448k-44100Hz-1ch-640x480-30fps-10kfr.mp4", + "url": "/media-source/mp4/test-av-448k-44100Hz-1ch-640x480-30fps-10kfr.mp4", "type": "video/mp4;codecs=\"avc1.4D4001,mp4a.40.2\"" }
\ No newline at end of file diff --git a/tests/wpt/tests/media-source/mp4/test-av-640k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json b/tests/wpt/tests/media-source/mp4/test-av-640k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json index 24da9b4ce3f..c04d4d895fb 100644 --- a/tests/wpt/tests/media-source/mp4/test-av-640k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json +++ b/tests/wpt/tests/media-source/mp4/test-av-640k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json @@ -1,4 +1,4 @@ { - "url": "mp4/test-av-640k-44100Hz-1ch-640x480-30fps-10kfr.mp4", + "url": "/media-source/mp4/test-av-640k-44100Hz-1ch-640x480-30fps-10kfr.mp4", "type": "video/mp4;codecs=\"avc1.4D4001,mp4a.40.2\"" }
\ No newline at end of file diff --git a/tests/wpt/tests/media-source/mp4/test-v-128k-320x240-24fps-8kfr-manifest.json b/tests/wpt/tests/media-source/mp4/test-v-128k-320x240-24fps-8kfr-manifest.json index a31b6d0245b..1fd4d416017 100644 --- a/tests/wpt/tests/media-source/mp4/test-v-128k-320x240-24fps-8kfr-manifest.json +++ b/tests/wpt/tests/media-source/mp4/test-v-128k-320x240-24fps-8kfr-manifest.json @@ -1,4 +1,4 @@ { - "url": "mp4/test-v-128k-320x240-24fps-8kfr.mp4", + "url": "/media-source/mp4/test-v-128k-320x240-24fps-8kfr.mp4", "type": "video/mp4;codecs=\"avc1.4D4001\"" }
\ No newline at end of file diff --git a/tests/wpt/tests/media-source/mp4/test-v-128k-320x240-30fps-10kfr-manifest.json b/tests/wpt/tests/media-source/mp4/test-v-128k-320x240-30fps-10kfr-manifest.json index 3e02844105b..14eef16f6a6 100644 --- a/tests/wpt/tests/media-source/mp4/test-v-128k-320x240-30fps-10kfr-manifest.json +++ b/tests/wpt/tests/media-source/mp4/test-v-128k-320x240-30fps-10kfr-manifest.json @@ -1,4 +1,4 @@ { - "url": "mp4/test-v-128k-320x240-30fps-10kfr.mp4", + "url": "/media-source/mp4/test-v-128k-320x240-30fps-10kfr.mp4", "type": "video/mp4;codecs=\"avc1.4D4001\"" }
\ No newline at end of file diff --git a/tests/wpt/tests/media-source/mp4/test-v-128k-640x480-30fps-10kfr-manifest.json b/tests/wpt/tests/media-source/mp4/test-v-128k-640x480-30fps-10kfr-manifest.json index 10c4f4bcbdf..75351790503 100644 --- a/tests/wpt/tests/media-source/mp4/test-v-128k-640x480-30fps-10kfr-manifest.json +++ b/tests/wpt/tests/media-source/mp4/test-v-128k-640x480-30fps-10kfr-manifest.json @@ -1,4 +1,4 @@ { - "url": "mp4/test-v-128k-640x480-30fps-10kfr.mp4", + "url": "/media-source/mp4/test-v-128k-640x480-30fps-10kfr.mp4", "type": "video/mp4;codecs=\"avc1.4D4001\"" }
\ No newline at end of file diff --git a/tests/wpt/tests/media-source/mp4/test-v-256k-320x240-30fps-10kfr-manifest.json b/tests/wpt/tests/media-source/mp4/test-v-256k-320x240-30fps-10kfr-manifest.json index 42d3e1e524e..5143782ba69 100644 --- a/tests/wpt/tests/media-source/mp4/test-v-256k-320x240-30fps-10kfr-manifest.json +++ b/tests/wpt/tests/media-source/mp4/test-v-256k-320x240-30fps-10kfr-manifest.json @@ -1,4 +1,4 @@ { - "url": "mp4/test-v-256k-320x240-30fps-10kfr.mp4", + "url": "/media-source/mp4/test-v-256k-320x240-30fps-10kfr.mp4", "type": "video/mp4;codecs=\"avc1.4D4001\"" }
\ No newline at end of file diff --git a/tests/wpt/tests/media-source/webm/test-a-128k-44100Hz-1ch-manifest.json b/tests/wpt/tests/media-source/webm/test-a-128k-44100Hz-1ch-manifest.json index 524da8149fe..8c70ccde4bb 100644 --- a/tests/wpt/tests/media-source/webm/test-a-128k-44100Hz-1ch-manifest.json +++ b/tests/wpt/tests/media-source/webm/test-a-128k-44100Hz-1ch-manifest.json @@ -1,4 +1,14 @@ { - "url": "webm/test-a-128k-44100Hz-1ch.webm", - "type": "audio/webm;codecs=\"vorbis\"" -}
\ No newline at end of file + "url": "/media-source/webm/test-a-128k-44100Hz-1ch.webm", + "type": "audio/webm;codecs=\"vorbis\"", + "cluster_start" : [ + "0x0F8F", + "0x12BD", + "0x1545", + "0x17D1", + "0x1A55", + "0x1CE1", + "0x1F6B", + "0x21F1" + ] +} diff --git a/tests/wpt/tests/media-source/webm/test-a-192k-44100Hz-1ch-manifest.json b/tests/wpt/tests/media-source/webm/test-a-192k-44100Hz-1ch-manifest.json index 7f2fa1e8c33..1b09316e492 100644 --- a/tests/wpt/tests/media-source/webm/test-a-192k-44100Hz-1ch-manifest.json +++ b/tests/wpt/tests/media-source/webm/test-a-192k-44100Hz-1ch-manifest.json @@ -1,4 +1,4 @@ { - "url": "webm/test-a-192k-44100Hz-1ch.webm", + "url": "/media-source/webm/test-a-192k-44100Hz-1ch.webm", "type": "audio/webm;codecs=\"vorbis\"" }
\ No newline at end of file diff --git a/tests/wpt/tests/media-source/webm/test-av-384k-44100Hz-1ch-320x240-30fps-10kfr-manifest.json b/tests/wpt/tests/media-source/webm/test-av-384k-44100Hz-1ch-320x240-30fps-10kfr-manifest.json index af9f07af15d..3aa25b78f8b 100644 --- a/tests/wpt/tests/media-source/webm/test-av-384k-44100Hz-1ch-320x240-30fps-10kfr-manifest.json +++ b/tests/wpt/tests/media-source/webm/test-av-384k-44100Hz-1ch-320x240-30fps-10kfr-manifest.json @@ -1,4 +1,4 @@ { - "url": "webm/test-av-384k-44100Hz-1ch-320x240-30fps-10kfr.webm", + "url": "/media-source/webm/test-av-384k-44100Hz-1ch-320x240-30fps-10kfr.webm", "type": "video/webm;codecs=\"vp8,vorbis\"" }
\ No newline at end of file diff --git a/tests/wpt/tests/media-source/webm/test-av-384k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json b/tests/wpt/tests/media-source/webm/test-av-384k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json index f7ec86b3db9..58d9fb0e248 100644 --- a/tests/wpt/tests/media-source/webm/test-av-384k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json +++ b/tests/wpt/tests/media-source/webm/test-av-384k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json @@ -1,4 +1,4 @@ { - "url": "webm/test-av-384k-44100Hz-1ch-640x480-30fps-10kfr.webm", + "url": "/media-source/webm/test-av-384k-44100Hz-1ch-640x480-30fps-10kfr.webm", "type": "video/webm;codecs=\"vp8,vorbis\"" }
\ No newline at end of file diff --git a/tests/wpt/tests/media-source/webm/test-av-448k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json b/tests/wpt/tests/media-source/webm/test-av-448k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json index 96a59db586e..43aa1b8755d 100644 --- a/tests/wpt/tests/media-source/webm/test-av-448k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json +++ b/tests/wpt/tests/media-source/webm/test-av-448k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json @@ -1,4 +1,4 @@ { - "url": "webm/test-av-448k-44100Hz-1ch-640x480-30fps-10kfr.webm", + "url": "/media-source/webm/test-av-448k-44100Hz-1ch-640x480-30fps-10kfr.webm", "type": "video/webm;codecs=\"vp8,vorbis\"" }
\ No newline at end of file diff --git a/tests/wpt/tests/media-source/webm/test-av-640k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json b/tests/wpt/tests/media-source/webm/test-av-640k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json index 86723b34a81..9b0b98c2051 100644 --- a/tests/wpt/tests/media-source/webm/test-av-640k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json +++ b/tests/wpt/tests/media-source/webm/test-av-640k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json @@ -1,4 +1,4 @@ { - "url": "webm/test-av-640k-44100Hz-1ch-640x480-30fps-10kfr.webm", + "url": "/media-source/webm/test-av-640k-44100Hz-1ch-640x480-30fps-10kfr.webm", "type": "video/webm;codecs=\"vp8,vorbis\"" }
\ No newline at end of file diff --git a/tests/wpt/tests/media-source/webm/test-v-128k-320x240-24fps-8kfr-manifest.json b/tests/wpt/tests/media-source/webm/test-v-128k-320x240-24fps-8kfr-manifest.json index 00e103aca9b..abc3026c158 100644 --- a/tests/wpt/tests/media-source/webm/test-v-128k-320x240-24fps-8kfr-manifest.json +++ b/tests/wpt/tests/media-source/webm/test-v-128k-320x240-24fps-8kfr-manifest.json @@ -1,4 +1,4 @@ { - "url": "webm/test-v-128k-320x240-24fps-8kfr.webm", + "url": "/media-source/webm/test-v-128k-320x240-24fps-8kfr.webm", "type": "video/webm;codecs=\"vp8\"" }
\ No newline at end of file diff --git a/tests/wpt/tests/media-source/webm/test-v-128k-320x240-30fps-10kfr-manifest.json b/tests/wpt/tests/media-source/webm/test-v-128k-320x240-30fps-10kfr-manifest.json index fdeeb401d96..8b52e095c29 100644 --- a/tests/wpt/tests/media-source/webm/test-v-128k-320x240-30fps-10kfr-manifest.json +++ b/tests/wpt/tests/media-source/webm/test-v-128k-320x240-30fps-10kfr-manifest.json @@ -1,4 +1,4 @@ { - "url": "webm/test-v-128k-320x240-30fps-10kfr.webm", + "url": "/media-source/webm/test-v-128k-320x240-30fps-10kfr.webm", "type": "video/webm;codecs=\"vp8\"" }
\ No newline at end of file diff --git a/tests/wpt/tests/media-source/webm/test-v-128k-640x480-30fps-10kfr-manifest.json b/tests/wpt/tests/media-source/webm/test-v-128k-640x480-30fps-10kfr-manifest.json index 4e304606678..12926ceb8f0 100644 --- a/tests/wpt/tests/media-source/webm/test-v-128k-640x480-30fps-10kfr-manifest.json +++ b/tests/wpt/tests/media-source/webm/test-v-128k-640x480-30fps-10kfr-manifest.json @@ -1,4 +1,4 @@ { - "url": "webm/test-v-128k-640x480-30fps-10kfr.webm", + "url": "/media-source/webm/test-v-128k-640x480-30fps-10kfr.webm", "type": "video/webm;codecs=\"vp8\"" }
\ No newline at end of file diff --git a/tests/wpt/tests/media-source/webm/test-v-256k-320x240-30fps-10kfr-manifest.json b/tests/wpt/tests/media-source/webm/test-v-256k-320x240-30fps-10kfr-manifest.json index 3470674bff5..7a437e5f84c 100644 --- a/tests/wpt/tests/media-source/webm/test-v-256k-320x240-30fps-10kfr-manifest.json +++ b/tests/wpt/tests/media-source/webm/test-v-256k-320x240-30fps-10kfr-manifest.json @@ -1,4 +1,4 @@ { - "url": "webm/test-v-256k-320x240-30fps-10kfr.webm", + "url": "/media-source/webm/test-v-256k-320x240-30fps-10kfr.webm", "type": "video/webm;codecs=\"vp8\"" }
\ No newline at end of file diff --git a/tests/wpt/tests/mediasession/media-session-artwork-fetch-service-worker.js b/tests/wpt/tests/mediasession/media-session-artwork-fetch-service-worker.js new file mode 100644 index 00000000000..e62b9b44862 --- /dev/null +++ b/tests/wpt/tests/mediasession/media-session-artwork-fetch-service-worker.js @@ -0,0 +1,21 @@ +let port; +onmessage = async e => { + await self.clients.claim(); + + port = e.data.port; + port.postMessage("Ready"); +} + +onfetch = e => { + const request = e.request; + if (port && request.url.endsWith(".jpg")) { + port.postMessage({ type: "fetch", info: { + url : request.url, + destination : request.destination, + mode : request.mode, + redirect : request.redirect, + referrerPolicy : request.referrerPolicy, + credentials : request.credentials + }}); + } +} diff --git a/tests/wpt/tests/mediasession/media-session-artwork-fetch.https.html b/tests/wpt/tests/mediasession/media-session-artwork-fetch.https.html new file mode 100644 index 00000000000..758446160ae --- /dev/null +++ b/tests/wpt/tests/mediasession/media-session-artwork-fetch.https.html @@ -0,0 +1,102 @@ +<!doctype html> +<html> +<head> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src=/resources/testdriver.js></script> +<script src=/resources/testdriver-vendor.js></script> +<script src="/common/get-host-info.sub.js"></script> +</head> +<body> +<audio controls loop id=audio></audio> +<script> +let port; + +function waitForState(test, worker, state) +{ + if (!worker || worker.state == undefined) + return Promise.reject(new Error('waitForState must be passed a ServiceWorker')); + + if (worker.state === state) + return Promise.resolve(state); + + return new Promise(function(resolve, reject) { + worker.addEventListener('statechange', function() { + if (worker.state === state) + resolve(state); + }); + test.step_timeout(() => reject("waitForState timed out, worker state is " + worker.state), 5000); + }); +} + +promise_test(async test => { + let registration = await navigator.serviceWorker.getRegistration(""); + let worker; + if (!registration) { + registration = await navigator.serviceWorker.register("media-session-artwork-fetch-service-worker.js", { scope: "" }); + worker = registration.installing; + await waitForState(test, worker, "activated"); + } else + worker = registration.active; + + const channel = new MessageChannel(); + worker.postMessage({ port: channel.port1 }, [channel.port1]); + port = channel.port2; + + const result = await new Promise(resolve => port.onmessage = e => resolve(e.data)); + assert_equals(result, "Ready"); +}, "Setup service worker"); + +promise_test(async test => { + audio.src = "/media/sound_5.mp3"; + if (window.testRunner && window.test_driver) { + let promise; + test_driver.bless("audio playback", () => { + promise = audio.play(); + }); + await promise; + } else + await audio.play(); +}, "Play some audio"); + +const artworkResource = "/media/2048x1360-random.jpg"; + +promise_test(async test => { + navigator.mediaSession.metadata = new MediaMetadata({title: "title", artist: "artist", album: "album", artwork: [{src: artworkResource}]}); + const message = await new Promise(resolve => port.onmessage = e => resolve(e.data)); + + assert_equals(message.type, "fetch"); + + const request = message.info; + assert_equals(request.destination, "image"); + assert_equals(request.mode, "no-cors"); + assert_equals(request.redirect, "follow"); + assert_equals(request.referrerPolicy, "strict-origin-when-cross-origin"); + assert_equals(request.credentials, "include"); + + const url = new URL(artworkResource, window.location.href); + assert_equals(request.url, url + ""); +}, "Set same origin media metadata"); + +promise_test(async test => { + // We make sure the previous test artwork is not loaded again. + navigator.mediaSession.metadata = new MediaMetadata({title: "title", artist: "artist", album: "album"}); + await new Promise(resolve => test.step_timeout(resolve, 100)); + + const artworkSrc = get_host_info().HTTPS_REMOTE_ORIGIN + artworkResource; + navigator.mediaSession.metadata = new MediaMetadata({title: "title", artist: "artist", album: "album", artwork: [{src: artworkSrc}]}); + const message = await new Promise(resolve => port.onmessage = e => resolve(e.data)); + + assert_equals(message.type, "fetch"); + + const request = message.info; + assert_equals(request.destination, "image"); + assert_equals(request.mode, "no-cors"); + assert_equals(request.redirect, "follow"); + assert_equals(request.referrerPolicy, "strict-origin-when-cross-origin"); + assert_equals(request.credentials, "include"); + assert_equals(request.url, artworkSrc); +}, "Set cross origin media metadata"); +</script> +</body> +</html> diff --git a/tests/wpt/tests/png/apng/manual/fcTL-delay-zero-num-manual.html b/tests/wpt/tests/png/apng/manual/fcTL-delay-zero-num-manual.html index 561d01e4db4..130500d24db 100644 --- a/tests/wpt/tests/png/apng/manual/fcTL-delay-zero-num-manual.html +++ b/tests/wpt/tests/png/apng/manual/fcTL-delay-zero-num-manual.html @@ -4,7 +4,7 @@ <link rel="author" title="Chris Lilley" href="mailto:chris@w3.org"> <link rel="help" href="https://www.w3.org/TR/png-3/#apng-frame-based-animation"> <link rel="help" href="https://www.w3.org/TR/png-3/#fcTL-chunk"> -<meta name="assert" content="If the the value of the numerator is 0 the decoder should render the next frame as quickly as possible, though viewers may impose a reasonable lower bound."> +<meta name="assert" content="If the value of the numerator is 0 the decoder should render the next frame as quickly as possible, though viewers may impose a reasonable lower bound."> <style> .test { width: 128px; diff --git a/tests/wpt/tests/png/apng/resources/source.html b/tests/wpt/tests/png/apng/resources/source.html index cca7063cff4..56c34fc8814 100644 --- a/tests/wpt/tests/png/apng/resources/source.html +++ b/tests/wpt/tests/png/apng/resources/source.html @@ -527,7 +527,7 @@ IEND => [], <div class="case"> <p>Zero numerator. -<blockquote cite="#apng"><p>If the the value of the numerator is 0 the decoder should render the next frame as quickly as possible, though viewers may impose a reasonable lower bound.</blockquote> +<blockquote cite="#apng"><p>If the value of the numerator is 0 the decoder should render the next frame as quickly as possible, though viewers may impose a reasonable lower bound.</blockquote> <p>This should flash cyan for a short period of time (perhaps zero), then magenta for the same short period of time, then blue for half a second, then yellow for one second, then repeat. <png> IHDR => [W, H], diff --git a/tests/wpt/tests/pointerevents/pointerevent_range_input.html b/tests/wpt/tests/pointerevents/pointerevent_range_input.html new file mode 100644 index 00000000000..4a67f4dd653 --- /dev/null +++ b/tests/wpt/tests/pointerevents/pointerevent_range_input.html @@ -0,0 +1,178 @@ +<!DOCTYPE html> +<!-- TODO(crbug.com/40275057) Fix test for pointer-event-range-input.html?pen. +--> +<title>Pointer dragging behavior on input type='range' </title> +<meta name="variant" content="?touch"> +<meta name="variant" content="?mouse"> +<script src='/resources/testharness.js'></script> +<script src='/resources/testharnessreport.js'></script> +<script src='/resources/testdriver.js'></script> +<script src='/resources/testdriver-actions.js'></script> +<script src='/resources/testdriver-vendor.js'></script> +<style type='text/css'> + body { + margin: 0; + } +</style> + +<div><input type='range' id='slider1' min='0' max='100' step='10'></div> +<div><input type='range' id='slider2' min='0' max='100' step='10' style='touch-action:none;'></div> +<div><input type='range' id='slider3' min='0' max='100' step='10' style='writing-mode:vertical-lr; direction:rtl;'></div> + +<script> +"use strict"; +const pointerType = location.search.substring(1); + +function isMouse() { + return pointerType === 'mouse'; +} +function isTouch() { + return pointerType === 'touch'; +} + +// Verify that a point is on screen. +// (x,y) is relative to the center of the origin element. +function assert_point_within_viewport(x, y, origin) { + const rect = origin.getBoundingClientRect(); + const center_point = { + x: rect.x + rect.width / 2, + y: rect.y + rect.height / 2 + }; + const viewport_point = { + x: (center_point.x - visualViewport.offsetLeft) * visualViewport.scale, + y: (center_point.y - visualViewport.offsetTop) * visualViewport.scale + }; + x += viewport_point.x; + y += viewport_point.y; + assert_true(x >= 0 && x <= window.innerWidth, + 'x coordinate outside viewport'); + assert_true(y >= 0 && y <= window.innerHeight, + 'y coordinate outside viewport'); +} + +// The deltas are relative to the center of the target. +function smoothDrag(delta_x, delta_y, target) { + const eventTarget = document; + const prevent_fling_pause_ms = isTouch() ? 100 : 0; + + const x = 0; + const y = 0; + const end_x = Math.round(delta_x); + const end_y = Math.round(delta_y); + assert_point_within_viewport(end_x, end_y, target); + + // Expect a pointerup or pointercancel event depending on whether scrolling + // actually took place. + return new Promise(resolve => { + const pointerPromise = new Promise(resolve => { + const pointerListener = (event) => { + eventTarget.removeEventListener('pointerup', pointerListener); + eventTarget.removeEventListener('pointercancel', pointerListener); + resolve(event.type); + }; + eventTarget.addEventListener('pointerup', pointerListener); + eventTarget.addEventListener('pointercancel', pointerListener); + }); + const actionPromise = new test_driver.Actions() + .addPointer("pointer1", pointerType) + .pointerMove(x, y, { origin: target }) + .pointerDown({button: 0/*Left*/}) + .pointerMove(end_x, end_y, { origin: target }) + .pause(prevent_fling_pause_ms) + .pointerUp({button: 0 /*Left*/}) + .send(); + Promise.all([actionPromise, pointerPromise]).then(responses => { + resolve(responses[1]); + }); + }); +} + +function forceLayoutUpdate() { + document.body.offsetTop; +} + +const slider1 = document.getElementById('slider1'); +const slider2 = document.getElementById('slider2'); +const slider3 = document.getElementById('slider3'); + +function resetPage() { + slider1.value = 50; + slider2.value = 50; + slider3.value = 50; +} + +const isMac = navigator.platform.indexOf('Mac') == 0; +if (isMac && isTouch()) { + // Mac devices do not support touch. + testNothing(); +} else { + forceLayoutUpdate(); + + promise_test(async t => { + resetPage(); + assert_equals(parseInt(slider1.value), 50, "Slider1's initial value"); + // Perform a left drag from the center of the slider. + const gestureCompletionEventType = + await smoothDrag(-slider1.clientWidth / 2, 0, slider1); + assert_equals(gestureCompletionEventType, 'pointerup', + "The gesture is completed with 'pointerup'"); + assert_equals(parseInt(slider1.value), 0, + "Should set slider1's value to 0"); + }, 'Horizontal drag on a horizontal slider.'); + + promise_test(async t => { + resetPage(); + assert_equals(parseInt(slider1.value), 50, "Slider1's initial value"); + // Perform a down drag from the center of the slider. + const gestureCompletionEventType = + await smoothDrag(0, slider1.clientWidth, slider1); + assert_equals(parseInt(slider1.value), 50, + "Should not change slider1's value."); + // Don't assert gestureCompletionEventType value. Depending on the UA, the + // gesture may result in scroll. In this case gestureCompletionEventType + // is 'pointercancel'. + }, 'Vertical drag on a horizontal slider.'); + + promise_test(async t => { + resetPage(); + assert_equals(parseInt(slider2.value), 50, "Slider2's initial value"); + // Perform a down drag from the center of the slider. + const gestureCompletionEventType = + await smoothDrag(0, slider2.clientWidth, slider2); + assert_equals(gestureCompletionEventType, 'pointerup', + "The gesture is completed with 'pointerup'"); + assert_equals(parseInt(slider2.value), 50, + "Should not change slider2's value."); + + }, 'Vertical drag on a horizontal slider with touch-action:none.'); + + promise_test(async t => { + resetPage(); + assert_equals(parseInt(slider3.value), 50, "Slider3's initial value."); + // Perform an up drag from the center of the slider. + const gestureCompletionEventType = + await smoothDrag(0, -slider3.clientHeight / 2, slider3); + assert_equals(gestureCompletionEventType, 'pointerup', + "The gesture is completed with 'pointerup'"); + assert_equals(parseInt(slider3.value), 100, + "Should set slider3' value to 100."); + }, 'Vertical drag on a vertical slider.'); + + promise_test(async t => { + resetPage(); + assert_equals(parseInt(slider3.value), 50, "Slider3's initial value."); + // Perform a right drag from the center of the slider. + const gestureCompletionEventType = + await smoothDrag(slider3.clientHeight, 0, slider3); + assert_equals(parseInt(slider3.value), 50, + "Should not change slider3' value."); + // Don't assert gestureCompletionEventType value. Depending on the UA, the + // gesture may result in scroll. In this case gestureCompletionEventType + // is 'pointercancel'. + }, 'Horizontal drag on a vertical slider.'); +} + +function testNothing() { + test(() => {}, 'Empty test for MacOS.'); +} +</script> diff --git a/tests/wpt/tests/private-aggregation/shared-storage-surface-context-id.https.html b/tests/wpt/tests/private-aggregation/shared-storage-surface-context-id.https.html index 3b0e1b3d740..f51f3960550 100644 --- a/tests/wpt/tests/private-aggregation/shared-storage-surface-context-id.https.html +++ b/tests/wpt/tests/private-aggregation/shared-storage-surface-context-id.https.html @@ -11,7 +11,7 @@ 'use strict'; promise_test(async () => { - await addModuleOnce("/private-aggregation/resources/private-aggregation-helper-module.js"); + await addModuleOnce("/private-aggregation/resources/shared-storage-helper-module.js"); const data = { contributions: [{bucket: 1n, value: 2}] @@ -25,7 +25,7 @@ promise_test(async () => { }, 'set context ID'); promise_test(async () => { - await addModuleOnce("/private-aggregation/resources/private-aggregation-helper-module.js"); + await addModuleOnce("/private-aggregation/resources/shared-storage-helper-module.js"); const data = { contributions: [{bucket: 1n, value: 2}] @@ -39,7 +39,7 @@ promise_test(async () => { }, 'set empty context ID'); promise_test(async () => { - await addModuleOnce("/private-aggregation/resources/private-aggregation-helper-module.js"); + await addModuleOnce("/private-aggregation/resources/shared-storage-helper-module.js"); const data = { contributions: [{bucket: 1n, value: 2}] @@ -53,7 +53,7 @@ promise_test(async () => { }, 'set max length context ID'); promise_test(async (test) => { - await addModuleOnce("/private-aggregation/resources/private-aggregation-helper-module.js"); + await addModuleOnce("/private-aggregation/resources/shared-storage-helper-module.js"); const data = { contributions: [{bucket: 1n, value: 2}] diff --git a/tests/wpt/tests/private-aggregation/shared-storage-surface-filtering-id.https.html b/tests/wpt/tests/private-aggregation/shared-storage-surface-filtering-id.https.html index 53ed3a109bc..e79634b7391 100644 --- a/tests/wpt/tests/private-aggregation/shared-storage-surface-filtering-id.https.html +++ b/tests/wpt/tests/private-aggregation/shared-storage-surface-filtering-id.https.html @@ -11,7 +11,7 @@ 'use strict'; promise_test(async () => { - await addModuleOnce("/private-aggregation/resources/private-aggregation-helper-module.js"); + await addModuleOnce("/private-aggregation/resources/shared-storage-helper-module.js"); const privateAggregationConfig = {}; @@ -20,7 +20,7 @@ promise_test(async () => { }, 'no filtering ID max bytes'); promise_test(async () => { - await addModuleOnce("/private-aggregation/resources/private-aggregation-helper-module.js"); + await addModuleOnce("/private-aggregation/resources/shared-storage-helper-module.js"); const privateAggregationConfig = { filteringIdMaxBytes: 1, @@ -31,7 +31,7 @@ promise_test(async () => { }, 'explicit default filtering ID max bytes'); promise_test(async () => { - await addModuleOnce("/private-aggregation/resources/private-aggregation-helper-module.js"); + await addModuleOnce("/private-aggregation/resources/shared-storage-helper-module.js"); const privateAggregationConfig = { filteringIdMaxBytes: 8, @@ -42,7 +42,7 @@ promise_test(async () => { }, 'max filtering ID max bytes'); promise_test(async (test) => { - await addModuleOnce("/private-aggregation/resources/private-aggregation-helper-module.js"); + await addModuleOnce("/private-aggregation/resources/shared-storage-helper-module.js"); const privateAggregationConfig = { filteringIdMaxBytes: 9, @@ -55,7 +55,7 @@ promise_test(async (test) => { }, 'too big filtering ID max bytes'); promise_test(async (test) => { - await addModuleOnce("/private-aggregation/resources/private-aggregation-helper-module.js"); + await addModuleOnce("/private-aggregation/resources/shared-storage-helper-module.js"); const privateAggregationConfig = { filteringIdMaxBytes: 0, @@ -68,7 +68,7 @@ promise_test(async (test) => { }, 'zero filtering ID max bytes'); promise_test(async (test) => { - await addModuleOnce("/private-aggregation/resources/private-aggregation-helper-module.js"); + await addModuleOnce("/private-aggregation/resources/shared-storage-helper-module.js"); const privateAggregationConfig = { filteringIdMaxBytes: -1, @@ -81,7 +81,7 @@ promise_test(async (test) => { }, 'negative filtering ID max bytes'); promise_test(async (test) => { - await addModuleOnce("/private-aggregation/resources/private-aggregation-helper-module.js"); + await addModuleOnce("/private-aggregation/resources/shared-storage-helper-module.js"); const privateAggregationConfig = { filteringIdMaxBytes: 3n, diff --git a/tests/wpt/tests/quirks/body-fill-html-quirk-intrinsic-crash.html b/tests/wpt/tests/quirks/body-fill-html-quirk-intrinsic-crash.html new file mode 100644 index 00000000000..aadb6037f34 --- /dev/null +++ b/tests/wpt/tests/quirks/body-fill-html-quirk-intrinsic-crash.html @@ -0,0 +1,4 @@ +<!-- quirks-mode --> +<body style="width: fit-content;"> + <div style="aspect-ratio: 1;"></div> +</body> diff --git a/tests/wpt/tests/resources/chromium/webxr-test.js b/tests/wpt/tests/resources/chromium/webxr-test.js index 15d015debb1..41340aa27e0 100644 --- a/tests/wpt/tests/resources/chromium/webxr-test.js +++ b/tests/wpt/tests/resources/chromium/webxr-test.js @@ -1207,6 +1207,11 @@ class MockRuntime { this.enabledFeatures_ = enabled_features; + let selectedDepthType; + if (sessionOptions.depthOptions && sessionOptions.depthOptions.depthTypeRequest.length != 0) { + selectedDepthType = sessionOptions.depthOptions.depthTypeRequest[0]; + } + return Promise.resolve({ session: { submitFrameSink: submit_frame_sink, @@ -1219,9 +1224,12 @@ class MockRuntime { depthConfiguration: enabled_features.includes( xrSessionMojom.XRSessionFeature.DEPTH) ? { + // TODO(https://crbug.com/409806803): Update support via + // a webxr-test-api method. depthUsage: xrSessionMojom.XRDepthUsage.kCPUOptimized, depthDataFormat: xrSessionMojom.XRDepthDataFormat.kLuminanceAlpha, + depthType: selectedDepthType, } : null, views: this._getDefaultViews(), @@ -1251,6 +1259,7 @@ class MockRuntime { switch (feature) { case xrSessionMojom.XRSessionFeature.DEPTH: // This matches what Chrome can currently support. + // TODO(https://crbug.com/409806803): Add a webxr-test-api for this. return options.depthOptions && (options.depthOptions.usagePreferences.length == 0 || options.depthOptions.usagePreferences.includes( diff --git a/tests/wpt/tests/resources/testdriver.js b/tests/wpt/tests/resources/testdriver.js index 460f879878f..f127e2b2c8d 100644 --- a/tests/wpt/tests/resources/testdriver.js +++ b/tests/wpt/tests/resources/testdriver.js @@ -629,7 +629,7 @@ /** * Minimizes the browser window. * - * Matches the the behaviour of the `Minimize + * Matches the behaviour of the `Minimize * <https://www.w3.org/TR/webdriver/#minimize-window>`_ * WebDriver command * @@ -1497,6 +1497,48 @@ */ set_protected_audience_k_anonymity: function(owner, name, hashes, context = null) { return window.test_driver_internal.set_protected_audience_k_anonymity(owner, name, hashes, context); + }, + + /** + * Overrides the display features provided by the hardware so the viewport segments + * can be emulated. + * + * Matches the `Set display features + * <https://drafts.csswg.org/css-viewport/#set-display-features>`_ + * WebDriver command. + * + * @param {Array} features - An array of `DisplayFeatureOverride + * <https://drafts.csswg.org/css-viewport/#display-feature-override>`. + * @param {WindowProxy} [context=null] - Browsing context in which to + * run the call, or null for the + * current browsing context. + * + * @returns {Promise} Fulfilled when the display features are set. + * Rejected in case the WebDriver command errors out + * (including if the array is malformed). + */ + set_display_features: function(features, context=null) { + return window.test_driver_internal.set_display_features(features, context); + }, + + /** + * Removes display features override and returns the control + * back to hardware. + * + * Matches the `Clear display features + * <https://drafts.csswg.org/css-viewport/#clear-display-features>`_ + * WebDriver command. + * + * @param {WindowProxy} [context=null] - Browsing context in which to + * run the call, or null for the + * current browsing context. + * + * @returns {Promise} Fulfilled after the display features override has + * been removed. Rejected in case the WebDriver + * command errors out. + */ + clear_display_features: function(context=null) { + return window.test_driver_internal.clear_display_features(context); } }; @@ -1758,6 +1800,14 @@ async set_protected_audience_k_anonymity(owner, name, hashes, context=null) { throw new Error("set_protected_audience_k_anonymity() is not implemented by testdriver-vendor.js"); + }, + + async set_display_features(features, context=null) { + throw new Error("set_display_features() is not implemented by testdriver-vendor.js"); + }, + + async clear_display_features(context=null) { + throw new Error("clear_display_features() is not implemented by testdriver-vendor.js"); } }; })(); diff --git a/tests/wpt/tests/resources/testharness.js b/tests/wpt/tests/resources/testharness.js index bd668be20f8..8ef0574f1f0 100644 --- a/tests/wpt/tests/resources/testharness.js +++ b/tests/wpt/tests/resources/testharness.js @@ -1011,13 +1011,13 @@ /** * Stop listening for events */ - function stop_watching() { + this.stop_watching = function() { for (var i = 0; i < eventTypes.length; i++) { watchedNode.removeEventListener(eventTypes[i], eventHandler, false); } }; - test._add_cleanup(stop_watching); + test._add_cleanup(this.stop_watching); return this; } diff --git a/tests/wpt/tests/selection/move-by-word-with-symbol.html b/tests/wpt/tests/selection/move-by-word-with-symbol.html new file mode 100644 index 00000000000..7a0f9048960 --- /dev/null +++ b/tests/wpt/tests/selection/move-by-word-with-symbol.html @@ -0,0 +1,67 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Include symbols while moving forward/backward by word</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/resources/testdriver-actions.js"></script> +<script src="../editing/include/editor-test-utils.js"></script> + +<div contenteditable id="target">~>>>>>p+++</div> +<textarea id="textareaTarget">$$$$q~~~</textarea> +<input id="inputTarget" value="||||r====="> + +<script> + const selection = getSelection(); + const textNode = document.getElementById("target").childNodes[0]; + const textareaNode = document.getElementById("textareaTarget"); + const inputNode = document.getElementById("inputTarget"); + + test(() => { + selection.collapse(textNode, 6); // Start just before 'p' + selection.modify("move", "backward", "word"); + assert_equals(selection.focusNode, textNode); + assert_equals(selection.focusOffset, 0, "Caret should move to the beginning"); + }, "Symbols should be included while moving backward by word"); + + test(() => { + selection.collapse(textNode, 7); // Start just after 'p' + selection.modify("move", "forward", "word"); + assert_equals(selection.focusNode, textNode); + assert_equals(selection.focusOffset, 10, "Caret should move to the end"); + }, "Symbols should be included while moving forward by word"); + + promise_test(async () => { + textareaNode.focus(); + textareaNode.setSelectionRange(4, 4); // Start just before 'q' + const utils = new EditorTestUtils(textareaNode); + await utils.sendMoveWordLeftKey(); + assert_equals(textareaNode.selectionStart, 0, "Caret should move to the beginning"); + }, "Symbols should be included while moving backward by word in textarea element"); + + promise_test(async () => { + textareaNode.focus(); + textareaNode.setSelectionRange(5, 5); // Start just after 'q' + const utils = new EditorTestUtils(textareaNode); + await utils.sendMoveWordRightKey(); + assert_equals(textareaNode.selectionStart, 8, "Caret should move to the end"); + }, "Symbols should be included while moving forward by word in textarea element"); + + promise_test(async () => { + inputNode.focus(); + inputNode.setSelectionRange(4, 4); // Start just before 'r' + const utils = new EditorTestUtils(inputNode); + await utils.sendMoveWordLeftKey(); + assert_equals(inputNode.selectionStart, 0, "Caret should move to the beginning"); + }, "Symbols should be included while moving backward by word in input element"); + + promise_test(async () => { + inputNode.focus(); + inputNode.setSelectionRange(5, 5); // Start just after 'r' + const utils = new EditorTestUtils(inputNode); + await utils.sendMoveWordRightKey(); + assert_equals(inputNode.selectionStart, 10, "Caret should move to the end"); + }, "Symbols should be included while moving forward by word in input element"); + +</script>
\ No newline at end of file diff --git a/tests/wpt/tests/service-workers/service-worker/claim-using-registration.https.html b/tests/wpt/tests/service-workers/service-worker/claim-using-registration.https.html index 8a2a6ff25c8..a02f8e9ca6f 100644 --- a/tests/wpt/tests/service-workers/service-worker/claim-using-registration.https.html +++ b/tests/wpt/tests/service-workers/service-worker/claim-using-registration.https.html @@ -97,7 +97,7 @@ promise_test(function(t) { .then(function() { frame.remove(); }); - }, 'Test for the waiting worker claims a client which is using the the ' + + }, 'Test for the waiting worker claims a client which is using the ' + 'same registration'); </script> diff --git a/tests/wpt/tests/service-workers/service-worker/resources/testharness-helpers.js b/tests/wpt/tests/service-workers/service-worker/resources/testharness-helpers.js index b1a5b960e06..5f93a25438a 100644 --- a/tests/wpt/tests/service-workers/service-worker/resources/testharness-helpers.js +++ b/tests/wpt/tests/service-workers/service-worker/resources/testharness-helpers.js @@ -14,7 +14,7 @@ // 2.1 |a.p| is weakly equal to |b.p| for all own properties |p| of |a|. // 2.2 Every own property of |b| is an own property of |a|. // -// This is a replacement for the the version of assert_object_equals() in +// This is a replacement for the version of assert_object_equals() in // testharness.js. The latter doesn't handle own properties correctly. I.e. if // |a.p| is not an own property, it still requires that |b.p| be an own // property. diff --git a/tests/wpt/tests/service-workers/service-worker/unregister-immediately-before-installed.https.html b/tests/wpt/tests/service-workers/service-worker/unregister-immediately-before-installed.https.html index 79cdaf062dc..c56674c0fb1 100644 --- a/tests/wpt/tests/service-workers/service-worker/unregister-immediately-before-installed.https.html +++ b/tests/wpt/tests/service-workers/service-worker/unregister-immediately-before-installed.https.html @@ -16,7 +16,7 @@ // worker's state to 'redundant'. promise_test(async test => { - // This test keeps the the service worker in the 'parsed' state by using a + // This test keeps the service worker in the 'parsed' state by using a // script with an infinite loop. const script_url = 'resources/onparse-infiniteloop-worker.js'; const scope_url = @@ -34,7 +34,7 @@ promise_test(async test => { }, 'Clear-Site-Data must abort service worker registration.'); promise_test(async test => { - // This test keeps the the service worker in the 'installing' state by using a + // This test keeps the service worker in the 'installing' state by using a // script with an install event waitUntil() promise that never resolves. const script_url = 'resources/oninstall-waituntil-forever.js'; const scope_url = diff --git a/tests/wpt/tests/service-workers/service-worker/unregister-immediately.https.html b/tests/wpt/tests/service-workers/service-worker/unregister-immediately.https.html index 54be40a5452..c6a91f8e235 100644 --- a/tests/wpt/tests/service-workers/service-worker/unregister-immediately.https.html +++ b/tests/wpt/tests/service-workers/service-worker/unregister-immediately.https.html @@ -16,7 +16,7 @@ // active worker's controlled clients to unload. promise_test(async test => { - // This test keeps the the service worker in the 'activating' state by using a + // This test keeps the service worker in the 'activating' state by using a // script with an activate event waitUntil() promise that never resolves. const script_url = 'resources/onactivate-waituntil-forever.js'; const scope_url = diff --git a/tests/wpt/tests/shadow-dom/event-post-dispatch.html b/tests/wpt/tests/shadow-dom/event-post-dispatch.html index a8fe0a24b1d..0cab1fcc6b4 100644 --- a/tests/wpt/tests/shadow-dom/event-post-dispatch.html +++ b/tests/wpt/tests/shadow-dom/event-post-dispatch.html @@ -278,5 +278,5 @@ test(t => { assert_equals(event.eventPhase, 0); assert_equals(event.currentTarget, null); assert_equals(event.composedPath().length, 0); -}, 'Event properties post dispatch when target get moved into the the shadow tree by event listener'); +}, 'Event properties post dispatch when target get moved into the shadow tree by event listener'); </script> diff --git a/tests/wpt/tests/speculation-rules/prefetch/resources/executor.sub.html b/tests/wpt/tests/speculation-rules/prefetch/resources/executor.sub.html index 6563b4fcff7..6e4f18ba854 100644 --- a/tests/wpt/tests/speculation-rules/prefetch/resources/executor.sub.html +++ b/tests/wpt/tests/speculation-rules/prefetch/resources/executor.sub.html @@ -17,8 +17,10 @@ window.requestHeaders = { sec_fetch_mode: "{{header_or_default(Sec-Fetch-Mode, )}}", // Convert to the raw string to avoid backslashes from being processed as // escape sequences. + // TODO(crbug.com/404573971): Remove `header_or_default` to reflect + // `__no_tags__` properly. sec_speculation_tags: reverse_html_escape( - String.raw`{{header_or_default(Sec-Speculation-Tags, )}}`), + String.raw`{{header_or_default(Sec-Speculation-Tags, __no_tags__)}}`), }; const uuid = new URLSearchParams(location.search).get('uuid'); diff --git a/tests/wpt/tests/speculation-rules/speculation-tags/cross-site-prefetch.https.html b/tests/wpt/tests/speculation-rules/speculation-tags/cross-site-prefetch.https.html new file mode 100644 index 00000000000..b10aecf4035 --- /dev/null +++ b/tests/wpt/tests/speculation-rules/speculation-tags/cross-site-prefetch.https.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<title>Cross-site prefetch attempts with speculation tags</title> +<meta name="timeout" content="long"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/dispatcher/dispatcher.js"></script> +<script src="/common/utils.js"></script> +<script src="/html/browsers/browsing-the-web/remote-context-helper/resources/remote-context-helper.js"></script> +<script src="/speculation-rules/prerender/resources/utils.js"></script> +<script src="/speculation-rules/resources/utils.js"></script> +<script src="/speculation-rules/prefetch/resources/utils.sub.js"></script> + +<script> +"use strict"; + +setup(() => assertSpeculationRulesIsSupported()); + +promise_test(async t => { + const agent = await spawnWindow(t); + + const nextUrl = agent.getExecutorURL({ hostname: PREFETCH_PROXY_BYPASS_HOST, page: 2 }); + await agent.forceSpeculationRules({ + tag: 'tag1', + prefetch: [{source: "list", urls: [nextUrl]}] + }); + await agent.navigate(nextUrl); + + const headers = await agent.getRequestHeaders(); + assert_prefetched(headers, "must be prefetched"); + assert_equals(headers["sec_speculation_tags"], '__no_tags__'); +}, "cross-site prefetch should not have Sec-Speculation-Tags be sent"); + +</script> diff --git a/tests/wpt/tests/speculation-rules/speculation-tags/cross-site-to-same-site-redirection-prefetch.https.html b/tests/wpt/tests/speculation-rules/speculation-tags/cross-site-to-same-site-redirection-prefetch.https.html new file mode 100644 index 00000000000..e264572c2f9 --- /dev/null +++ b/tests/wpt/tests/speculation-rules/speculation-tags/cross-site-to-same-site-redirection-prefetch.https.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<title>Cross-site prefetch attempts with speculation tags</title> +<meta name="timeout" content="long"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/dispatcher/dispatcher.js"></script> +<script src="/common/utils.js"></script> +<script src="/html/browsers/browsing-the-web/remote-context-helper/resources/remote-context-helper.js"></script> +<script src="/speculation-rules/prerender/resources/utils.js"></script> +<script src="/speculation-rules/resources/utils.js"></script> +<script src="/speculation-rules/prefetch/resources/utils.sub.js"></script> + +<script> +"use strict"; + +setup(() => assertSpeculationRulesIsSupported()); + +promise_test(async t => { + const agent = await spawnWindow(t); + + const finalUrl = agent.getExecutorURL({ page: 2 }); + const nextUrl = new URL("/common/redirect.py?location=" + encodeURIComponent(finalUrl), + agent.getExecutorURL({ hostname: PREFETCH_PROXY_BYPASS_HOST })); + await agent.forceSpeculationRules({ + tag: 'tag1', + prefetch: [{source: "list", urls: [nextUrl]}] + }); + await agent.navigate(nextUrl, {expectedDestinationUrl: finalUrl}); + + const headers = await agent.getRequestHeaders(); + assert_prefetched(headers, "must be prefetched"); + assert_equals(headers["sec_speculation_tags"], '"tag1"'); +}, "same-site redirection prefetch should have Sec-Speculation-Tags even if cross-site url in the redirection chain"); + +</script> diff --git a/tests/wpt/tests/speculation-rules/speculation-tags/same-site-to-cross-site-redirection-prefetch.https.html b/tests/wpt/tests/speculation-rules/speculation-tags/same-site-to-cross-site-redirection-prefetch.https.html new file mode 100644 index 00000000000..27ece0cfde1 --- /dev/null +++ b/tests/wpt/tests/speculation-rules/speculation-tags/same-site-to-cross-site-redirection-prefetch.https.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<title>Cross-site prefetch attempts with speculation tags</title> +<meta name="timeout" content="long"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/dispatcher/dispatcher.js"></script> +<script src="/common/utils.js"></script> +<script src="/html/browsers/browsing-the-web/remote-context-helper/resources/remote-context-helper.js"></script> +<script src="/speculation-rules/prerender/resources/utils.js"></script> +<script src="/speculation-rules/resources/utils.js"></script> +<script src="/speculation-rules/prefetch/resources/utils.sub.js"></script> + +<script> +"use strict"; + +setup(() => assertSpeculationRulesIsSupported()); + +promise_test(async t => { + const agent = await spawnWindow(t); + + const finalUrl = agent.getExecutorURL({ hostname: PREFETCH_PROXY_BYPASS_HOST, page: 2 }); + const nextUrl = new URL("/common/redirect.py?location=" + encodeURIComponent(finalUrl), document.baseURI); + await agent.forceSpeculationRules({ + tag: 'tag1', + prefetch: [{source: "list", urls: [nextUrl]}] + }); + await agent.navigate(nextUrl, {expectedDestinationUrl: finalUrl}); + + const headers = await agent.getRequestHeaders(); + assert_prefetched(headers, "must be prefetched"); + assert_equals(headers["sec_speculation_tags"], '__no_tags__'); +}, "same-site to cross-site redirection prefetch should not have Sec-Speculation-Tags be sent"); + +</script> diff --git a/tests/wpt/tests/storage-access-api/requestStorageAccess-cross-origin-fetch.sub.https.tentative.window.js b/tests/wpt/tests/storage-access-api/requestStorageAccess-cross-origin-fetch.sub.https.window.js index 21592a9225f..21592a9225f 100644 --- a/tests/wpt/tests/storage-access-api/requestStorageAccess-cross-origin-fetch.sub.https.tentative.window.js +++ b/tests/wpt/tests/storage-access-api/requestStorageAccess-cross-origin-fetch.sub.https.window.js diff --git a/tests/wpt/tests/storage-access-api/resources/blob-url-creation.html b/tests/wpt/tests/storage-access-api/resources/blob-url-creation.html new file mode 100644 index 00000000000..fe3e169b5c4 --- /dev/null +++ b/tests/wpt/tests/storage-access-api/resources/blob-url-creation.html @@ -0,0 +1,14 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<body> + <script> + 'use strict'; + + // Create a blob and get its URL. + const blob = new Blob(["TEST"], { type: "text/plain" }); + const blob_url = URL.createObjectURL(blob); + + // Send the blob URL back to the opener. + window.parent.postMessage({ type: "blobURL", message: blob_url }, "*"); + </script> +</body> diff --git a/tests/wpt/tests/storage-access-api/resources/iframe-creation.sub.html b/tests/wpt/tests/storage-access-api/resources/iframe-creation.sub.html new file mode 100644 index 00000000000..2927866bdf1 --- /dev/null +++ b/tests/wpt/tests/storage-access-api/resources/iframe-creation.sub.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<body> + <script> + 'use strict'; + + const iframe = document.createElement("iframe"); + iframe.src = "https://{{hosts[][]}}:{{ports[https][0]}}/storage-access-api/resources/blob-url-creation.html"; + document.body.appendChild(iframe); + + // Send the blob URL back to the opener. + window.addEventListener("message", async e => { + if (e.data.type !== "blobURL") { + return; + } + const blob_url = e.data.message; + window.opener.postMessage({ type: "blobURL", message: blob_url }, "*"); + }); + </script> +</body> diff --git a/tests/wpt/tests/storage-access-api/resources/storage-access-beyond-cookies-iframe-iframe.html b/tests/wpt/tests/storage-access-api/resources/storage-access-beyond-cookies-iframe-iframe.html index 9c0bd0194ac..8b3720a6354 100644 --- a/tests/wpt/tests/storage-access-api/resources/storage-access-beyond-cookies-iframe-iframe.html +++ b/tests/wpt/tests/storage-access-api/resources/storage-access-beyond-cookies-iframe-iframe.html @@ -372,6 +372,19 @@ } break; } + case "ThirdPartyBlobURL": { + await MaybeSetStorageAccess("*", "*", "allowed"); + const handle = await test_driver.bless("fake user interaction", () => document.requestStorageAccess({all: true})); + try { + const blob = await fetch(atob(id)).then(response => response.blob()); + await blob.text(); + } catch (e) { + message = "Third Party Blob URL tests completed successfully."; + break; + } + message = "Cross-partition third-party blob URL was accessible after granting storage access"; + break; + } case "unpartitioned": { await MaybeSetStorageAccess("*", "*", "allowed"); await test_driver.set_permission({ name: 'storage-access' }, 'denied'); diff --git a/tests/wpt/tests/storage-access-api/resources/storage-access-beyond-cookies-iframe.sub.html b/tests/wpt/tests/storage-access-api/resources/storage-access-beyond-cookies-iframe.sub.html index 45fd60b834a..6c60c962b1b 100644 --- a/tests/wpt/tests/storage-access-api/resources/storage-access-beyond-cookies-iframe.sub.html +++ b/tests/wpt/tests/storage-access-api/resources/storage-access-beyond-cookies-iframe.sub.html @@ -136,6 +136,9 @@ window.addEventListener("message", async (e) => { case "BlobURLDedicatedWorker": { break; } + case "ThirdPartyBlobURL": { + break; + } case "unpartitioned": { const channel = handle.BroadcastChannel(id); channel.postMessage("Cross-origin handle access"); diff --git a/tests/wpt/tests/storage-access-api/storage-access-beyond-cookies.thirdPartyBlobStorage.sub.https.window.js b/tests/wpt/tests/storage-access-api/storage-access-beyond-cookies.thirdPartyBlobStorage.sub.https.window.js new file mode 100644 index 00000000000..5dc67f0c7f1 --- /dev/null +++ b/tests/wpt/tests/storage-access-api/storage-access-beyond-cookies.thirdPartyBlobStorage.sub.https.window.js @@ -0,0 +1,33 @@ +// META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js + +'use strict'; + +async_test(t => { + window.addEventListener("message", t.step_func(async e => { + if (e.data.type !== "blobURL") { + return; + } + const blob_url = e.data.message; + + // Create an iframe and pass the blob URL to it. + const id = btoa(blob_url); + const iframe = document.createElement("iframe"); + iframe.src = "https://{{hosts[alt][]}}:{{ports[https][0]}}/storage-access-api/resources/storage-access-beyond-cookies-iframe.sub.html?type=ThirdPartyBlobURL&id=" + id; + document.body.appendChild(iframe); + + // Set up a second message listener to receive the result from the iframe. + window.addEventListener("message", t.step_func(e => { + if (e.data.type !== "result") { + return; + } + assert_equals(e.data.message, "Third Party Blob URL tests completed successfully."); + popup.close(); + t.done(); + })); + })); + + // Open a popup to create the blob URL. + const popup = window.open("https://{{hosts[alt][]}}:{{ports[https][0]}}/storage-access-api/resources/iframe-creation.sub.html"); + +}, "Verify StorageAccessAPIBeyondCookies for third-party context accessing first-party Blob URLs"); diff --git a/tests/wpt/tests/svg/coordinate-systems/viewBox-synthesized-in-img-001-ref.html b/tests/wpt/tests/svg/coordinate-systems/viewBox-synthesized-in-img-001-ref.html new file mode 100644 index 00000000000..dc27ce9a4e8 --- /dev/null +++ b/tests/wpt/tests/svg/coordinate-systems/viewBox-synthesized-in-img-001-ref.html @@ -0,0 +1,97 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Reference Case</title> +<link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> +<style> + embed { + border: 1px solid black; + margin: 2px; + vertical-align: top; + } +</style> +<body> +<script> + // Note: in this reference case, we take an explicit 'viewBox' param + // which is expected to match the viewBox that the testcase will + // be implicitly synthesizing as part of rendering SVG-as-an-image. + // (For parts of the testcase where no viewBox should be synthesized, + // this param should be left as the empty string.) + function makeDataURI(width, height, viewBox) { + let uri = "data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' "; + uri += `width='${width}' height='${height}' viewBox='${viewBox}' preserveAspectRatio='none'>`; + uri += "<rect fill='blue' x='2' y='2' height='6' width='6'/></svg>"; + return uri; + } + + const SVG_SIZE_VALS_TO_TEST = [ "", "0", "0", "0", "0", "10" ]; + const IMG_SIZE_VALS_TO_TEST = [ "20", "30" ]; + + // Returns the size in one axis (height or width) that we expect the browser + // to use, in the viewBox that it synthesizes for a particular piece of the + // corresponding testcase. The params are the specified size (height or + // width) of the <svg> element and host <img> element (in the corresponding + // piece of the testcase). + // + // This function returns null if no viewBox should be synthesized at all. + function synthesizeViewBoxComponent(svgSizeVal, embedSizeVal) { + if (svgSizeVal == "") { + // The <svg> element has no specified size in this axis, so the browser + // should render the testcase with a synthesized viewBox that's exactly + // as large as the testcase's <img> element in this axis. + return embedSizeVal; + } + + if (svgSizeVal == "0" || svgSizeVal == "0%") { + // The <svg> element has a specified size of 0 in this axis, so the + // browser should decline to synthesize a viewBox at all when rendering + // this part of the testcase, since a zero-sized viewBox would result in + // nothing being painted. + return null; + } + + // Otherwise the browser should just use the given specified size of the + // <svg> element to construct the synthetic viewBox. + return svgSizeVal; + } + + function go() { + // We group our elements into rows with a particular number of items, + // to make sure things fit nicely/predictably into the WPT viewport: + const NUM_ELEMS_PER_ROW = 12; + let elemIdx = 0; + let container; + + for (iw of IMG_SIZE_VALS_TO_TEST) { + for (ih of IMG_SIZE_VALS_TO_TEST) { + for (sw of SVG_SIZE_VALS_TO_TEST) { + for (sh of SVG_SIZE_VALS_TO_TEST) { + // Generate a new container element at the start and every N elems: + if (elemIdx % NUM_ELEMS_PER_ROW == 0) { + container = document.createElement("div"); + document.body.appendChild(container); + } + elemIdx++; + + const embed = document.createElement("embed"); + embed.setAttribute("width", iw); + embed.setAttribute("height", ih); + + // vbw/vbh here are the width/height we'll use in our viewBox. + let vbw = synthesizeViewBoxComponent(sw, iw); + let vbh = synthesizeViewBoxComponent(sh, ih); + let viewBox = ""; + if (vbw != null && vbh != null) { + viewBox = `0 0 ${vbw} ${vbh}`; + } + const dataURI = makeDataURI(sw, sh, viewBox); + embed.setAttribute("src", dataURI); + + container.appendChild(embed); + } + } + } + } + } + go(); +</script> +</body> diff --git a/tests/wpt/tests/svg/coordinate-systems/viewBox-synthesized-in-img-001.tentative.html b/tests/wpt/tests/svg/coordinate-systems/viewBox-synthesized-in-img-001.tentative.html new file mode 100644 index 00000000000..85b555da050 --- /dev/null +++ b/tests/wpt/tests/svg/coordinate-systems/viewBox-synthesized-in-img-001.tentative.html @@ -0,0 +1,61 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Testcase for SVG viewBox synthesis when SVG is used as an image</title> +<link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> +<link rel="help" href="https://www.w3.org/TR/SVG/coords.html#ViewBoxAttribute"> +<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1916030"> +<link rel="match" href="viewBox-synthesized-in-img-001-ref.html"> +<style> + img { + border: 1px solid black; + margin: 2px; + vertical-align: top; + } +</style> +<body> +<script> + function makeDataURI(width, height) { + let uri = "data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' "; + uri += `width='${width}' height='${height}'>`; + uri += "<rect fill='blue' x='2' y='2' height='6' width='6'/></svg>"; + return uri; + } + + // Note: negative numbers here are equivalent to 0, for the purposes of + // what we're testing here. We test both for robustness. + const SVG_SIZE_VALS_TO_TEST = [ "", "0", "0%", "-5", "-5%", "10" ]; + const IMG_SIZE_VALS_TO_TEST = [ "20", "30" ]; + function go() { + // We group our elements into rows with a particular number of items, + // to make sure things fit nicely/predictably into the WPT viewport: + const NUM_ELEMS_PER_ROW = 12; + let elemIdx = 0; + let container; + + for (iw of IMG_SIZE_VALS_TO_TEST) { + for (ih of IMG_SIZE_VALS_TO_TEST) { + for (sw of SVG_SIZE_VALS_TO_TEST) { + for (sh of SVG_SIZE_VALS_TO_TEST) { + // Generate a new container element at the start and every N elems: + if (elemIdx % NUM_ELEMS_PER_ROW == 0) { + container = document.createElement("div"); + document.body.appendChild(container); + } + elemIdx++; + + const img = document.createElement("img"); + img.setAttribute("width", iw); + img.setAttribute("height", ih); + + const dataURI = makeDataURI(sw, sh); + img.setAttribute("src", dataURI); + + container.appendChild(img); + } + } + } + } + } + go(); +</script> +</body> diff --git a/tests/wpt/tests/svg/import/interact-dom-01-b-manual.svg b/tests/wpt/tests/svg/import/interact-dom-01-b-manual.svg index 32cf2f546c7..a16c2545033 100644 --- a/tests/wpt/tests/svg/import/interact-dom-01-b-manual.svg +++ b/tests/wpt/tests/svg/import/interact-dom-01-b-manual.svg @@ -24,7 +24,7 @@ </p> <p> At the end of the test, the start test button is changed to green, - and the click event listener is removed from the the start button. + and the click event listener is removed from the start button. </p> <p> Subsequent clicks on the start button should cause no effect if diff --git a/tests/wpt/tests/svg/struct/reftests/inner-svg-css-transform.svg b/tests/wpt/tests/svg/struct/reftests/inner-svg-css-transform.svg new file mode 100644 index 00000000000..9187b0098fa --- /dev/null +++ b/tests/wpt/tests/svg/struct/reftests/inner-svg-css-transform.svg @@ -0,0 +1,8 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:html="http://www.w3.org/1999/xhtml"> + <html:link rel="help" href="https://www.w3.org/TR/SVG2/struct.html#SVGElement"/> + <html:link rel="match" href="reference/inner-svg-transform-ref.svg"/> + <title>Test that transforms the inner svg element using css</title> + <svg width="50" height="50" style="transform: translate(100px, 50px) scale(2);"> + <rect width="50" height="50" fill="green"/> + </svg> +</svg> diff --git a/tests/wpt/tests/svg/struct/reftests/inner-svg-rotate-transform.svg b/tests/wpt/tests/svg/struct/reftests/inner-svg-rotate-transform.svg new file mode 100644 index 00000000000..c8a7c2c612e --- /dev/null +++ b/tests/wpt/tests/svg/struct/reftests/inner-svg-rotate-transform.svg @@ -0,0 +1,9 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:html="http://www.w3.org/1999/xhtml"> + <html:link rel="help" href="https://www.w3.org/TR/SVG2/struct.html#SVGElement"/> + <html:link rel="help" href="https://www.w3.org/TR/SVG2/coords.html#TransformProperty"/> + <html:link rel="match" href="reference/inner-svg-rotate-transform-ref.svg"/> + <title>Test that rotates the inner svg element</title> + <svg width="50" height="50" transform="rotate(45)"> + <rect width="50" height="50" fill="green"/> + </svg> +</svg> diff --git a/tests/wpt/tests/svg/struct/reftests/inner-svg-transform-and-viewbox.svg b/tests/wpt/tests/svg/struct/reftests/inner-svg-transform-and-viewbox.svg new file mode 100644 index 00000000000..3b96cef3d93 --- /dev/null +++ b/tests/wpt/tests/svg/struct/reftests/inner-svg-transform-and-viewbox.svg @@ -0,0 +1,11 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:html="http://www.w3.org/1999/xhtml"> + <html:link rel="help" href="https://www.w3.org/TR/SVG2/struct.html#SVGElement"/> + <html:link rel="help" href="https://www.w3.org/TR/SVG2/coords.html#TransformProperty"/> + <html:link rel="help" href="https://www.w3.org/TR/SVG2/coords.html#ViewBoxAttribute"/> + <html:link rel="match" href="reference/inner-svg-transform-and-viewbox-ref.svg"/> + <title>Test that transforms the inner svg element with viewBox specified</title> + <svg width="50" height="50" transform="translate(100,50)" viewBox="0 0 40 40"> + <rect width="50" height="50" fill="green"/> + <circle cx="25" cy="25" r="6"/> + </svg> +</svg> diff --git a/tests/wpt/tests/svg/struct/reftests/inner-svg-transform.svg b/tests/wpt/tests/svg/struct/reftests/inner-svg-transform.svg new file mode 100644 index 00000000000..31b2c613c6a --- /dev/null +++ b/tests/wpt/tests/svg/struct/reftests/inner-svg-transform.svg @@ -0,0 +1,9 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:html="http://www.w3.org/1999/xhtml"> + <html:link rel="help" href="https://www.w3.org/TR/SVG2/struct.html#SVGElement"/> + <html:link rel="help" href="https://www.w3.org/TR/SVG2/coords.html#TransformProperty"/> + <html:link rel="match" href="reference/inner-svg-transform-ref.svg"/> + <title>Test that transforms the inner svg element</title> + <svg width="50" height="50" transform="translate(100,50) scale(2)"> + <rect width="50" height="50" fill="green"/> + </svg> +</svg> diff --git a/tests/wpt/tests/svg/struct/reftests/outer-svg-transform.svg b/tests/wpt/tests/svg/struct/reftests/outer-svg-transform.svg new file mode 100644 index 00000000000..743ced136fa --- /dev/null +++ b/tests/wpt/tests/svg/struct/reftests/outer-svg-transform.svg @@ -0,0 +1,9 @@ +<svg width="400" height="400" transform="translate(100,0)" xmlns="http://www.w3.org/2000/svg" xmlns:html="http://www.w3.org/1999/xhtml"> + <html:link rel="help" href="https://www.w3.org/TR/SVG2/struct.html#SVGElement"/> + <html:link rel="help" href="https://www.w3.org/TR/SVG2/coords.html#TransformProperty"/> + <html:link rel="match" href="reference/outer-svg-transform-ref.svg"/> + <title>Test that transforms the outer svg element"</title> + <svg width="50" height="50"> + <rect width="50" height="50" fill="green"/> + </svg> +</svg> diff --git a/tests/wpt/tests/svg/struct/reftests/reference/inner-svg-rotate-transform-ref.svg b/tests/wpt/tests/svg/struct/reftests/reference/inner-svg-rotate-transform-ref.svg new file mode 100644 index 00000000000..6c09ab219c6 --- /dev/null +++ b/tests/wpt/tests/svg/struct/reftests/reference/inner-svg-rotate-transform-ref.svg @@ -0,0 +1,7 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <g transform="rotate(45)"> + <svg width="50" height="50"> + <rect width="50" height="50" fill="green"/> + </svg> + </g> +</svg> diff --git a/tests/wpt/tests/svg/struct/reftests/reference/inner-svg-transform-and-viewbox-ref.svg b/tests/wpt/tests/svg/struct/reftests/reference/inner-svg-transform-and-viewbox-ref.svg new file mode 100644 index 00000000000..b6d245fd4da --- /dev/null +++ b/tests/wpt/tests/svg/struct/reftests/reference/inner-svg-transform-and-viewbox-ref.svg @@ -0,0 +1,8 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <g transform="translate(100,50)"> + <svg width="50" height="50" viewBox="0 0 40 40"> + <rect width="50" height="50" fill="green"/> + <circle cx="25" cy="25" r="6"/> + </svg> + </g> +</svg> diff --git a/tests/wpt/tests/svg/struct/reftests/reference/inner-svg-transform-ref.svg b/tests/wpt/tests/svg/struct/reftests/reference/inner-svg-transform-ref.svg new file mode 100644 index 00000000000..c717788d91a --- /dev/null +++ b/tests/wpt/tests/svg/struct/reftests/reference/inner-svg-transform-ref.svg @@ -0,0 +1,7 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <g transform="translate(100,50) scale(2)"> + <svg width="50" height="50"> + <rect width="50" height="50" fill="green"/> + </svg> + </g> +</svg> diff --git a/tests/wpt/tests/svg/struct/reftests/reference/outer-svg-transform-ref.svg b/tests/wpt/tests/svg/struct/reftests/reference/outer-svg-transform-ref.svg new file mode 100644 index 00000000000..55a74fe29d2 --- /dev/null +++ b/tests/wpt/tests/svg/struct/reftests/reference/outer-svg-transform-ref.svg @@ -0,0 +1,5 @@ +<svg width="400" height="400" xmlns="http://www.w3.org/2000/svg"> + <svg x="100" y="0" width="50" height="50"> + <rect width="50" height="50" fill="green"/> + </svg> +</svg> diff --git a/tests/wpt/tests/svg/struct/reftests/support/sprites-without-id.svg b/tests/wpt/tests/svg/struct/reftests/support/sprites-without-id.svg new file mode 100644 index 00000000000..120941444a4 --- /dev/null +++ b/tests/wpt/tests/svg/struct/reftests/support/sprites-without-id.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect width="100" height="100" fill="green"/> +</svg> diff --git a/tests/wpt/tests/svg/struct/reftests/use-external-svg-resource-no-fragment-id.html b/tests/wpt/tests/svg/struct/reftests/use-external-svg-resource-no-fragment-id.html new file mode 100644 index 00000000000..37bcd3f370a --- /dev/null +++ b/tests/wpt/tests/svg/struct/reftests/use-external-svg-resource-no-fragment-id.html @@ -0,0 +1,7 @@ +<!DOCTYPE html> +<title>Allow use to reference an external document's root element by omitting the fragment.</title> +<link rel="help" href="https://svgwg.org/svg2-draft/struct.html#UseElement"> +<link rel="match" href="reference/green-100x100.html"> +<svg> + <use href="support/sprites-without-id.svg"/> +</svg> diff --git a/tests/wpt/tests/tools/certs/cacert.key b/tests/wpt/tests/tools/certs/cacert.key index dd47af3f939..26e5b3577da 100644 --- a/tests/wpt/tests/tools/certs/cacert.key +++ b/tests/wpt/tests/tools/certs/cacert.key @@ -1,30 +1,30 @@ -----BEGIN ENCRYPTED PRIVATE KEY----- -MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIQ5KidoYVfxkCAggA -MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECMn0jRuVwL1yBIIEyP+RfjlPlBdC -KpYXU3bQMGIXnYeQLoaaGjVGtsOsTs5qtvFVMkU2dbSmJHS81n4s8F2fDO0R8QiR -EICZJsD8/A16teQrxBy29ZSlpKNZQyGJkaJSoyPgLHBTMWJDvYKlu407xzoxXnx6 -FDVdTrVNmza0tdG2MN9r/hAuZoobWYyjJrazELB5yTTm2ZFNT7H9gF+K2eTDa/g5 -1cTeUBDNoC7ejtILyJALBNcN6eGnXZeeQLg1Dx93aUObSUpiYrqn9Q4zhzOUkaYw -jvErFMQvU9YW0HFN/J2YVbvlC/jsk6l3rFFObiWHkwhKJc2+pXu9z6Hhv/o1i7uu -XlXcNPD+poqsmrhOvEjmTK4Og8QvEcoR/lOUWBBhgLqtkD88SHJrqBb5JStaAStH -c/Q+oYnox3VAhMU0sB8thg2KQ+piTGLQP/2aD1NJvNul2JEB9zAcVAoCSCz1mc8P -yGyvoZKGBmvqEskX0JMCnx6sLKOlKtqFF2/9Uair/6vrQND8MLU/ksjzzUncb24n -jokua7HbmrBw7GKQH+75/0nJWOMusTZtrwxCVKWJL3M6LQ9N4NaP0nbvfj54lyVy -lGBD6W9fXB3/4FjmIFEqd9T+ltgmJlHSUUox3avXS3PAuGfaIFYZ4Tjoik1uYIt4 -S3NMwH6ysI+4UrU1D/1UJl+7/KSLo/k+hq0hH/0D0XEva8FDq4/4HrX843awR0Em -BUVE7MVIF0hHpbpZ/znV5LFY4czXlgpp3B32ac07i4iJCDk8KCclyCjyMWEFQ87O -zIMk8h/BjiP1Uzyr0wGFjyYP2gu7nmuzjrBAkIlWQ9xU9aiTfwQkEkMo7RJA4M1b -DC9Vdt4Mfzv603UdwAF8BVozgWxONV37VLbAu4r0ENw0C2rf9ZGxO1D9KITjVVF8 -xcSWsm7n0VATqd5MB6sUyzc7AuyQbewQ1AMsTNv5baxLooka/NZTcfqXQmD08C7O -pXJP3kUJweNXw6lUsjtR0VYe0MJOeo2oe/CLoDv+xej4Ez5xTPDAdzIJEk6K8Y7C -jCcIhTz2WOiTA2MDE1UmY8lZJzaWNjNfetGcfIBh00YYcsmSVByr/YbKgh7KN1Rb -Qek2k0l390jLOG64t1MM6QaNCDX11bq+pS2hSVyivfE7olrrWjxdjHFOlFqcHRVE -8+lMewf6RfO8iYZtHNgcVFYZcTyo/wbf9fEN5YAuoG++3U6vTITtWhXp9GoRGZ/i -EBfJzvuFt2FU5GbBub9n3fC/d+iOUeVl8jtZ3+xK5MAHdbTs1E4+AW9goU8pSXcF -JEJcF4AAj76XbKH0U+jC2umrkFOlVXP/hnuPxZcKDhaHVBB0Z8xSHo6RClUc/+rP -pgfeMvFf4tnEdGPdj2ZUc808nilzJ63jB+cVuZJB7lnGQCPMH8k+pnBSFkJmk+To -vk2HckfrW1d3rZ59jHBPySEbv8a7wLm+adSJGtG1CK8wHKhhGyXbgpE1OTtLWUec -n//yDEvVhs/p8HDmRvARBdc93CLWhM/YhPLzSrItCFuPWOMuOTXINZGb4KqQixcN -yb6GjBGNwNnXjDlpj23vlxUBYS3iRnOit84aPH1JdAxElTc8oI63siwjc5LoUhQZ -cY5MQqTzu2MhIeEwgqlXmQ== +MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIpUw2O6vqIOICAggA +MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECC/kCOUsjFG4BIIEyNaOHDPpzWlg +eUKbue3TpEf8QbSVYwfviTNTCV+cOPzoY3FndudWC4TNyJDZkzj4x1CAWhk6tsE2 +hrP2XqDsdzeVgHpP8x3728N0PWZWvh8dSZ9cnTnQ235J89ji85yGgXzMcFULi70z +DsusD5MZcV8l58zQCoREOeQMiyLX8qN+QvYjgtGkuSAtcFnOrlMMnW+TI0UTYXnQ +ifN2KoyQ9HX2S4P/vV1x0SAtwYoS1+T8l0PElrjAYGKyKWS/O0dgEx82vuX9Xfbg +kHELMtEWl6bplfKfXoKDNg5wSc46giKa5VsyZ+qTRHoeUiTsX6YQtRMB7iaHyQlt +lja0FAm2QQqC9oXfW+a+vGD4O/RvBkfuHyRbXfjdcwlKT9FgczEY8iDTCNXeYTwM +pBosgMvKAuIDvplQlyrmbRpCFdIqg6LvWW2IJ7a42DtvbKGeV/iyvMbj4XLFyKov +2RG51rFBXXejFRspn+10YuV9X9Q3YeJwB9riLAF3oy/rYeFCVwM8k3fjWRgop2/W +XzD1Us0/GuDr7Fe1mABWgawCc/a6Hp5tmLG60ly08lw3A9DGuqIHXxexyD749xMa +baT99DlCjmRsr3i8XVBCvblj03rXIdLwVzqWM2+a6Rkp3DDqrY2Vk8Q4zIryRo3w +5U+u7pqiyTEzy+SFRCuEIUncg+HeOsnvYIUGo4FAY7tmzTh2s1GBUK/+pSI5tJUa +57/trW6nazO2ry0e1V54RKn2OZQau8RYlFQMDuMdpSwEa/jp7Xh9XQS2vstf8Ed5 +J8YFJIsrkE17xX+tiIUis3ZIO4SGZNH8w+Mdt693c2mnbaVeqKxjoV7i0YhDbXz8 +NdYGLrmRaMqB8r6BzsMJn8/D2fuVbuOFQn+gg8iRYyVmqsbih4IpD1GO/bQr9H8A +re2MR7Mohh4KJKfsykvtWs7wxdd0vWkNqXo6QdNrayy9H1qlpC7NxUYH7DvjZCgh +k7XPaZnfmCcOmGJ/hnUHUZynzKlZbz5lvVKuAUJ5bLvQyfpgdJYOm3tXp4bwpM2I +AhLqUISPQwpdpi9EFQrbyRCAPrYDcdWSGiEwAMKt5cILwW2gsqhnc6MQn0EQA/uT +NZwSD/Q3q4lqWOqWiezQ0zupt4eq7aOgYtvO4qfscTDSSUiO/LRvZ0vaqmjPE1Ix +5fJ1zY2DVp/NFRTRgjzjPyZXjVI1xIx9NgBRlzBMXVrbcMN4kgLoRwt7DSrH1UjU +rwKuFHbQj75lG/EQ2L4mEqPCQywkIoZYzGGsQ5TqFH9KZyOkUUEbfQXs9hvw2+E5 +qC+2zxF9yp7Fj0+lhlE6P/zHcx5TNfmPL/lXr36jsqlOHl5YAGPvJiR19MqH893o +p1J0wRIRGgPPe9zKGkyyH3KrathyvpbtxRHxzZnWnk0FE+rWp67YG2pg0vrRItY6 +jy9KW+U+0bBZWkxVJ9c26LYFb+g5jkvMHiJTFIluXIcjU0Eysvh8iOMwuUVLIEQ5 +8CgOwhHv9+Ct7nGC0tOOP5oZMvnKfbuuLpDU22zbksVcEBWoHDOTlDObnveQR0Lg +trcoyMDQyJnlufs1I67cIcEMBzx8j3wxsvVf7whWm9mGpdE6DHdnLOKOdvF+A45N +eofAWq/S0TFkNBX7I6FZUw== -----END ENCRYPTED PRIVATE KEY----- diff --git a/tests/wpt/tests/tools/certs/cacert.pem b/tests/wpt/tests/tools/certs/cacert.pem index 7b3fb3da14d..18255d04961 100644 --- a/tests/wpt/tests/tools/certs/cacert.pem +++ b/tests/wpt/tests/tools/certs/cacert.pem @@ -1,125 +1,125 @@ -----BEGIN CERTIFICATE----- -MIIW5TCCFc2gAwIBAgICBIIwDQYJKoZIhvcNAQELBQAwHTEbMBkGA1UEAwwSd2Vi -LXBsYXRmb3JtLXRlc3RzMB4XDTI0MTAxMjAxMDQ0NloXDTI1MTAxMjAxMDQ0Nlow -HTEbMBkGA1UEAwwSd2ViLXBsYXRmb3JtLXRlc3RzMIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEA03kHWKuFeT1xtYw3M/hYmoGe9ZM26J2WIPIVD0SOU86w -g+2L5JwllOH5L4i6vSz4qV2NAYnpSCUNNIGk7F8YLWFXP8O8GDMgjg1V/JDYCPj5 -KFa6bAjLhHD9tLKVcRn7h6L7Y7FYWkYm6LWNOctg5UTbZVUEcCq0xeZKJXGJFguV -RK9CTz5wWUxYN3LvdAnW2XyryPqyUZSHcF55zYJBLDNUxkdPjI7nLS/y+WryIK89 -47RhiwbI9yI26Ir3IcFy2xLjs5+qo1DJcfCVC/m/8+86tgiSqmJwTJUW/cAVSd51 -F5X0P2SSP2YZctEXSInSUDMFmdQMecpxQBZV2pWNjQIDAQABo4IULTCCFCkwDAYD -VR0TBAUwAwEB/zAdBgNVHQ4EFgQUyWVn3/hgxfvg9xXR7Vttc+Jz1OcwRgYDVR0j -BD8wPYAUyWVn3/hgxfvg9xXR7Vttc+Jz1OehIaQfMB0xGzAZBgNVBAMMEndlYi1w -bGF0Zm9ybS10ZXN0c4ICBIIwCwYDVR0PBAQDAgIEMIIKBQYDVR0eBIIJ/DCCCfig -ggn0MBOCEXdlYi1wbGF0Zm9ybS50ZXN0MBeCFXd3dy53ZWItcGxhdGZvcm0udGVz -dDAXghVub3Qtd2ViLXBsYXRmb3JtLnRlc3QwGIIWd3d3MS53ZWItcGxhdGZvcm0u -dGVzdDAYghZ3d3cyLndlYi1wbGF0Zm9ybS50ZXN0MBuCGXd3dy53d3cud2ViLXBs -YXRmb3JtLnRlc3QwG4IZd3d3Lm5vdC13ZWItcGxhdGZvcm0udGVzdDAcghp3d3cy -Lnd3dy53ZWItcGxhdGZvcm0udGVzdDAcghp3d3cxLm5vdC13ZWItcGxhdGZvcm0u -dGVzdDAcghp3d3cyLm5vdC13ZWItcGxhdGZvcm0udGVzdDAcghp3d3cud3d3MS53 -ZWItcGxhdGZvcm0udGVzdDAcghp3d3cud3d3Mi53ZWItcGxhdGZvcm0udGVzdDAc -ghp3d3cxLnd3dy53ZWItcGxhdGZvcm0udGVzdDAdght3d3cyLnd3dzIud2ViLXBs -YXRmb3JtLnRlc3QwHYIbd3d3MS53d3cxLndlYi1wbGF0Zm9ybS50ZXN0MB2CG3d3 -dzIud3d3MS53ZWItcGxhdGZvcm0udGVzdDAdght3d3cxLnd3dzIud2ViLXBsYXRm -b3JtLnRlc3QwH4Idd3d3Lnd3dy5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwIIIed3d3 -Lnd3dzIubm90LXdlYi1wbGF0Zm9ybS50ZXN0MCCCHnd3dzIud3d3Lm5vdC13ZWIt -cGxhdGZvcm0udGVzdDAggh53d3cud3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3Qw -IIIeeG4tLWx2ZS02bGFkLndlYi1wbGF0Zm9ybS50ZXN0MCCCHnd3dzEud3d3Lm5v -dC13ZWItcGxhdGZvcm0udGVzdDAhgh93d3cxLnd3dzIubm90LXdlYi1wbGF0Zm9y -bS50ZXN0MCGCH3d3dzIud3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwIYIfd3d3 -Mi53d3cyLm5vdC13ZWItcGxhdGZvcm0udGVzdDAhgh93d3cxLnd3dzEubm90LXdl -Yi1wbGF0Zm9ybS50ZXN0MCSCInhuLS1sdmUtNmxhZC53d3cud2ViLXBsYXRmb3Jt -LnRlc3QwJIIid3d3LnhuLS1sdmUtNmxhZC53ZWItcGxhdGZvcm0udGVzdDAkgiJ4 -bi0tbHZlLTZsYWQubm90LXdlYi1wbGF0Zm9ybS50ZXN0MCWCI3d3dzEueG4tLWx2 -ZS02bGFkLndlYi1wbGF0Zm9ybS50ZXN0MCWCI3huLS1sdmUtNmxhZC53d3cxLndl -Yi1wbGF0Zm9ybS50ZXN0MCWCI3d3dzIueG4tLWx2ZS02bGFkLndlYi1wbGF0Zm9y -bS50ZXN0MCWCI3huLS1sdmUtNmxhZC53d3cyLndlYi1wbGF0Zm9ybS50ZXN0MCiC -Jnd3dy54bi0tbHZlLTZsYWQubm90LXdlYi1wbGF0Zm9ybS50ZXN0MCiCJnhuLS1s -dmUtNmxhZC53d3cubm90LXdlYi1wbGF0Zm9ybS50ZXN0MCmCJ3d3dzIueG4tLWx2 -ZS02bGFkLm5vdC13ZWItcGxhdGZvcm0udGVzdDApgid4bi0tbHZlLTZsYWQud3d3 -MS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwKYIneG4tLWx2ZS02bGFkLnd3dzIubm90 -LXdlYi1wbGF0Zm9ybS50ZXN0MCmCJ3d3dzEueG4tLWx2ZS02bGFkLm5vdC13ZWIt -cGxhdGZvcm0udGVzdDArgil4bi0tbjhqNmRzNTNsd3drcnFodjI4YS53ZWItcGxh -dGZvcm0udGVzdDAtgit4bi0tbHZlLTZsYWQueG4tLWx2ZS02bGFkLndlYi1wbGF0 -Zm9ybS50ZXN0MC+CLXd3dy54bi0tbjhqNmRzNTNsd3drcnFodjI4YS53ZWItcGxh -dGZvcm0udGVzdDAvgi14bi0tbjhqNmRzNTNsd3drcnFodjI4YS53d3cud2ViLXBs -YXRmb3JtLnRlc3QwL4IteG4tLW44ajZkczUzbHd3a3JxaHYyOGEubm90LXdlYi1w -bGF0Zm9ybS50ZXN0MDCCLnd3dzEueG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2Vi -LXBsYXRmb3JtLnRlc3QwMIIueG4tLW44ajZkczUzbHd3a3JxaHYyOGEud3d3MS53 -ZWItcGxhdGZvcm0udGVzdDAwgi54bi0tbjhqNmRzNTNsd3drcnFodjI4YS53d3cy -LndlYi1wbGF0Zm9ybS50ZXN0MDCCLnd3dzIueG4tLW44ajZkczUzbHd3a3JxaHYy -OGEud2ViLXBsYXRmb3JtLnRlc3QwMYIveG4tLWx2ZS02bGFkLnhuLS1sdmUtNmxh -ZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwM4Ixd3d3LnhuLS1uOGo2ZHM1M2x3d2ty -cWh2MjhhLm5vdC13ZWItcGxhdGZvcm0udGVzdDAzgjF4bi0tbjhqNmRzNTNsd3dr -cnFodjI4YS53d3cubm90LXdlYi1wbGF0Zm9ybS50ZXN0MDSCMnd3dzEueG4tLW44 -ajZkczUzbHd3a3JxaHYyOGEubm90LXdlYi1wbGF0Zm9ybS50ZXN0MDSCMnhuLS1u -OGo2ZHM1M2x3d2tycWh2MjhhLnd3dzEubm90LXdlYi1wbGF0Zm9ybS50ZXN0MDSC -Mnd3dzIueG4tLW44ajZkczUzbHd3a3JxaHYyOGEubm90LXdlYi1wbGF0Zm9ybS50 -ZXN0MDSCMnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnd3dzIubm90LXdlYi1wbGF0 -Zm9ybS50ZXN0MDiCNnhuLS1sdmUtNmxhZC54bi0tbjhqNmRzNTNsd3drcnFodjI4 -YS53ZWItcGxhdGZvcm0udGVzdDA4gjZ4bi0tbjhqNmRzNTNsd3drcnFodjI4YS54 -bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3QwPII6eG4tLWx2ZS02bGFkLnhu -LS1uOGo2ZHM1M2x3d2tycWh2MjhhLm5vdC13ZWItcGxhdGZvcm0udGVzdDA8gjp4 -bi0tbjhqNmRzNTNsd3drcnFodjI4YS54bi0tbHZlLTZsYWQubm90LXdlYi1wbGF0 -Zm9ybS50ZXN0MEOCQXhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnhuLS1uOGo2ZHM1 -M2x3d2tycWh2MjhhLndlYi1wbGF0Zm9ybS50ZXN0MEeCRXhuLS1uOGo2ZHM1M2x3 -d2tycWh2MjhhLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLm5vdC13ZWItcGxhdGZv -cm0udGVzdDATBgNVHSUEDDAKBggrBgEFBQcDATCCCYUGA1UdEQSCCXwwggl4ghF3 -ZWItcGxhdGZvcm0udGVzdIIVd3d3LndlYi1wbGF0Zm9ybS50ZXN0ghVub3Qtd2Vi -LXBsYXRmb3JtLnRlc3SCFnd3dzEud2ViLXBsYXRmb3JtLnRlc3SCFnd3dzIud2Vi -LXBsYXRmb3JtLnRlc3SCGXd3dy53d3cud2ViLXBsYXRmb3JtLnRlc3SCGXd3dy5u -b3Qtd2ViLXBsYXRmb3JtLnRlc3SCGnd3dzIud3d3LndlYi1wbGF0Zm9ybS50ZXN0 -ghp3d3cxLm5vdC13ZWItcGxhdGZvcm0udGVzdIIad3d3Mi5ub3Qtd2ViLXBsYXRm -b3JtLnRlc3SCGnd3dy53d3cxLndlYi1wbGF0Zm9ybS50ZXN0ghp3d3cud3d3Mi53 -ZWItcGxhdGZvcm0udGVzdIIad3d3MS53d3cud2ViLXBsYXRmb3JtLnRlc3SCG3d3 -dzIud3d3Mi53ZWItcGxhdGZvcm0udGVzdIIbd3d3MS53d3cxLndlYi1wbGF0Zm9y -bS50ZXN0ght3d3cyLnd3dzEud2ViLXBsYXRmb3JtLnRlc3SCG3d3dzEud3d3Mi53 -ZWItcGxhdGZvcm0udGVzdIIdd3d3Lnd3dy5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SC -Hnd3dy53d3cyLm5vdC13ZWItcGxhdGZvcm0udGVzdIIed3d3Mi53d3cubm90LXdl -Yi1wbGF0Zm9ybS50ZXN0gh53d3cud3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SC -HnhuLS1sdmUtNmxhZC53ZWItcGxhdGZvcm0udGVzdIIed3d3MS53d3cubm90LXdl -Yi1wbGF0Zm9ybS50ZXN0gh93d3cxLnd3dzIubm90LXdlYi1wbGF0Zm9ybS50ZXN0 -gh93d3cyLnd3dzEubm90LXdlYi1wbGF0Zm9ybS50ZXN0gh93d3cyLnd3dzIubm90 -LXdlYi1wbGF0Zm9ybS50ZXN0gh93d3cxLnd3dzEubm90LXdlYi1wbGF0Zm9ybS50 -ZXN0giJ4bi0tbHZlLTZsYWQud3d3LndlYi1wbGF0Zm9ybS50ZXN0giJ3d3cueG4t -LWx2ZS02bGFkLndlYi1wbGF0Zm9ybS50ZXN0giJ4bi0tbHZlLTZsYWQubm90LXdl -Yi1wbGF0Zm9ybS50ZXN0giN3d3cxLnhuLS1sdmUtNmxhZC53ZWItcGxhdGZvcm0u -dGVzdIIjeG4tLWx2ZS02bGFkLnd3dzEud2ViLXBsYXRmb3JtLnRlc3SCI3d3dzIu -eG4tLWx2ZS02bGFkLndlYi1wbGF0Zm9ybS50ZXN0giN4bi0tbHZlLTZsYWQud3d3 -Mi53ZWItcGxhdGZvcm0udGVzdIImd3d3LnhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBs -YXRmb3JtLnRlc3SCJnhuLS1sdmUtNmxhZC53d3cubm90LXdlYi1wbGF0Zm9ybS50 -ZXN0gid3d3cyLnhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCJ3hu -LS1sdmUtNmxhZC53d3cxLm5vdC13ZWItcGxhdGZvcm0udGVzdIIneG4tLWx2ZS02 -bGFkLnd3dzIubm90LXdlYi1wbGF0Zm9ybS50ZXN0gid3d3cxLnhuLS1sdmUtNmxh -ZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCKXhuLS1uOGo2ZHM1M2x3d2tycWh2Mjhh -LndlYi1wbGF0Zm9ybS50ZXN0git4bi0tbHZlLTZsYWQueG4tLWx2ZS02bGFkLndl -Yi1wbGF0Zm9ybS50ZXN0gi13d3cueG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2Vi -LXBsYXRmb3JtLnRlc3SCLXhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnd3dy53ZWIt -cGxhdGZvcm0udGVzdIIteG4tLW44ajZkczUzbHd3a3JxaHYyOGEubm90LXdlYi1w -bGF0Zm9ybS50ZXN0gi53d3cxLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLndlYi1w -bGF0Zm9ybS50ZXN0gi54bi0tbjhqNmRzNTNsd3drcnFodjI4YS53d3cxLndlYi1w -bGF0Zm9ybS50ZXN0gi54bi0tbjhqNmRzNTNsd3drcnFodjI4YS53d3cyLndlYi1w -bGF0Zm9ybS50ZXN0gi53d3cyLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLndlYi1w -bGF0Zm9ybS50ZXN0gi94bi0tbHZlLTZsYWQueG4tLWx2ZS02bGFkLm5vdC13ZWIt -cGxhdGZvcm0udGVzdIIxd3d3LnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLm5vdC13 -ZWItcGxhdGZvcm0udGVzdIIxeG4tLW44ajZkczUzbHd3a3JxaHYyOGEud3d3Lm5v -dC13ZWItcGxhdGZvcm0udGVzdIIyd3d3MS54bi0tbjhqNmRzNTNsd3drcnFodjI4 -YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCMnhuLS1uOGo2ZHM1M2x3d2tycWh2Mjhh -Lnd3dzEubm90LXdlYi1wbGF0Zm9ybS50ZXN0gjJ3d3cyLnhuLS1uOGo2ZHM1M2x3 -d2tycWh2MjhhLm5vdC13ZWItcGxhdGZvcm0udGVzdIIyeG4tLW44ajZkczUzbHd3 -a3JxaHYyOGEud3d3Mi5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCNnhuLS1sdmUtNmxh -ZC54bi0tbjhqNmRzNTNsd3drcnFodjI4YS53ZWItcGxhdGZvcm0udGVzdII2eG4t -LW44ajZkczUzbHd3a3JxaHYyOGEueG4tLWx2ZS02bGFkLndlYi1wbGF0Zm9ybS50 -ZXN0gjp4bi0tbHZlLTZsYWQueG4tLW44ajZkczUzbHd3a3JxaHYyOGEubm90LXdl -Yi1wbGF0Zm9ybS50ZXN0gjp4bi0tbjhqNmRzNTNsd3drcnFodjI4YS54bi0tbHZl -LTZsYWQubm90LXdlYi1wbGF0Zm9ybS50ZXN0gkF4bi0tbjhqNmRzNTNsd3drcnFo -djI4YS54bi0tbjhqNmRzNTNsd3drcnFodjI4YS53ZWItcGxhdGZvcm0udGVzdIJF -eG4tLW44ajZkczUzbHd3a3JxaHYyOGEueG4tLW44ajZkczUzbHd3a3JxaHYyOGEu -bm90LXdlYi1wbGF0Zm9ybS50ZXN0MA0GCSqGSIb3DQEBCwUAA4IBAQBifqUfZhtG -pcQJgQ86u/1+uO39IfQ7gpLcBVc6YBmZ9NBBkk7Du8+JJ1eDBw+U47usXPkc1oqu -Nv7k9Gg2Ln0I5mVVVcBUP84z0pxKCc6KKhJXcjSu9dMFBxT/pjDpPQ1WVzPJVmNw -ywuRlVHQxk5Pc3dXKUAZoti7GoX1yd1xMH8Rz2vL9f7QLW+uVvRbhSp6DcTq8BPJ -RLni1DQ9J02nHhD/JULUoxp/2HLDdPt/++145Eoy5GlycNcqw7VVraongsVAuG6h -7zZYthFwc6+81dxaGmsgOG7baljBN4k4Jdjkt6P+0QVodn/+5Sto+Gb1TzoYjYpY -J9G36zcLRJyc +MIIW5zCCFc+gAwIBAgIDASwmMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEndl +Yi1wbGF0Zm9ybS10ZXN0czAeFw0yNTA0MTIwMTExNTlaFw0yNjA0MTIwMTExNTla +MB0xGzAZBgNVBAMMEndlYi1wbGF0Zm9ybS10ZXN0czCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBAJvUl2G2W4ugGe6jB1pcU00qxeDvhVEbty5zTYUsl/ME +9hgeLJkmmlyt2ldMxFLeBrpIqs67Sv0q4jS06ZDn3oycWOkcxGMuADOsFXzPGEFy +AXAF/bT5+dVjX2H7KehAK8C0wZvpzPUroz2NDyi1aTKQJ09qkBZDKL9tzK+597fB +Ae9hUih3JwCkNJjmTR8PRQ45UdNeX6Uk1doy5FWM+FKp4EWq2N/eLdHnO6NOpeke +hV/Npet1iI+zuEbgH/CbTQ/ZugsRW9ClaDrxAVu6UE5KY1FlOXgXV0GRpbBYFsTu +Oi2ipbAlCh7xIhkmc1OeEAVWPKZLCHm2ueCoqRAh/wUCAwEAAaOCFC4wghQqMAwG +A1UdEwQFMAMBAf8wHQYDVR0OBBYEFEEdWMtu+JqcUoL0qryS5lajMQyrMEcGA1Ud +IwRAMD6AFEEdWMtu+JqcUoL0qryS5lajMQyroSGkHzAdMRswGQYDVQQDDBJ3ZWIt +cGxhdGZvcm0tdGVzdHOCAwEsJjALBgNVHQ8EBAMCAgQwggoFBgNVHR4Eggn8MIIJ ++KCCCfQwE4IRd2ViLXBsYXRmb3JtLnRlc3QwF4IVbm90LXdlYi1wbGF0Zm9ybS50 +ZXN0MBeCFXd3dy53ZWItcGxhdGZvcm0udGVzdDAYghZ3d3cxLndlYi1wbGF0Zm9y +bS50ZXN0MBiCFnd3dzIud2ViLXBsYXRmb3JtLnRlc3QwG4IZd3d3Lm5vdC13ZWIt +cGxhdGZvcm0udGVzdDAbghl3d3cud3d3LndlYi1wbGF0Zm9ybS50ZXN0MByCGnd3 +dy53d3cxLndlYi1wbGF0Zm9ybS50ZXN0MByCGnd3dzEubm90LXdlYi1wbGF0Zm9y +bS50ZXN0MByCGnd3dzIubm90LXdlYi1wbGF0Zm9ybS50ZXN0MByCGnd3dy53d3cy +LndlYi1wbGF0Zm9ybS50ZXN0MByCGnd3dzEud3d3LndlYi1wbGF0Zm9ybS50ZXN0 +MByCGnd3dzIud3d3LndlYi1wbGF0Zm9ybS50ZXN0MB2CG3d3dzIud3d3Mi53ZWIt +cGxhdGZvcm0udGVzdDAdght3d3cxLnd3dzEud2ViLXBsYXRmb3JtLnRlc3QwHYIb +d3d3MS53d3cyLndlYi1wbGF0Zm9ybS50ZXN0MB2CG3d3dzIud3d3MS53ZWItcGxh +dGZvcm0udGVzdDAfgh13d3cud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVzdDAggh54 +bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3QwIIIed3d3Lnd3dzIubm90LXdl +Yi1wbGF0Zm9ybS50ZXN0MCCCHnd3dzIud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVz +dDAggh53d3cud3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwIIIed3d3MS53d3cu +bm90LXdlYi1wbGF0Zm9ybS50ZXN0MCGCH3d3dzEud3d3MS5ub3Qtd2ViLXBsYXRm +b3JtLnRlc3QwIYIfd3d3Mi53d3cyLm5vdC13ZWItcGxhdGZvcm0udGVzdDAhgh93 +d3cyLnd3dzEubm90LXdlYi1wbGF0Zm9ybS50ZXN0MCGCH3d3dzEud3d3Mi5ub3Qt +d2ViLXBsYXRmb3JtLnRlc3QwJIIieG4tLWx2ZS02bGFkLnd3dy53ZWItcGxhdGZv +cm0udGVzdDAkgiJ3d3cueG4tLWx2ZS02bGFkLndlYi1wbGF0Zm9ybS50ZXN0MCSC +InhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwJYIjeG4tLWx2ZS02 +bGFkLnd3dzEud2ViLXBsYXRmb3JtLnRlc3QwJYIjd3d3MS54bi0tbHZlLTZsYWQu +d2ViLXBsYXRmb3JtLnRlc3QwJYIjd3d3Mi54bi0tbHZlLTZsYWQud2ViLXBsYXRm +b3JtLnRlc3QwJYIjeG4tLWx2ZS02bGFkLnd3dzIud2ViLXBsYXRmb3JtLnRlc3Qw +KIImeG4tLWx2ZS02bGFkLnd3dy5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwKIImd3d3 +LnhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwKYIneG4tLWx2ZS02 +bGFkLnd3dzEubm90LXdlYi1wbGF0Zm9ybS50ZXN0MCmCJ3huLS1sdmUtNmxhZC53 +d3cyLm5vdC13ZWItcGxhdGZvcm0udGVzdDApgid3d3cxLnhuLS1sdmUtNmxhZC5u +b3Qtd2ViLXBsYXRmb3JtLnRlc3QwKYInd3d3Mi54bi0tbHZlLTZsYWQubm90LXdl +Yi1wbGF0Zm9ybS50ZXN0MCuCKXhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLndlYi1w +bGF0Zm9ybS50ZXN0MC2CK3huLS1sdmUtNmxhZC54bi0tbHZlLTZsYWQud2ViLXBs +YXRmb3JtLnRlc3QwL4Itd3d3LnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLndlYi1w +bGF0Zm9ybS50ZXN0MC+CLXhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnd3dy53ZWIt +cGxhdGZvcm0udGVzdDAvgi14bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2Vi +LXBsYXRmb3JtLnRlc3QwMIIueG4tLW44ajZkczUzbHd3a3JxaHYyOGEud3d3Mi53 +ZWItcGxhdGZvcm0udGVzdDAwgi53d3cyLnhuLS1uOGo2ZHM1M2x3d2tycWh2Mjhh +LndlYi1wbGF0Zm9ybS50ZXN0MDCCLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnd3 +dzEud2ViLXBsYXRmb3JtLnRlc3QwMIIud3d3MS54bi0tbjhqNmRzNTNsd3drcnFo +djI4YS53ZWItcGxhdGZvcm0udGVzdDAxgi94bi0tbHZlLTZsYWQueG4tLWx2ZS02 +bGFkLm5vdC13ZWItcGxhdGZvcm0udGVzdDAzgjF4bi0tbjhqNmRzNTNsd3drcnFo +djI4YS53d3cubm90LXdlYi1wbGF0Zm9ybS50ZXN0MDOCMXd3dy54bi0tbjhqNmRz +NTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwNIIyeG4tLW44ajZk +czUzbHd3a3JxaHYyOGEud3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwNIIyd3d3 +MS54bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3Qw +NIIyeG4tLW44ajZkczUzbHd3a3JxaHYyOGEud3d3Mi5ub3Qtd2ViLXBsYXRmb3Jt +LnRlc3QwNIIyd3d3Mi54bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBs +YXRmb3JtLnRlc3QwOII2eG4tLWx2ZS02bGFkLnhuLS1uOGo2ZHM1M2x3d2tycWh2 +MjhhLndlYi1wbGF0Zm9ybS50ZXN0MDiCNnhuLS1uOGo2ZHM1M2x3d2tycWh2Mjhh +LnhuLS1sdmUtNmxhZC53ZWItcGxhdGZvcm0udGVzdDA8gjp4bi0tbjhqNmRzNTNs +d3drcnFodjI4YS54bi0tbHZlLTZsYWQubm90LXdlYi1wbGF0Zm9ybS50ZXN0MDyC +OnhuLS1sdmUtNmxhZC54bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBs +YXRmb3JtLnRlc3QwQ4JBeG4tLW44ajZkczUzbHd3a3JxaHYyOGEueG4tLW44ajZk +czUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3QwR4JFeG4tLW44ajZkczUz +bHd3a3JxaHYyOGEueG4tLW44ajZkczUzbHd3a3JxaHYyOGEubm90LXdlYi1wbGF0 +Zm9ybS50ZXN0MBMGA1UdJQQMMAoGCCsGAQUFBwMBMIIJhQYDVR0RBIIJfDCCCXiC +EXdlYi1wbGF0Zm9ybS50ZXN0ghVub3Qtd2ViLXBsYXRmb3JtLnRlc3SCFXd3dy53 +ZWItcGxhdGZvcm0udGVzdIIWd3d3MS53ZWItcGxhdGZvcm0udGVzdIIWd3d3Mi53 +ZWItcGxhdGZvcm0udGVzdIIZd3d3Lm5vdC13ZWItcGxhdGZvcm0udGVzdIIZd3d3 +Lnd3dy53ZWItcGxhdGZvcm0udGVzdIIad3d3Lnd3dzEud2ViLXBsYXRmb3JtLnRl +c3SCGnd3dzEubm90LXdlYi1wbGF0Zm9ybS50ZXN0ghp3d3cyLm5vdC13ZWItcGxh +dGZvcm0udGVzdIIad3d3Lnd3dzIud2ViLXBsYXRmb3JtLnRlc3SCGnd3dzEud3d3 +LndlYi1wbGF0Zm9ybS50ZXN0ghp3d3cyLnd3dy53ZWItcGxhdGZvcm0udGVzdIIb +d3d3Mi53d3cyLndlYi1wbGF0Zm9ybS50ZXN0ght3d3cxLnd3dzEud2ViLXBsYXRm +b3JtLnRlc3SCG3d3dzEud3d3Mi53ZWItcGxhdGZvcm0udGVzdIIbd3d3Mi53d3cx +LndlYi1wbGF0Zm9ybS50ZXN0gh13d3cud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVz +dIIeeG4tLWx2ZS02bGFkLndlYi1wbGF0Zm9ybS50ZXN0gh53d3cud3d3Mi5ub3Qt +d2ViLXBsYXRmb3JtLnRlc3SCHnd3dzIud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVz +dIIed3d3Lnd3dzEubm90LXdlYi1wbGF0Zm9ybS50ZXN0gh53d3cxLnd3dy5ub3Qt +d2ViLXBsYXRmb3JtLnRlc3SCH3d3dzEud3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRl +c3SCH3d3dzIud3d3Mi5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCH3d3dzIud3d3MS5u +b3Qtd2ViLXBsYXRmb3JtLnRlc3SCH3d3dzEud3d3Mi5ub3Qtd2ViLXBsYXRmb3Jt +LnRlc3SCInhuLS1sdmUtNmxhZC53d3cud2ViLXBsYXRmb3JtLnRlc3SCInd3dy54 +bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3SCInhuLS1sdmUtNmxhZC5ub3Qt +d2ViLXBsYXRmb3JtLnRlc3SCI3huLS1sdmUtNmxhZC53d3cxLndlYi1wbGF0Zm9y +bS50ZXN0giN3d3cxLnhuLS1sdmUtNmxhZC53ZWItcGxhdGZvcm0udGVzdIIjd3d3 +Mi54bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3SCI3huLS1sdmUtNmxhZC53 +d3cyLndlYi1wbGF0Zm9ybS50ZXN0giZ4bi0tbHZlLTZsYWQud3d3Lm5vdC13ZWIt +cGxhdGZvcm0udGVzdIImd3d3LnhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3Jt +LnRlc3SCJ3huLS1sdmUtNmxhZC53d3cxLm5vdC13ZWItcGxhdGZvcm0udGVzdIIn +eG4tLWx2ZS02bGFkLnd3dzIubm90LXdlYi1wbGF0Zm9ybS50ZXN0gid3d3cxLnhu +LS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCJ3d3dzIueG4tLWx2ZS02 +bGFkLm5vdC13ZWItcGxhdGZvcm0udGVzdIIpeG4tLW44ajZkczUzbHd3a3JxaHYy +OGEud2ViLXBsYXRmb3JtLnRlc3SCK3huLS1sdmUtNmxhZC54bi0tbHZlLTZsYWQu +d2ViLXBsYXRmb3JtLnRlc3SCLXd3dy54bi0tbjhqNmRzNTNsd3drcnFodjI4YS53 +ZWItcGxhdGZvcm0udGVzdIIteG4tLW44ajZkczUzbHd3a3JxaHYyOGEud3d3Lndl +Yi1wbGF0Zm9ybS50ZXN0gi14bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2Vi +LXBsYXRmb3JtLnRlc3SCLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnd3dzIud2Vi +LXBsYXRmb3JtLnRlc3SCLnd3dzIueG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2Vi +LXBsYXRmb3JtLnRlc3SCLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnd3dzEud2Vi +LXBsYXRmb3JtLnRlc3SCLnd3dzEueG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2Vi +LXBsYXRmb3JtLnRlc3SCL3huLS1sdmUtNmxhZC54bi0tbHZlLTZsYWQubm90LXdl +Yi1wbGF0Zm9ybS50ZXN0gjF4bi0tbjhqNmRzNTNsd3drcnFodjI4YS53d3cubm90 +LXdlYi1wbGF0Zm9ybS50ZXN0gjF3d3cueG4tLW44ajZkczUzbHd3a3JxaHYyOGEu +bm90LXdlYi1wbGF0Zm9ybS50ZXN0gjJ4bi0tbjhqNmRzNTNsd3drcnFodjI4YS53 +d3cxLm5vdC13ZWItcGxhdGZvcm0udGVzdIIyd3d3MS54bi0tbjhqNmRzNTNsd3dr +cnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCMnhuLS1uOGo2ZHM1M2x3d2ty +cWh2MjhhLnd3dzIubm90LXdlYi1wbGF0Zm9ybS50ZXN0gjJ3d3cyLnhuLS1uOGo2 +ZHM1M2x3d2tycWh2MjhhLm5vdC13ZWItcGxhdGZvcm0udGVzdII2eG4tLWx2ZS02 +bGFkLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLndlYi1wbGF0Zm9ybS50ZXN0gjZ4 +bi0tbjhqNmRzNTNsd3drcnFodjI4YS54bi0tbHZlLTZsYWQud2ViLXBsYXRmb3Jt +LnRlc3SCOnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnhuLS1sdmUtNmxhZC5ub3Qt +d2ViLXBsYXRmb3JtLnRlc3SCOnhuLS1sdmUtNmxhZC54bi0tbjhqNmRzNTNsd3dr +cnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCQXhuLS1uOGo2ZHM1M2x3d2ty +cWh2MjhhLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLndlYi1wbGF0Zm9ybS50ZXN0 +gkV4bi0tbjhqNmRzNTNsd3drcnFodjI4YS54bi0tbjhqNmRzNTNsd3drcnFodjI4 +YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwDQYJKoZIhvcNAQELBQADggEBAGScyqdj +uxMwU2CgtFG8+oQK0sWMb2yQibpyvfhZ2PSnfsTNNNyfQRSK2mnPWizjE2Ocx63S +TEIjsA/veH/kfWdxxXie93VFyacy/LTyETEb40a5UMJA6Im9LkT2Fpp/SLSxAapA +Hj7fCIaVBpuCVbPDkKxa+zZj9mc7p6Z6o1dwtbzkR4NqoCElcHwjwYo0zlqNq1jc +BLHeoDASFi0RD1x0mNlVmDIg/hJqdN8jbPm+LOxKVgey1Fq7tsz29MJR6Hbf9kYT +A6kIiYuDODSXWIxWYRlWgJaaI35FJqWeRtpBZaDLSontIN4X3cnTChYJREVNmFGx +xmf4NMjFPYpIFUE= -----END CERTIFICATE----- diff --git a/tests/wpt/tests/tools/certs/web-platform.test.key b/tests/wpt/tests/tools/certs/web-platform.test.key index 4f68bb3caa0..2516ae74593 100644 --- a/tests/wpt/tests/tools/certs/web-platform.test.key +++ b/tests/wpt/tests/tools/certs/web-platform.test.key @@ -1,28 +1,28 @@ -----BEGIN PRIVATE KEY----- -MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDg/mIE/8f6jTVz -bI2TZwmA+tIws6+TpSuhuot9JbArcIf1JSicQl2itKgDFqM1iktbHeLfYChZw3TS -QZUyhalfCG3aphUwH1bjGbRAuBHIOS3ncCl/aCvqbIrU3PRpCIVTMfz5OtDlT5CR -ynwg9qLlxacpiyj9nw2ASEoN3liLWbQOROhuPtvmRKwaFRm7OY669oFwaQqoeDrC -B9LPlEJiYjWjBZIghnsE1Y0DSV7lz+m7cKYG+PnZKNYfKg7/MV2g5PqWXqEziJBG -FoicL4Dbsk7X+wvG+T9NwKrQKE0t1sE+oIsRdLLXvp0k++um57IN1KuvK1xV/Mg9 -TeVx/zlpAgMBAAECggEASFMdmTPLygvYcckkXYzSrkZyiLtKJnEC7JM1wb36uowK -+E/AlTJ0PRhLpeqB/nT9MkYSJvIXJnvBMtFoL3xt7KGeBpo612RLnuclXWSOOsm+ -qtYQUOdgrpPDsRdx7c2SZiL8ifVRL1V7SJJJgqMlzCzURnN4csbNJT6Xp4ug9PH/ -sn8kWgZyEPW2MdkbY0APykbkWzXvkyJQ4l9qm3Z1sbWQLHkvyD3aP0fS4EGtOoY7 -shgufnXmkGRkSl3oSg/JT7+z/W0lExyN28O53Wm9kBlHxmSguHpmH8ihQTpuLy8K -16Xv9k5z+5qJMEg4oC8/VAHGnlV5gCAFayjfypoLnQKBgQDzVDJZPXNS9OUYCJJE -sOoAHfBul03uili9ThGtwg6rRBzClsd9ldmjqfBEdPF85o/fnRF8Hhp6IAGjP7wv -JCY0KKUkIl5KweWCfCtYkVzT6d7q0tMaIx/lL69F6XR0aK3GtMH5zfM6tOb+MVs5 -KxGdkQPEYIDNF2UtNbHeRFkNbwKBgQDstcK2WoCOy4kfifSCL4OKpdZrSXT/pTcA -3YUMjnNcX/XVNXgHU9z+FLf63oN3D0KvmLqPyz0NEX8ew77FxCxU5LcfPYLtDI0o -J3F7DZYQKk8MSe4HCbQDwMhDw+RHSE+JJICm0V8yrR9UpW0v7tqLrjk+HiSyx+yp -MkhgVGDqpwKBgQCSuHkngDsykUI2bKytyLNAYM0iEg/GvxrlAtb8G+A2evqQhtRB -MIMsAYND8/PM6UVlg1MQsSIr83KpWfwBvN1gZAW3tRWAJExckrycSgJcMU/d7kOm -JfnMeyVHlY5HxvrJryKrmviHtJ74NRCZdxPHG7LWzY28nNfAG/llWXcM9wKBgF+b -Eifg6efC4YFxkOY8Fp8bWD1BEBZpPowE7MYjiwiWYY5Z6D7danbdG2oiEWs3KLIP -t9p4NhJfLL7aROVP1K/9KNFfYNApr6G2PKl81U12KTNHcPI6wxB4/uoP5tW7qRQ1 -QBkgm5i2P99KaY1gpbihB9HFDwF+qmG0Q3NU4UglAoGBAI9fosEAe8SthkTZvUxQ -cqytj++mWX9Yz2ZKthORFwI6Q3FGYBUx1I67Lu7qiWe69frcw3pN2Yt65jc08w10 -TOEorKsvYnZx5vaPNiFicmW+bpgqfAkL/j7GdDrgddDL9NYVbVGDLHWPRqmtBEfa -fH90hyluwXFzzgKqYmg+GzKu +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCt6FXDpHkmyFOj +ZJkJRgmCvTwlEb01AE7qLz0+ScHH3d1a2HJMAkz/rEkZ/XYtdpXNclkuF5pFvzg3 +99C3sa42K6SK5u2VLURaC5L7a4laIYJC/FHmQhupw4CP9oSw+lr/4AY0gadIw1p7 +nzHJmC7zj67bcwKXVGlznBfQkRwTDrfynHjq3e/oqveTamzW2ifxfggcOJcNPZ90 +F7jkPgP2HoJWM8TLP0EPvOtKoyaJET1+qtxAg2IN96o/8bQo/RYJm4U8RZ7vabXy +44+KFhNOIzmF3iMRESUAPyaOV1T5rgNguHQ2eztudw0A1N3WpA1bp/AE+0zh0T0t +AikZSBPbAgMBAAECggEAKZLYJdwExluveukKmKfwkBuS7D2wYKJBO0StvF0/gPst +9pC1yivmolxaYWcxQC8QIrwKS7WCwNe0pdSNRcypG/QU8su/0iCvLWOE8KvFexF1 +pXPSVFxLZqsA6emB0RkYdgDlGto/1mo1EEZ/TXUfDES2BWoaHXkleGjBXK/D6V3/ +cCk3IV5g0wQVpN2V+vmCFAJEJ2Y379CEyBja9i3/mor4uLrsib5mi5o0jDMtEPgE +qHu0Zy48GtNhAoTBf2TdxGJJt1nqErc11s3ItVcitEKlxmkXrKFXH4uCGBEC204z +x7p1B4YlNl2E8KJddmE+auYD18o5bPsYElgtIYf5qQKBgQDbV1BTERBH4sT/3O9E +kwYgTHOz7aLXr/PPCI0vr+0F4TECTVKJgjf8TV7R9nj4zyYnHxsBwfZt9kDvTXrT +X1/9DToYNNm4VkomDZ4CGo6uI0OAvcX+hNdivLtWIz0ywjaBZ1oMJf9by/gI/AP0 +bMzIcBQcz+mxmZ1H+hXA2lXD/wKBgQDK+RyLYOURinNUyWYt3EXviN1K/Ove3hb4 +bUd1f2ZR4ZPrZNTK2shrgGPyPJctzjpHCszNyJwYmGqrfbflHX9nsSI0WeVZgfLM +LIVFOhETcbwuem6c8ivO9jt7hbO3Hl4UxkT8PIza79Jgtqw+OP0mGbso6gi2y54i +gLbrGh1AJQKBgQC2XKnT5mP64HeZoz7rbLGzON0Zw4GYghnbD+kStNoEAW6V02PE +IBgcFNe5CYsakl/ONvZlR7ZzRkJGs8xi4PEVm2Gproc108hiSwAMD7iA36DH8QAk +1J2e4ft/alz/TqmyfRNI9m6RC8x069L97Vd1bnnKWrKZjnZN2YcsiFq2UQKBgDk6 +T5AEu9FcRfRL7KFVj+pfnnU8Jozp9XQJ67H3P7Qqc/hUr6KaWRPmWUe9SarCkK/j +HaePvmM45iqAAc95p6hmywwTpJS+DOUAUHsaSiI/WR2Jq5JYvX1W86J6KhehWkll +NaIguF4qbBiUqK/KhaWub5Szl81iT63OuMRE0qZ5AoGAX0M1yGNcCgJ0V7gDSjXG +JNq5AH9Qo/aF7EAz9oLZBs3NRsuz61x40fVNurc7BoRTnjKSM9GF/U0i+0j2sWth +Pw7Zl0bfJK3oslO8qqqt730X6KjGXNlqoalWfsMTcBTvO8kzJhyF6zcKyGAJISuW +W6PveJHKQ5L8SwwxyN4LkoQ= -----END PRIVATE KEY----- diff --git a/tests/wpt/tests/tools/certs/web-platform.test.pem b/tests/wpt/tests/tools/certs/web-platform.test.pem index 02a2d94e935..ad77f3e9e14 100644 --- a/tests/wpt/tests/tools/certs/web-platform.test.pem +++ b/tests/wpt/tests/tools/certs/web-platform.test.pem @@ -1,133 +1,133 @@ Certificate: Data: Version: 3 (0x2) - Serial Number: 1155 (0x483) + Serial Number: 76839 (0x12c27) Signature Algorithm: sha256WithRSAEncryption Issuer: CN=web-platform-tests Validity - Not Before: Oct 12 01:04:46 2024 GMT - Not After : Oct 12 01:04:46 2025 GMT + Not Before: Apr 12 01:11:59 2025 GMT + Not After : Apr 12 01:11:59 2026 GMT Subject: CN=web-platform.test Subject Public Key Info: Public Key Algorithm: rsaEncryption - RSA Public-Key: (2048 bit) + Public-Key: (2048 bit) Modulus: - 00:e0:fe:62:04:ff:c7:fa:8d:35:73:6c:8d:93:67: - 09:80:fa:d2:30:b3:af:93:a5:2b:a1:ba:8b:7d:25: - b0:2b:70:87:f5:25:28:9c:42:5d:a2:b4:a8:03:16: - a3:35:8a:4b:5b:1d:e2:df:60:28:59:c3:74:d2:41: - 95:32:85:a9:5f:08:6d:da:a6:15:30:1f:56:e3:19: - b4:40:b8:11:c8:39:2d:e7:70:29:7f:68:2b:ea:6c: - 8a:d4:dc:f4:69:08:85:53:31:fc:f9:3a:d0:e5:4f: - 90:91:ca:7c:20:f6:a2:e5:c5:a7:29:8b:28:fd:9f: - 0d:80:48:4a:0d:de:58:8b:59:b4:0e:44:e8:6e:3e: - db:e6:44:ac:1a:15:19:bb:39:8e:ba:f6:81:70:69: - 0a:a8:78:3a:c2:07:d2:cf:94:42:62:62:35:a3:05: - 92:20:86:7b:04:d5:8d:03:49:5e:e5:cf:e9:bb:70: - a6:06:f8:f9:d9:28:d6:1f:2a:0e:ff:31:5d:a0:e4: - fa:96:5e:a1:33:88:90:46:16:88:9c:2f:80:db:b2: - 4e:d7:fb:0b:c6:f9:3f:4d:c0:aa:d0:28:4d:2d:d6: - c1:3e:a0:8b:11:74:b2:d7:be:9d:24:fb:eb:a6:e7: - b2:0d:d4:ab:af:2b:5c:55:fc:c8:3d:4d:e5:71:ff: - 39:69 + 00:ad:e8:55:c3:a4:79:26:c8:53:a3:64:99:09:46: + 09:82:bd:3c:25:11:bd:35:00:4e:ea:2f:3d:3e:49: + c1:c7:dd:dd:5a:d8:72:4c:02:4c:ff:ac:49:19:fd: + 76:2d:76:95:cd:72:59:2e:17:9a:45:bf:38:37:f7: + d0:b7:b1:ae:36:2b:a4:8a:e6:ed:95:2d:44:5a:0b: + 92:fb:6b:89:5a:21:82:42:fc:51:e6:42:1b:a9:c3: + 80:8f:f6:84:b0:fa:5a:ff:e0:06:34:81:a7:48:c3: + 5a:7b:9f:31:c9:98:2e:f3:8f:ae:db:73:02:97:54: + 69:73:9c:17:d0:91:1c:13:0e:b7:f2:9c:78:ea:dd: + ef:e8:aa:f7:93:6a:6c:d6:da:27:f1:7e:08:1c:38: + 97:0d:3d:9f:74:17:b8:e4:3e:03:f6:1e:82:56:33: + c4:cb:3f:41:0f:bc:eb:4a:a3:26:89:11:3d:7e:aa: + dc:40:83:62:0d:f7:aa:3f:f1:b4:28:fd:16:09:9b: + 85:3c:45:9e:ef:69:b5:f2:e3:8f:8a:16:13:4e:23: + 39:85:de:23:11:11:25:00:3f:26:8e:57:54:f9:ae: + 03:60:b8:74:36:7b:3b:6e:77:0d:00:d4:dd:d6:a4: + 0d:5b:a7:f0:04:fb:4c:e1:d1:3d:2d:02:29:19:48: + 13:db Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE X509v3 Subject Key Identifier: - 6D:E6:53:45:A0:4B:96:3B:B6:C1:D8:5B:E8:C4:E2:2A:9D:9B:A2:BA + 7C:BC:FA:E4:3E:89:B6:48:D0:26:6C:18:26:E2:CC:74:5E:76:5E:C3 X509v3 Authority Key Identifier: - keyid:C9:65:67:DF:F8:60:C5:FB:E0:F7:15:D1:ED:5B:6D:73:E2:73:D4:E7 - + 41:1D:58:CB:6E:F8:9A:9C:52:82:F4:AA:BC:92:E6:56:A3:31:0C:AB X509v3 Key Usage: Digital Signature, Non Repudiation, Key Encipherment X509v3 Extended Key Usage: TLS Web Server Authentication X509v3 Subject Alternative Name: - DNS:web-platform.test, DNS:www.web-platform.test, DNS:not-web-platform.test, DNS:www1.web-platform.test, DNS:www2.web-platform.test, DNS:www.www.web-platform.test, DNS:www.not-web-platform.test, DNS:www2.www.web-platform.test, DNS:www1.not-web-platform.test, DNS:www2.not-web-platform.test, DNS:www.www1.web-platform.test, DNS:www.www2.web-platform.test, DNS:www1.www.web-platform.test, DNS:www2.www2.web-platform.test, DNS:www1.www1.web-platform.test, DNS:www2.www1.web-platform.test, DNS:www1.www2.web-platform.test, DNS:www.www.not-web-platform.test, DNS:www.www2.not-web-platform.test, DNS:www2.www.not-web-platform.test, DNS:www.www1.not-web-platform.test, DNS:xn--lve-6lad.web-platform.test, DNS:www1.www.not-web-platform.test, DNS:www1.www2.not-web-platform.test, DNS:www2.www1.not-web-platform.test, DNS:www2.www2.not-web-platform.test, DNS:www1.www1.not-web-platform.test, DNS:xn--lve-6lad.www.web-platform.test, DNS:www.xn--lve-6lad.web-platform.test, DNS:xn--lve-6lad.not-web-platform.test, DNS:www1.xn--lve-6lad.web-platform.test, DNS:xn--lve-6lad.www1.web-platform.test, DNS:www2.xn--lve-6lad.web-platform.test, DNS:xn--lve-6lad.www2.web-platform.test, DNS:www.xn--lve-6lad.not-web-platform.test, DNS:xn--lve-6lad.www.not-web-platform.test, DNS:www2.xn--lve-6lad.not-web-platform.test, DNS:xn--lve-6lad.www1.not-web-platform.test, DNS:xn--lve-6lad.www2.not-web-platform.test, DNS:www1.xn--lve-6lad.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--lve-6lad.xn--lve-6lad.web-platform.test, DNS:www.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:www1.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www1.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www2.web-platform.test, DNS:www2.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--lve-6lad.xn--lve-6lad.not-web-platform.test, DNS:www.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www.not-web-platform.test, DNS:www1.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www1.not-web-platform.test, DNS:www2.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www2.not-web-platform.test, DNS:xn--lve-6lad.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--lve-6lad.web-platform.test, DNS:xn--lve-6lad.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--lve-6lad.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test + DNS:web-platform.test, DNS:not-web-platform.test, DNS:www.web-platform.test, DNS:www1.web-platform.test, DNS:www2.web-platform.test, DNS:www.not-web-platform.test, DNS:www.www.web-platform.test, DNS:www.www1.web-platform.test, DNS:www1.not-web-platform.test, DNS:www2.not-web-platform.test, DNS:www.www2.web-platform.test, DNS:www1.www.web-platform.test, DNS:www2.www.web-platform.test, DNS:www2.www2.web-platform.test, DNS:www1.www1.web-platform.test, DNS:www1.www2.web-platform.test, DNS:www2.www1.web-platform.test, DNS:www.www.not-web-platform.test, DNS:xn--lve-6lad.web-platform.test, DNS:www.www2.not-web-platform.test, DNS:www2.www.not-web-platform.test, DNS:www.www1.not-web-platform.test, DNS:www1.www.not-web-platform.test, DNS:www1.www1.not-web-platform.test, DNS:www2.www2.not-web-platform.test, DNS:www2.www1.not-web-platform.test, DNS:www1.www2.not-web-platform.test, DNS:xn--lve-6lad.www.web-platform.test, DNS:www.xn--lve-6lad.web-platform.test, DNS:xn--lve-6lad.not-web-platform.test, DNS:xn--lve-6lad.www1.web-platform.test, DNS:www1.xn--lve-6lad.web-platform.test, DNS:www2.xn--lve-6lad.web-platform.test, DNS:xn--lve-6lad.www2.web-platform.test, DNS:xn--lve-6lad.www.not-web-platform.test, DNS:www.xn--lve-6lad.not-web-platform.test, DNS:xn--lve-6lad.www1.not-web-platform.test, DNS:xn--lve-6lad.www2.not-web-platform.test, DNS:www1.xn--lve-6lad.not-web-platform.test, DNS:www2.xn--lve-6lad.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--lve-6lad.xn--lve-6lad.web-platform.test, DNS:www.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www2.web-platform.test, DNS:www2.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www1.web-platform.test, DNS:www1.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--lve-6lad.xn--lve-6lad.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www.not-web-platform.test, DNS:www.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www1.not-web-platform.test, DNS:www1.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www2.not-web-platform.test, DNS:www2.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--lve-6lad.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--lve-6lad.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--lve-6lad.not-web-platform.test, DNS:xn--lve-6lad.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test Signature Algorithm: sha256WithRSAEncryption - 41:30:c3:35:8a:8c:3c:5d:5d:a3:d7:10:28:81:59:c7:cd:b0: - a8:73:8f:1a:d1:36:be:40:86:3c:63:cb:1c:a9:41:26:a0:0c: - 6a:cf:b7:cf:76:3f:64:fa:ea:e5:74:9b:57:1d:b2:dd:92:ce: - ed:c1:32:ec:65:eb:7d:c2:73:ab:8d:95:33:b3:a3:d2:b0:6d: - 81:0d:3f:31:c3:89:23:49:39:da:6f:22:b5:1d:12:97:6e:cc: - 20:43:5a:ca:f4:d5:3e:01:be:90:03:b2:4e:f7:9c:e2:97:21: - 39:a3:33:8c:45:a4:6c:e9:3a:eb:87:2d:1d:39:e6:d8:bb:b2: - 15:01:a4:8f:70:25:61:4f:0f:5f:35:8d:9c:c6:fb:81:3b:52: - 15:94:90:e4:ee:d7:3b:b2:b7:68:45:46:bb:56:06:7f:83:73: - d9:a8:1c:0d:17:fb:ce:81:5d:1c:0a:4f:0c:75:68:a2:70:64: - 6d:de:ad:cf:ac:10:e5:e5:04:1f:e8:12:8d:59:27:e2:9a:76: - dd:30:89:bc:2e:22:ac:97:12:86:a0:45:9e:2f:e2:3f:c3:0a: - fe:14:6c:2a:28:a6:a3:00:81:d0:53:e2:4d:66:9c:13:9e:e5: - 25:02:27:b3:05:62:73:08:49:43:6e:15:74:0d:ed:dc:71:47: - 6c:79:53:1d + Signature Value: + 62:c7:66:39:0f:01:0e:9e:52:15:2f:74:09:4a:d8:33:d4:21: + 64:69:d7:4a:68:9e:84:39:be:d1:f7:4d:73:aa:62:06:b1:30: + 2b:4b:a0:9c:56:8d:a2:18:62:d6:5a:03:12:1a:ac:ed:c5:be: + 01:5b:d7:1a:e3:5c:46:35:47:88:95:af:a9:53:69:94:c8:0e: + 09:df:79:d8:6e:ce:44:27:df:b6:70:76:7f:ab:20:0b:fd:ef: + 23:9a:b2:19:3f:ae:1e:74:79:17:ed:bf:1a:14:44:43:f9:6a: + ad:f7:c6:e7:bb:16:3a:1f:70:a9:e6:22:c8:29:89:cf:05:ef: + 95:32:f9:a2:fe:55:3f:59:da:b8:d6:84:81:e8:86:e2:7a:2d: + 37:ac:89:46:cc:08:82:9e:27:2d:ac:92:0e:27:63:69:77:f6: + 42:e3:bd:87:f8:ef:72:e3:87:43:e5:ea:e3:e8:57:b0:f6:c2: + 08:e4:e7:b4:27:59:c9:6c:4c:96:b0:a6:02:27:82:24:ce:58: + c8:aa:50:48:de:dd:3e:8e:da:ec:42:94:55:37:68:8e:8a:5a: + f4:44:8e:f8:8e:81:51:31:c8:eb:04:43:78:b6:89:a4:76:09: + c1:7b:53:58:41:96:c6:ae:91:ca:a8:45:02:d9:e4:bc:eb:d4: + b0:5b:a3:be -----BEGIN CERTIFICATE----- -MIIMsTCCC5mgAwIBAgICBIMwDQYJKoZIhvcNAQELBQAwHTEbMBkGA1UEAwwSd2Vi -LXBsYXRmb3JtLXRlc3RzMB4XDTI0MTAxMjAxMDQ0NloXDTI1MTAxMjAxMDQ0Nlow -HDEaMBgGA1UEAwwRd2ViLXBsYXRmb3JtLnRlc3QwggEiMA0GCSqGSIb3DQEBAQUA -A4IBDwAwggEKAoIBAQDg/mIE/8f6jTVzbI2TZwmA+tIws6+TpSuhuot9JbArcIf1 -JSicQl2itKgDFqM1iktbHeLfYChZw3TSQZUyhalfCG3aphUwH1bjGbRAuBHIOS3n -cCl/aCvqbIrU3PRpCIVTMfz5OtDlT5CRynwg9qLlxacpiyj9nw2ASEoN3liLWbQO -ROhuPtvmRKwaFRm7OY669oFwaQqoeDrCB9LPlEJiYjWjBZIghnsE1Y0DSV7lz+m7 -cKYG+PnZKNYfKg7/MV2g5PqWXqEziJBGFoicL4Dbsk7X+wvG+T9NwKrQKE0t1sE+ -oIsRdLLXvp0k++um57IN1KuvK1xV/Mg9TeVx/zlpAgMBAAGjggn6MIIJ9jAJBgNV -HRMEAjAAMB0GA1UdDgQWBBRt5lNFoEuWO7bB2FvoxOIqnZuiujAfBgNVHSMEGDAW -gBTJZWff+GDF++D3FdHtW21z4nPU5zALBgNVHQ8EBAMCBeAwEwYDVR0lBAwwCgYI -KwYBBQUHAwEwggmFBgNVHREEggl8MIIJeIIRd2ViLXBsYXRmb3JtLnRlc3SCFXd3 -dy53ZWItcGxhdGZvcm0udGVzdIIVbm90LXdlYi1wbGF0Zm9ybS50ZXN0ghZ3d3cx -LndlYi1wbGF0Zm9ybS50ZXN0ghZ3d3cyLndlYi1wbGF0Zm9ybS50ZXN0ghl3d3cu -d3d3LndlYi1wbGF0Zm9ybS50ZXN0ghl3d3cubm90LXdlYi1wbGF0Zm9ybS50ZXN0 -ghp3d3cyLnd3dy53ZWItcGxhdGZvcm0udGVzdIIad3d3MS5ub3Qtd2ViLXBsYXRm -b3JtLnRlc3SCGnd3dzIubm90LXdlYi1wbGF0Zm9ybS50ZXN0ghp3d3cud3d3MS53 -ZWItcGxhdGZvcm0udGVzdIIad3d3Lnd3dzIud2ViLXBsYXRmb3JtLnRlc3SCGnd3 -dzEud3d3LndlYi1wbGF0Zm9ybS50ZXN0ght3d3cyLnd3dzIud2ViLXBsYXRmb3Jt -LnRlc3SCG3d3dzEud3d3MS53ZWItcGxhdGZvcm0udGVzdIIbd3d3Mi53d3cxLndl -Yi1wbGF0Zm9ybS50ZXN0ght3d3cxLnd3dzIud2ViLXBsYXRmb3JtLnRlc3SCHXd3 -dy53d3cubm90LXdlYi1wbGF0Zm9ybS50ZXN0gh53d3cud3d3Mi5ub3Qtd2ViLXBs -YXRmb3JtLnRlc3SCHnd3dzIud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVzdIIed3d3 -Lnd3dzEubm90LXdlYi1wbGF0Zm9ybS50ZXN0gh54bi0tbHZlLTZsYWQud2ViLXBs -YXRmb3JtLnRlc3SCHnd3dzEud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVzdIIfd3d3 -MS53d3cyLm5vdC13ZWItcGxhdGZvcm0udGVzdIIfd3d3Mi53d3cxLm5vdC13ZWIt -cGxhdGZvcm0udGVzdIIfd3d3Mi53d3cyLm5vdC13ZWItcGxhdGZvcm0udGVzdIIf -d3d3MS53d3cxLm5vdC13ZWItcGxhdGZvcm0udGVzdIIieG4tLWx2ZS02bGFkLnd3 -dy53ZWItcGxhdGZvcm0udGVzdIIid3d3LnhuLS1sdmUtNmxhZC53ZWItcGxhdGZv -cm0udGVzdIIieG4tLWx2ZS02bGFkLm5vdC13ZWItcGxhdGZvcm0udGVzdIIjd3d3 -MS54bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3SCI3huLS1sdmUtNmxhZC53 -d3cxLndlYi1wbGF0Zm9ybS50ZXN0giN3d3cyLnhuLS1sdmUtNmxhZC53ZWItcGxh -dGZvcm0udGVzdIIjeG4tLWx2ZS02bGFkLnd3dzIud2ViLXBsYXRmb3JtLnRlc3SC -Jnd3dy54bi0tbHZlLTZsYWQubm90LXdlYi1wbGF0Zm9ybS50ZXN0giZ4bi0tbHZl -LTZsYWQud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVzdIInd3d3Mi54bi0tbHZlLTZs -YWQubm90LXdlYi1wbGF0Zm9ybS50ZXN0gid4bi0tbHZlLTZsYWQud3d3MS5ub3Qt -d2ViLXBsYXRmb3JtLnRlc3SCJ3huLS1sdmUtNmxhZC53d3cyLm5vdC13ZWItcGxh -dGZvcm0udGVzdIInd3d3MS54bi0tbHZlLTZsYWQubm90LXdlYi1wbGF0Zm9ybS50 -ZXN0gil4bi0tbjhqNmRzNTNsd3drcnFodjI4YS53ZWItcGxhdGZvcm0udGVzdIIr -eG4tLWx2ZS02bGFkLnhuLS1sdmUtNmxhZC53ZWItcGxhdGZvcm0udGVzdIItd3d3 -LnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLndlYi1wbGF0Zm9ybS50ZXN0gi14bi0t -bjhqNmRzNTNsd3drcnFodjI4YS53d3cud2ViLXBsYXRmb3JtLnRlc3SCLXhuLS1u -OGo2ZHM1M2x3d2tycWh2MjhhLm5vdC13ZWItcGxhdGZvcm0udGVzdIIud3d3MS54 -bi0tbjhqNmRzNTNsd3drcnFodjI4YS53ZWItcGxhdGZvcm0udGVzdIIueG4tLW44 -ajZkczUzbHd3a3JxaHYyOGEud3d3MS53ZWItcGxhdGZvcm0udGVzdIIueG4tLW44 -ajZkczUzbHd3a3JxaHYyOGEud3d3Mi53ZWItcGxhdGZvcm0udGVzdIIud3d3Mi54 -bi0tbjhqNmRzNTNsd3drcnFodjI4YS53ZWItcGxhdGZvcm0udGVzdIIveG4tLWx2 -ZS02bGFkLnhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCMXd3dy54 -bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCMXhu -LS1uOGo2ZHM1M2x3d2tycWh2MjhhLnd3dy5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SC -Mnd3dzEueG4tLW44ajZkczUzbHd3a3JxaHYyOGEubm90LXdlYi1wbGF0Zm9ybS50 -ZXN0gjJ4bi0tbjhqNmRzNTNsd3drcnFodjI4YS53d3cxLm5vdC13ZWItcGxhdGZv -cm0udGVzdIIyd3d3Mi54bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBs -YXRmb3JtLnRlc3SCMnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnd3dzIubm90LXdl -Yi1wbGF0Zm9ybS50ZXN0gjZ4bi0tbHZlLTZsYWQueG4tLW44ajZkczUzbHd3a3Jx -aHYyOGEud2ViLXBsYXRmb3JtLnRlc3SCNnhuLS1uOGo2ZHM1M2x3d2tycWh2Mjhh -LnhuLS1sdmUtNmxhZC53ZWItcGxhdGZvcm0udGVzdII6eG4tLWx2ZS02bGFkLnhu -LS1uOGo2ZHM1M2x3d2tycWh2MjhhLm5vdC13ZWItcGxhdGZvcm0udGVzdII6eG4t -LW44ajZkczUzbHd3a3JxaHYyOGEueG4tLWx2ZS02bGFkLm5vdC13ZWItcGxhdGZv -cm0udGVzdIJBeG4tLW44ajZkczUzbHd3a3JxaHYyOGEueG4tLW44ajZkczUzbHd3 -a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3SCRXhuLS1uOGo2ZHM1M2x3d2tycWh2 -MjhhLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLm5vdC13ZWItcGxhdGZvcm0udGVz -dDANBgkqhkiG9w0BAQsFAAOCAQEAQTDDNYqMPF1do9cQKIFZx82wqHOPGtE2vkCG -PGPLHKlBJqAMas+3z3Y/ZPrq5XSbVx2y3ZLO7cEy7GXrfcJzq42VM7Oj0rBtgQ0/ -McOJI0k52m8itR0Sl27MIENayvTVPgG+kAOyTvec4pchOaMzjEWkbOk664ctHTnm -2LuyFQGkj3AlYU8PXzWNnMb7gTtSFZSQ5O7XO7K3aEVGu1YGf4Nz2agcDRf7zoFd -HApPDHVoonBkbd6tz6wQ5eUEH+gSjVkn4pp23TCJvC4irJcShqBFni/iP8MK/hRs -KiimowCB0FPiTWacE57lJQInswVicwhJQ24VdA3t3HFHbHlTHQ== +MIIMsjCCC5qgAwIBAgIDASwnMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEndl +Yi1wbGF0Zm9ybS10ZXN0czAeFw0yNTA0MTIwMTExNTlaFw0yNjA0MTIwMTExNTla +MBwxGjAYBgNVBAMMEXdlYi1wbGF0Zm9ybS50ZXN0MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEArehVw6R5JshTo2SZCUYJgr08JRG9NQBO6i89PknBx93d +WthyTAJM/6xJGf12LXaVzXJZLheaRb84N/fQt7GuNiukiubtlS1EWguS+2uJWiGC +QvxR5kIbqcOAj/aEsPpa/+AGNIGnSMNae58xyZgu84+u23MCl1Rpc5wX0JEcEw63 +8px46t3v6Kr3k2ps1ton8X4IHDiXDT2fdBe45D4D9h6CVjPEyz9BD7zrSqMmiRE9 +fqrcQINiDfeqP/G0KP0WCZuFPEWe72m18uOPihYTTiM5hd4jERElAD8mjldU+a4D +YLh0Nns7bncNANTd1qQNW6fwBPtM4dE9LQIpGUgT2wIDAQABo4IJ+jCCCfYwCQYD +VR0TBAIwADAdBgNVHQ4EFgQUfLz65D6JtkjQJmwYJuLMdF52XsMwHwYDVR0jBBgw +FoAUQR1Yy274mpxSgvSqvJLmVqMxDKswCwYDVR0PBAQDAgXgMBMGA1UdJQQMMAoG +CCsGAQUFBwMBMIIJhQYDVR0RBIIJfDCCCXiCEXdlYi1wbGF0Zm9ybS50ZXN0ghVu +b3Qtd2ViLXBsYXRmb3JtLnRlc3SCFXd3dy53ZWItcGxhdGZvcm0udGVzdIIWd3d3 +MS53ZWItcGxhdGZvcm0udGVzdIIWd3d3Mi53ZWItcGxhdGZvcm0udGVzdIIZd3d3 +Lm5vdC13ZWItcGxhdGZvcm0udGVzdIIZd3d3Lnd3dy53ZWItcGxhdGZvcm0udGVz +dIIad3d3Lnd3dzEud2ViLXBsYXRmb3JtLnRlc3SCGnd3dzEubm90LXdlYi1wbGF0 +Zm9ybS50ZXN0ghp3d3cyLm5vdC13ZWItcGxhdGZvcm0udGVzdIIad3d3Lnd3dzIu +d2ViLXBsYXRmb3JtLnRlc3SCGnd3dzEud3d3LndlYi1wbGF0Zm9ybS50ZXN0ghp3 +d3cyLnd3dy53ZWItcGxhdGZvcm0udGVzdIIbd3d3Mi53d3cyLndlYi1wbGF0Zm9y +bS50ZXN0ght3d3cxLnd3dzEud2ViLXBsYXRmb3JtLnRlc3SCG3d3dzEud3d3Mi53 +ZWItcGxhdGZvcm0udGVzdIIbd3d3Mi53d3cxLndlYi1wbGF0Zm9ybS50ZXN0gh13 +d3cud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVzdIIeeG4tLWx2ZS02bGFkLndlYi1w +bGF0Zm9ybS50ZXN0gh53d3cud3d3Mi5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCHnd3 +dzIud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVzdIIed3d3Lnd3dzEubm90LXdlYi1w +bGF0Zm9ybS50ZXN0gh53d3cxLnd3dy5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCH3d3 +dzEud3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCH3d3dzIud3d3Mi5ub3Qtd2Vi +LXBsYXRmb3JtLnRlc3SCH3d3dzIud3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SC +H3d3dzEud3d3Mi5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCInhuLS1sdmUtNmxhZC53 +d3cud2ViLXBsYXRmb3JtLnRlc3SCInd3dy54bi0tbHZlLTZsYWQud2ViLXBsYXRm +b3JtLnRlc3SCInhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCI3hu +LS1sdmUtNmxhZC53d3cxLndlYi1wbGF0Zm9ybS50ZXN0giN3d3cxLnhuLS1sdmUt +NmxhZC53ZWItcGxhdGZvcm0udGVzdIIjd3d3Mi54bi0tbHZlLTZsYWQud2ViLXBs +YXRmb3JtLnRlc3SCI3huLS1sdmUtNmxhZC53d3cyLndlYi1wbGF0Zm9ybS50ZXN0 +giZ4bi0tbHZlLTZsYWQud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVzdIImd3d3Lnhu +LS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCJ3huLS1sdmUtNmxhZC53 +d3cxLm5vdC13ZWItcGxhdGZvcm0udGVzdIIneG4tLWx2ZS02bGFkLnd3dzIubm90 +LXdlYi1wbGF0Zm9ybS50ZXN0gid3d3cxLnhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBs +YXRmb3JtLnRlc3SCJ3d3dzIueG4tLWx2ZS02bGFkLm5vdC13ZWItcGxhdGZvcm0u +dGVzdIIpeG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3SC +K3huLS1sdmUtNmxhZC54bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3SCLXd3 +dy54bi0tbjhqNmRzNTNsd3drcnFodjI4YS53ZWItcGxhdGZvcm0udGVzdIIteG4t +LW44ajZkczUzbHd3a3JxaHYyOGEud3d3LndlYi1wbGF0Zm9ybS50ZXN0gi14bi0t +bjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCLnhuLS1u +OGo2ZHM1M2x3d2tycWh2MjhhLnd3dzIud2ViLXBsYXRmb3JtLnRlc3SCLnd3dzIu +eG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3SCLnhuLS1u +OGo2ZHM1M2x3d2tycWh2MjhhLnd3dzEud2ViLXBsYXRmb3JtLnRlc3SCLnd3dzEu +eG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3SCL3huLS1s +dmUtNmxhZC54bi0tbHZlLTZsYWQubm90LXdlYi1wbGF0Zm9ybS50ZXN0gjF4bi0t +bjhqNmRzNTNsd3drcnFodjI4YS53d3cubm90LXdlYi1wbGF0Zm9ybS50ZXN0gjF3 +d3cueG4tLW44ajZkczUzbHd3a3JxaHYyOGEubm90LXdlYi1wbGF0Zm9ybS50ZXN0 +gjJ4bi0tbjhqNmRzNTNsd3drcnFodjI4YS53d3cxLm5vdC13ZWItcGxhdGZvcm0u +dGVzdIIyd3d3MS54bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRm +b3JtLnRlc3SCMnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnd3dzIubm90LXdlYi1w +bGF0Zm9ybS50ZXN0gjJ3d3cyLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLm5vdC13 +ZWItcGxhdGZvcm0udGVzdII2eG4tLWx2ZS02bGFkLnhuLS1uOGo2ZHM1M2x3d2ty +cWh2MjhhLndlYi1wbGF0Zm9ybS50ZXN0gjZ4bi0tbjhqNmRzNTNsd3drcnFodjI4 +YS54bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3SCOnhuLS1uOGo2ZHM1M2x3 +d2tycWh2MjhhLnhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCOnhu +LS1sdmUtNmxhZC54bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRm +b3JtLnRlc3SCQXhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnhuLS1uOGo2ZHM1M2x3 +d2tycWh2MjhhLndlYi1wbGF0Zm9ybS50ZXN0gkV4bi0tbjhqNmRzNTNsd3drcnFo +djI4YS54bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRl +c3QwDQYJKoZIhvcNAQELBQADggEBAGLHZjkPAQ6eUhUvdAlK2DPUIWRp10ponoQ5 +vtH3TXOqYgaxMCtLoJxWjaIYYtZaAxIarO3FvgFb1xrjXEY1R4iVr6lTaZTIDgnf +edhuzkQn37Zwdn+rIAv97yOashk/rh50eRftvxoUREP5aq33xue7FjofcKnmIsgp +ic8F75Uy+aL+VT9Z2rjWhIHohuJ6LTesiUbMCIKeJy2skg4nY2l39kLjvYf473Lj +h0Pl6uPoV7D2wgjk57QnWclsTJawpgIngiTOWMiqUEje3T6O2uxClFU3aI6KWvRE +jviOgVExyOsEQ3i2iaR2CcF7U1hBlsaukcqoRQLZ5Lzr1LBbo74= -----END CERTIFICATE----- diff --git a/tests/wpt/tests/tools/webdriver/webdriver/__init__.py b/tests/wpt/tests/tools/webdriver/webdriver/__init__.py index eb031849746..53e53b9ac26 100644 --- a/tests/wpt/tests/tools/webdriver/webdriver/__init__.py +++ b/tests/wpt/tests/tools/webdriver/webdriver/__init__.py @@ -1,7 +1,6 @@ # flake8: noqa from .client import ( - Cookies, Find, Session, ShadowRoot, diff --git a/tests/wpt/tests/tools/webdriver/webdriver/client.py b/tests/wpt/tests/tools/webdriver/webdriver/client.py index 97b29c64bcd..5a54bf66ac6 100644 --- a/tests/wpt/tests/tools/webdriver/webdriver/client.py +++ b/tests/wpt/tests/tools/webdriver/webdriver/client.py @@ -387,24 +387,6 @@ class Find: return self.session.send_session_command("POST", route, body) -class Cookies: - def __init__(self, session): - self.session = session - - def __getitem__(self, name): - self.session.send_session_command("GET", "cookie/%s" % name, {}) - - def __setitem__(self, name, value): - cookie = {"name": name, - "value": None} - - if isinstance(name, str): - cookie["value"] = value - elif hasattr(value, "value"): - cookie["value"] = value.value - self.session.send_session_command("POST", "cookie/%s" % name, {}) - - class UserPrompt: def __init__(self, session): self.session = session @@ -525,6 +507,9 @@ class Session: if self.session_id is None: return + if not isinstance(self.session_id, str): + raise TypeError("Session.session_id must be a str or None") + try: self.send_command("DELETE", "session/%s" % self.session_id) except (OSError, error.InvalidSessionIdException): @@ -599,6 +584,9 @@ class Session: :raises error.WebDriverException: If the remote end returns an error. """ + if not isinstance(self.session_id, str): + raise TypeError("Session.session_id must be a str to send a session command") + url = urlparse.urljoin("session/%s/" % self.session_id, uri) return self.send_command(method, url, body, timeout) @@ -679,8 +667,10 @@ class Session: def cookies(self, name=None): if name is None: url = "cookie" - else: + elif isinstance(name, str): url = "cookie/%s" % name + else: + raise TypeError("cookie name must be a str or None") return self.send_session_command("GET", url, {}) @command @@ -706,8 +696,10 @@ class Session: def delete_cookie(self, name=None): if name is None: url = "cookie" - else: + elif isinstance(name, str): url = "cookie/%s" % name + else: + raise TypeError("cookie name must be a str or None") self.send_session_command("DELETE", url, {}) #[...] @@ -784,6 +776,12 @@ class ShadowRoot: return cls(session, uuid) def send_shadow_command(self, method, uri, body=None): + if not isinstance(self.id, str): + raise TypeError("self.id must be a str") + + if not isinstance(uri, str): + raise TypeError("uri must be a str") + url = f"shadow/{self.id}/{uri}" return self.session.send_session_command(method, url, body) @@ -832,6 +830,12 @@ class WebElement: return cls(session, uuid) def send_element_command(self, method, uri, body=None): + if not isinstance(self.id, str): + raise TypeError("WebElement.id must be a str") + + if not isinstance(uri, str): + raise TypeError("uri must be a str") + url = "element/%s/%s" % (self.id, uri) return self.session.send_session_command(method, url, body) @@ -869,6 +873,9 @@ class WebElement: @command def style(self, property_name): + if not isinstance(property_name, str): + raise TypeError("property_name must be a str") + return self.send_element_command("GET", "css/%s" % property_name) @property @@ -892,6 +899,9 @@ class WebElement: @command def attribute(self, name): + if not isinstance(name, str): + raise TypeError("name must be a str") + return self.send_element_command("GET", "attribute/%s" % name) @command @@ -906,6 +916,9 @@ class WebElement: # will be overridden by this. @command def property(self, name): + if not isinstance(name, str): + raise TypeError("name must be a str") + return self.send_element_command("GET", "property/%s" % name) diff --git a/tests/wpt/tests/tools/wpt/revlist.py b/tests/wpt/tests/tools/wpt/revlist.py index e9fea305220..ef8dbf043fe 100644 --- a/tests/wpt/tests/tools/wpt/revlist.py +++ b/tests/wpt/tests/tools/wpt/revlist.py @@ -43,7 +43,7 @@ def get_tagged_revisions(pattern: str) -> Iterator[Tuple[str, str, int]]: def get_epoch_revisions(epoch: int, until: int, max_count: int) -> Iterator[str]: - # Set an offset to start to count the the weekly epoch from + # Set an offset to start to count the weekly epoch from # Monday 00:00:00. This is particularly important for the weekly epoch # because fix the start of the epoch to Monday. This offset is calculated # from Thursday, 1 January 1970 0:00:00 to Monday, 5 January 1970 0:00:00 diff --git a/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/chrome.py b/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/chrome.py index 1ef583007d4..24723734211 100644 --- a/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/chrome.py +++ b/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/chrome.py @@ -166,8 +166,9 @@ def executor_kwargs(logger, test_type, test_environment, run_info_data, subsuite blink_features = ['ViewTransitionLongCallbackTimeoutForTesting'] if kwargs["enable_mojojs"]: - blink_features = ['MojoJS', 'MojoJSTest'] - chrome_options["args"].append("--enable-blink-features=" + ','.join(blink_features)) + blink_features.extend(['MojoJS', 'MojoJSTest']) + + chrome_options["args"].append("--enable-blink-features=" + ','.join(blink_features)) if kwargs["enable_swiftshader"]: # https://chromium.googlesource.com/chromium/src/+/HEAD/docs/gpu/swiftshader.md diff --git a/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/chrome_spki_certs.py b/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/chrome_spki_certs.py index 875ae3ea4a7..f1e7df1d4c7 100644 --- a/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/chrome_spki_certs.py +++ b/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/chrome_spki_certs.py @@ -2,7 +2,7 @@ # DO NOT EDIT MANUALLY. # tools/certs/web-platform.test.pem -WPT_FINGERPRINT = '9cAz+9IkfB5eNjE005taHs+0OZkHahOazSQq3xQqQHo=' +WPT_FINGERPRINT = 'w8nmBfff+kNkigb6RX+eQYKYR50daj4tOqmfn3haN6o=' # signed-exchange/resources/127.0.0.1.sxg.pem SXG_WPT_FINGERPRINT = '0Rt4mT6SJXojEMHTnKnlJ/hBKMBcI4kteBlhR1eTTdk=' diff --git a/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/firefox.py b/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/firefox.py index b4262ace8c9..494a7514efd 100644 --- a/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/firefox.py +++ b/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/firefox.py @@ -220,7 +220,6 @@ def run_info_extras(logger, default_prefs=None, **kwargs): not bool_pref("fission.disableSessionHistoryInParent")), "swgl": bool_pref("gfx.webrender.software"), "privateBrowsing": bool_pref("browser.privatebrowsing.autostart"), - "remoteAsyncEvents": bool_pref("remote.events.async.enabled"), "incOriginInit": os.environ.get("MOZ_ENABLE_INC_ORIGIN_INIT") == "1", } rv.update(run_info_browser_version(**kwargs)) @@ -251,7 +250,6 @@ def update_properties(): "swgl", "asan", "tsan", - "remoteAsyncEvents", "sessionHistoryInParent", "subsuite"], { "os": ["version"], @@ -752,6 +750,9 @@ class ProfileCreator: if self.test_type == "wdspec": profile.set_preferences({"remote.prefs.recommended": True}) + profile.set_preferences({ + "geo.provider.network.url": "https://web-platform.test:8444/webdriver/tests/support/http_handlers/geolocation_override.py" + }) if self.debug_test: profile.set_preferences({"devtools.console.stdout.content": True}) diff --git a/tests/wpt/tests/tools/wptrunner/wptrunner/executors/actions.py b/tests/wpt/tests/tools/wptrunner/wptrunner/executors/actions.py index 10b5eeb6b94..b093b0355d3 100644 --- a/tests/wpt/tests/tools/wptrunner/wptrunner/executors/actions.py +++ b/tests/wpt/tests/tools/wptrunner/wptrunner/executors/actions.py @@ -523,6 +523,27 @@ class SetProtectedAudienceKAnonymityAction: owner, name, hashes = payload["owner"], payload["name"], payload["hashes"] return self.protocol.protected_audience.set_k_anonymity(owner, name, hashes) +class SetDisplayFeaturesAction: + name = "set_display_features" + + def __init__(self, logger, protocol): + self.logger = logger + self.protocol = protocol + + def __call__(self, payload): + features = payload["features"] + return self.protocol.display_features.set_display_features(features) + +class ClearDisplayFeaturesAction: + name = "clear_display_features" + + def __init__(self, logger, protocol): + self.logger = logger + self.protocol = protocol + + def __call__(self, payload): + return self.protocol.display_features.clear_display_features() + actions = [ClickAction, DeleteAllCookiesAction, GetAllCookiesAction, @@ -563,4 +584,6 @@ actions = [ClickAction, CreateVirtualPressureSourceAction, UpdateVirtualPressureSourceAction, RemoveVirtualPressureSourceAction, - SetProtectedAudienceKAnonymityAction] + SetProtectedAudienceKAnonymityAction, + SetDisplayFeaturesAction, + ClearDisplayFeaturesAction] diff --git a/tests/wpt/tests/tools/wptrunner/wptrunner/executors/executormarionette.py b/tests/wpt/tests/tools/wptrunner/wptrunner/executors/executormarionette.py index 110466e47ab..08bc02cbc3c 100644 --- a/tests/wpt/tests/tools/wptrunner/wptrunner/executors/executormarionette.py +++ b/tests/wpt/tests/tools/wptrunner/wptrunner/executors/executormarionette.py @@ -46,6 +46,7 @@ from .protocol import (AccessibilityProtocolPart, VirtualSensorProtocolPart, DevicePostureProtocolPart, VirtualPressureSourceProtocolPart, + DisplayFeaturesProtocolPart, merge_dicts) @@ -727,6 +728,15 @@ class MarionetteVirtualPressureSourceProtocolPart(VirtualPressureSourceProtocolP def remove_virtual_pressure_source(self, source_type): raise NotImplementedError("remove_virtual_pressure_source not yet implemented") +class MarionetteDisplayFeaturesProtocolPart(DisplayFeaturesProtocolPart): + def setup(self): + self.marionette = self.parent.marionette + + def set_display_features(self, features): + raise NotImplementedError("set_display_features not yet implemented") + + def clear_display_features(self): + raise NotImplementedError("clear_display_features not yet implemented") class MarionetteProtocol(Protocol): implements = [MarionetteBaseProtocolPart, @@ -750,7 +760,8 @@ class MarionetteProtocol(Protocol): MarionetteAccessibilityProtocolPart, MarionetteVirtualSensorProtocolPart, MarionetteDevicePostureProtocolPart, - MarionetteVirtualPressureSourceProtocolPart] + MarionetteVirtualPressureSourceProtocolPart, + MarionetteDisplayFeaturesProtocolPart] def __init__(self, executor, browser, capabilities=None, timeout_multiplier=1, e10s=True, ccov=False): do_delayed_imports() diff --git a/tests/wpt/tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py b/tests/wpt/tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py index 45ddb57c9ae..123c89c98b2 100644 --- a/tests/wpt/tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py +++ b/tests/wpt/tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py @@ -46,6 +46,7 @@ from .protocol import (BaseProtocolPart, StorageProtocolPart, VirtualPressureSourceProtocolPart, ProtectedAudienceProtocolPart, + DisplayFeaturesProtocolPart, merge_dicts) from typing import Any, List, Optional, Tuple @@ -700,6 +701,17 @@ class WebDriverProtectedAudienceProtocolPart(ProtectedAudienceProtocolPart): body = {"owner": owner, "name": name, "hashes": hashes} return self.webdriver.send_session_command("POST", "protected_audience/set_k_anonymity", body) +class WebDriverDisplayFeaturesProtocolPart(DisplayFeaturesProtocolPart): + def setup(self): + self.webdriver = self.parent.webdriver + + def set_display_features(self, features): + body = {"features": features} + return self.webdriver.send_session_command("POST", "displayfeatures", body) + + def clear_display_features(self): + return self.webdriver.send_session_command("DELETE", "displayfeatures") + class WebDriverProtocol(Protocol): enable_bidi = False implements = [WebDriverBaseProtocolPart, @@ -724,7 +736,8 @@ class WebDriverProtocol(Protocol): WebDriverDevicePostureProtocolPart, WebDriverStorageProtocolPart, WebDriverVirtualPressureSourceProtocolPart, - WebDriverProtectedAudienceProtocolPart] + WebDriverProtectedAudienceProtocolPart, + WebDriverDisplayFeaturesProtocolPart] def __init__(self, executor, browser, capabilities, **kwargs): super().__init__(executor, browser) diff --git a/tests/wpt/tests/tools/wptrunner/wptrunner/executors/protocol.py b/tests/wpt/tests/tools/wptrunner/wptrunner/executors/protocol.py index 5190b266401..7630fe1f358 100644 --- a/tests/wpt/tests/tools/wptrunner/wptrunner/executors/protocol.py +++ b/tests/wpt/tests/tools/wptrunner/wptrunner/executors/protocol.py @@ -1025,3 +1025,17 @@ class ProtectedAudienceProtocolPart(ProtocolPart): @abstractmethod def set_k_anonymity(self, owner, name, hashes): pass + +class DisplayFeaturesProtocolPart(ProtocolPart): + """Protocol part for Display Features/Viewport Segments""" + __metaclass__ = ABCMeta + + name = "display_features" + + @abstractmethod + def set_display_features(self, features): + pass + + @abstractmethod + def clear_display_features(self): + pass diff --git a/tests/wpt/tests/tools/wptrunner/wptrunner/testdriver-extra.js b/tests/wpt/tests/tools/wptrunner/wptrunner/testdriver-extra.js index 5d37cf5e15f..d83ba4192eb 100644 --- a/tests/wpt/tests/tools/wptrunner/wptrunner/testdriver-extra.js +++ b/tests/wpt/tests/tools/wptrunner/wptrunner/testdriver-extra.js @@ -480,5 +480,13 @@ owner, name, hashes, context=null) { return create_context_action( 'set_protected_audience_k_anonymity', context, {owner, name, hashes}); + }; + + window.test_driver_internal.set_display_features = function(features, context=null) { + return create_context_action("set_display_features", context, {features}); + }; + + window.test_driver_internal.clear_display_features = function(context=null) { + return create_context_action("clear_display_features", context, {}); } })(); diff --git a/tests/wpt/tests/user-timing/measure-l3.any.js b/tests/wpt/tests/user-timing/measure-l3.any.js index 642b55ab635..13511dfbf49 100644 --- a/tests/wpt/tests/user-timing/measure-l3.any.js +++ b/tests/wpt/tests/user-timing/measure-l3.any.js @@ -32,4 +32,4 @@ test(function() { const measureEntry = performance.measure("A", "mark", "mark"); assert_equals(endTime(measureEntry), markEntry.startTime); assert_equals(measureEntry.startTime, markEntry.startTime); -}, "When start and end mark are both given, the start time and end time of the measure entry should be the the marks' time, repectively"); +}, "When start and end mark are both given, the start time and end time of the measure entry should be the marks' time, repectively"); diff --git a/tests/wpt/tests/video-rvfc/request-video-frame-callback-during-xr-session.https.html b/tests/wpt/tests/video-rvfc/request-video-frame-callback-during-xr-session.https.html index d5f69ec285c..0c881472547 100644 --- a/tests/wpt/tests/video-rvfc/request-video-frame-callback-during-xr-session.https.html +++ b/tests/wpt/tests/video-rvfc/request-video-frame-callback-during-xr-session.https.html @@ -16,7 +16,7 @@ let testFunction = async function(session, fakeDeviceController, t) { let eventWatcher = new EventWatcher(t, session, ["end", "watcherdone"]); let eventPromise = eventWatcher.wait_for(["end", "watcherdone"]); - // Start the video.rVFC callbacks while we are in the the XR Session. + // Start the video.rVFC callbacks while we are in the XR Session. let video = document.createElement('video'); video.muted = true; video.src = getVideoURI('/media/movie_5'); diff --git a/tests/wpt/tests/wai-aria/scripts/ATTAcomm.js b/tests/wpt/tests/wai-aria/scripts/ATTAcomm.js index b748233fc22..61ce6e5e6f1 100644 --- a/tests/wpt/tests/wai-aria/scripts/ATTAcomm.js +++ b/tests/wpt/tests/wai-aria/scripts/ATTAcomm.js @@ -192,7 +192,7 @@ ATTAcomm.prototype = { /* Loop strategy... * - * If the the step is a 'test' then push it into the pending queue as a promise + * If the step is a 'test' then push it into the pending queue as a promise * * If the step is anything else, then if there is anything in pending, wait on it * Once it resolves, clear the queue and then execute the other step. diff --git a/tests/wpt/tests/wasm/core/js/harness/testharness.js b/tests/wpt/tests/wasm/core/js/harness/testharness.js index fdd87e8fc2a..7c1ded21d0e 100644 --- a/tests/wpt/tests/wasm/core/js/harness/testharness.js +++ b/tests/wpt/tests/wasm/core/js/harness/testharness.js @@ -132,7 +132,7 @@ policies and contribution forms [3]. }; WindowTestEnvironment.prototype._forEach_windows = function(callback) { - // Iterate of the the windows [self ... top, opener]. The callback is passed + // Iterate of the windows [self ... top, opener]. The callback is passed // two objects, the first one is the windows object itself, the second one // is a boolean indicating whether or not its on the same origin as the // current window. diff --git a/tests/wpt/tests/web-animations/README.md b/tests/wpt/tests/web-animations/README.md index c41e0e048ef..7526978c1f8 100644 --- a/tests/wpt/tests/web-animations/README.md +++ b/tests/wpt/tests/web-animations/README.md @@ -92,7 +92,7 @@ Guidelines for writing tests the test should be at least 100s in length. * Avoid using `GLOBAL_CONSTS` that make the test harder to read. - It's fine to repeat the the same parameter values like `100 * MS_PER_SEC` + It's fine to repeat the same parameter values like `100 * MS_PER_SEC` over and over again since it makes it easy to read and debug a test in isolation. Remember, even if we do need to make all tests take, say 200s each, text diff --git a/tests/wpt/tests/web-animations/animation-model/keyframe-effects/effect-value-context-filling.html b/tests/wpt/tests/web-animations/animation-model/keyframe-effects/effect-value-context-filling.html index fcb7f131266..499a779b87f 100644 --- a/tests/wpt/tests/web-animations/animation-model/keyframe-effects/effect-value-context-filling.html +++ b/tests/wpt/tests/web-animations/animation-model/keyframe-effects/effect-value-context-filling.html @@ -134,7 +134,7 @@ test(t => { '300px', 'Effect value after updating the animation' ); -}, 'Filling effect values reflect changes to the the animation\'s keyframes'); +}, 'Filling effect values reflect changes to the animation\'s keyframes'); test(t => { const div = createDiv(t); @@ -157,7 +157,7 @@ test(t => { '300px', 'Effect value after updating the composite mode' ); -}, 'Filling effect values reflect changes to the the animation\'s composite mode'); +}, 'Filling effect values reflect changes to the animation\'s composite mode'); test(t => { const div = createDiv(t); @@ -179,7 +179,7 @@ test(t => { '200px', 'Effect value after updating the iteration composite mode' ); -}, 'Filling effect values reflect changes to the the animation\'s iteration composite mode'); +}, 'Filling effect values reflect changes to the animation\'s iteration composite mode'); test(t => { const div = createDiv(t); diff --git a/tests/wpt/tests/webaudio/resources/audionodeoptions.js b/tests/wpt/tests/webaudio/resources/audionodeoptions.js index 3b7867cabf1..ef2dab672b3 100644 --- a/tests/wpt/tests/webaudio/resources/audionodeoptions.js +++ b/tests/wpt/tests/webaudio/resources/audionodeoptions.js @@ -104,7 +104,7 @@ function testAudioNodeOptions(should, context, nodeName, expectedNodeOptions) { .throw(DOMException, expectedNodeOptions.channelCountMode.exceptionType); } else { - // Test that explicitly setting the the fixed value is allowed. + // Test that explicitly setting the fixed value is allowed. should( () => { node = new window[nodeName]( diff --git a/tests/wpt/tests/webaudio/the-audio-api/the-audioparam-interface/automation-rate-testing.js b/tests/wpt/tests/webaudio/the-audio-api/the-audioparam-interface/automation-rate-testing.js index 43279f91d68..e06a1d45614 100644 --- a/tests/wpt/tests/webaudio/the-audio-api/the-audioparam-interface/automation-rate-testing.js +++ b/tests/wpt/tests/webaudio/the-audio-api/the-audioparam-interface/automation-rate-testing.js @@ -40,7 +40,7 @@ // channel 3, the difference between the outputs. // // Success is declared if the difference signal is not exactly zero. This means -// the the automations did different things, as expected. +// the automations did different things, as expected. // // The promise from |startRendering| is returned. function doTest(context, should, options) { diff --git a/tests/wpt/tests/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html b/tests/wpt/tests/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html index 56d0787b767..1099ee8d244 100644 --- a/tests/wpt/tests/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html +++ b/tests/wpt/tests/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html @@ -3,7 +3,7 @@ <!-- Tests that a create MediaElementSourceNode that is passed through a script processor passes the stream data. -The the script processor saves the input buffers it gets to a temporary +The script processor saves the input buffers it gets to a temporary array, and after the playback has stopped, the contents are compared to those of a loaded AudioBuffer with the same source. diff --git a/tests/wpt/tests/webcodecs/image-decoder.https.any.js b/tests/wpt/tests/webcodecs/image-decoder.https.any.js index 1b3fabbfc4a..9ca28e49c4a 100644 --- a/tests/wpt/tests/webcodecs/image-decoder.https.any.js +++ b/tests/wpt/tests/webcodecs/image-decoder.https.any.js @@ -310,7 +310,7 @@ promise_test(t => { assert_equals(result.image.displayHeight, 240); assert_equals(result.image.timestamp, 0); - // Swap to the the other track. + // Swap to the other track. let newIndex = (decoder.tracks.selectedIndex + 1) % 2; decoder.tracks[newIndex].selected = true; return decoder.decode() diff --git a/tests/wpt/tests/webdriver/tests/bidi/browsing_context/context_destroyed/context_destroyed.py b/tests/wpt/tests/webdriver/tests/bidi/browsing_context/context_destroyed/context_destroyed.py index 8492a4c1a96..2fd0cd6bb47 100644 --- a/tests/wpt/tests/webdriver/tests/bidi/browsing_context/context_destroyed/context_destroyed.py +++ b/tests/wpt/tests/webdriver/tests/bidi/browsing_context/context_destroyed/context_destroyed.py @@ -379,7 +379,7 @@ async def test_client_window(bidi_session, wait_for_event, wait_for_future_safe, assert_browsing_context( context_info, top_level_context["context"], - children=None, + children=0, url="about:blank", parent=None, user_context="default", diff --git a/tests/wpt/tests/webdriver/tests/bidi/emulation/set_geolocation_override/__init__.py b/tests/wpt/tests/webdriver/tests/bidi/emulation/set_geolocation_override/__init__.py index 56b5a075d93..33dcca90f04 100644 --- a/tests/wpt/tests/webdriver/tests/bidi/emulation/set_geolocation_override/__init__.py +++ b/tests/wpt/tests/webdriver/tests/bidi/emulation/set_geolocation_override/__init__.py @@ -16,9 +16,10 @@ async def get_current_geolocation(bidi_session, context): function_declaration="""() => new Promise( resolve => window.navigator.geolocation.getCurrentPosition( - position => resolve(position.coords.toJSON()) - ) - ) + position => resolve(position.coords.toJSON()), + error => resolve({code: error.code, message: error.message}), + {timeout: 500} + )) """, target=ContextTarget(context["context"]), await_promise=True, diff --git a/tests/wpt/tests/webdriver/tests/bidi/emulation/set_geolocation_override/conftest.py b/tests/wpt/tests/webdriver/tests/bidi/emulation/set_geolocation_override/conftest.py index c986271d05b..a90895c74ed 100644 --- a/tests/wpt/tests/webdriver/tests/bidi/emulation/set_geolocation_override/conftest.py +++ b/tests/wpt/tests/webdriver/tests/bidi/emulation/set_geolocation_override/conftest.py @@ -7,7 +7,7 @@ from ... import get_context_origin async def set_geolocation_permission(bidi_session): data_to_cleanup = {} - async def set_geolocation_permission(context, user_context=None): + async def set_geolocation_permission(context, user_context="default"): nonlocal data_to_cleanup origin = await get_context_origin(bidi_session, context) diff --git a/tests/wpt/tests/webdriver/tests/bidi/emulation/set_geolocation_override/contexts.py b/tests/wpt/tests/webdriver/tests/bidi/emulation/set_geolocation_override/contexts.py index ea9adabc161..8a0e43475da 100644 --- a/tests/wpt/tests/webdriver/tests/bidi/emulation/set_geolocation_override/contexts.py +++ b/tests/wpt/tests/webdriver/tests/bidi/emulation/set_geolocation_override/contexts.py @@ -99,7 +99,9 @@ async def test_multiple_contexts( contexts=[new_tab["context"], new_context["context"]], coordinates=None ) - assert await get_current_geolocation(bidi_session, new_tab) == default_coordinates + # The new coordinates can be different from the initial ones if the position + # was not available at the beginning. + assert await get_current_geolocation(bidi_session, new_tab) != TEST_COORDINATES assert ( - await get_current_geolocation(bidi_session, new_context) == default_coordinates + await get_current_geolocation(bidi_session, new_context) != TEST_COORDINATES ) diff --git a/tests/wpt/tests/webdriver/tests/support/http_handlers/geolocation_override.py b/tests/wpt/tests/webdriver/tests/support/http_handlers/geolocation_override.py new file mode 100644 index 00000000000..038e947f7aa --- /dev/null +++ b/tests/wpt/tests/webdriver/tests/support/http_handlers/geolocation_override.py @@ -0,0 +1,16 @@ +import json + + +def main(request, response): + response.headers.set(b"Content-Type", b"application/json") + response.headers.set(b"Cache-Control", b"no-cache") + response.content = json.dumps( + { + "status": "OK", + "location": { + "lat": 37.41857, + "lng": -122.08769, + }, + "accuracy": 42, + } + ).encode("utf-8") diff --git a/tests/wpt/tests/webnn/conformance_tests/ceil.https.any.js b/tests/wpt/tests/webnn/conformance_tests/ceil.https.any.js index 7f31a80ce7a..7d487dd65fa 100644 --- a/tests/wpt/tests/webnn/conformance_tests/ceil.https.any.js +++ b/tests/wpt/tests/webnn/conformance_tests/ceil.https.any.js @@ -57,7 +57,8 @@ const ceilTests = [ 69.71428680419922, 5.0031023025512695, 84.36833953857422, -9.390542030334473, -27.856616973876953, -34.895931243896484 ], - 'descriptor': {shape: [24], dataType: 'float32'} + 'descriptor': {shape: [24], dataType: 'float32'}, + 'constant': true } }, 'operators': [{ @@ -278,7 +279,8 @@ const ceilTests = [ -5.6171875, 61.53125, -87.8125, 69.6875, 5.00390625, 84.375, -9.390625, -27.859375, -34.90625 ], - 'descriptor': {shape: [24], dataType: 'float16'} + 'descriptor': {shape: [24], dataType: 'float16'}, + 'constant': true } }, 'operators': [{ diff --git a/tests/wpt/tests/webnn/conformance_tests/conv_transpose2d.https.any.js b/tests/wpt/tests/webnn/conformance_tests/conv_transpose2d.https.any.js index 3a2ac69effe..67ce5dbaf65 100644 --- a/tests/wpt/tests/webnn/conformance_tests/conv_transpose2d.https.any.js +++ b/tests/wpt/tests/webnn/conformance_tests/conv_transpose2d.https.any.js @@ -1476,6 +1476,108 @@ const convTranspose2dTests = [ } } } + }, + { + 'name': 'convTranspose2d same output size different padding (padding=1, outputPadding=0))', + 'graph': { + 'inputs': { + 'convTranspose2dInput': { + 'data': [ + 1, 2, 3, + 4, 5, 6, + 7, 8, 9 + ], + 'descriptor': {shape: [1, 1, 3, 3], dataType: 'float32'} + }, + 'convTranspose2dFilter': { + 'data': [ + 1, 1, 1, + 1, 1, 1, + 1, 1, 1 + ], + 'descriptor': {shape: [1, 1, 3, 3], dataType: 'float32'}, + 'constant': true + } + }, + 'operators': [{ + 'name': 'convTranspose2d', + 'arguments': [ + {'input': 'convTranspose2dInput'}, + {'filter': 'convTranspose2dFilter'}, + {'options': { + 'strides': [3, 3], + 'padding': [1, 1, 1, 1], + 'outputPadding': [0, 0] + }} + ], + 'outputs': 'convTranspose2dOutput' + }], + 'expectedOutputs': { + 'convTranspose2dOutput': { + 'data': [ + 1, 1, 2, 2, 2, 3, 3, + 1, 1, 2, 2, 2, 3, 3, + 4, 4, 5, 5, 5, 6, 6, + 4, 4, 5, 5, 5, 6, 6, + 4, 4, 5, 5, 5, 6, 6, + 7, 7, 8, 8, 8, 9, 9, + 7, 7, 8, 8, 8, 9, 9 + ], + 'descriptor': {shape: [1, 1, 7, 7], dataType: 'float32'} + } + } + } + }, + { + 'name': 'convTranspose2d same output size different padding (padding=2, outputPadding=2))', + 'graph': { + 'inputs': { + 'convTranspose2dInput': { + 'data': [ + 1, 2, 3, + 4, 5, 6, + 7, 8, 9 + ], + 'descriptor': {shape: [1, 1, 3, 3], dataType: 'float32'} + }, + 'convTranspose2dFilter': { + 'data': [ + 1, 1, 1, + 1, 1, 1, + 1, 1, 1 + ], + 'descriptor': {shape: [1, 1, 3, 3], dataType: 'float32'}, + 'constant': true + } + }, + 'operators': [{ + 'name': 'convTranspose2d', + 'arguments': [ + {'input': 'convTranspose2dInput'}, + {'filter': 'convTranspose2dFilter'}, + {'options': { + 'strides': [3, 3], + 'padding': [2, 2, 2, 2], + 'outputPadding': [2, 2] + }} + ], + 'outputs': 'convTranspose2dOutput' + }], + 'expectedOutputs': { + 'convTranspose2dOutput': { + 'data': [ + 1, 2, 2, 2, 3, 3, 3, + 4, 5, 5, 5, 6, 6, 6, + 4, 5, 5, 5, 6, 6, 6, + 4, 5, 5, 5, 6, 6, 6, + 7, 8, 8, 8, 9, 9, 9, + 7, 8, 8, 8, 9, 9, 9, + 7, 8, 8, 8, 9, 9, 9 + ], + 'descriptor': {shape: [1, 1, 7, 7], dataType: 'float32'} + } + } + } } ]; diff --git a/tests/wpt/tests/webrtc/RTCCertificate.html b/tests/wpt/tests/webrtc/RTCCertificate.html index 6b7626c92e7..2662580c959 100644 --- a/tests/wpt/tests/webrtc/RTCCertificate.html +++ b/tests/wpt/tests/webrtc/RTCCertificate.html @@ -146,7 +146,7 @@ 5.5.1 The RTCDtlsFingerprint Dictionary algorithm of type DOMString - One of the the hash function algorithms defined in the 'Hash function + One of the hash function algorithms defined in the 'Hash function Textual Names' registry, initially specified in [RFC4572] Section 8. As noted in [JSEP] Section 5.2.1, the digest algorithm used for the fingerprint matches that used in the certificate signature. diff --git a/tests/wpt/tests/webxr/depth-sensing/depth_sensing_attributes_throw_not_enabled.https.html b/tests/wpt/tests/webxr/depth-sensing/depth_sensing_attributes_throw_not_enabled.https.html new file mode 100644 index 00000000000..43adba74a04 --- /dev/null +++ b/tests/wpt/tests/webxr/depth-sensing/depth_sensing_attributes_throw_not_enabled.https.html @@ -0,0 +1,54 @@ +<!DOCTYPE html> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="../resources/webxr_util.js"></script> +<script src="../resources/webxr_test_constants.js"></script> + +<script> + +const testFunctionDepthUsage = function (session, controller, t) { + t.step(() => { + assert_throws_dom("InvalidStateError", () => session.depthUsage, + "session.depthUsage should throw when depth sensing is disabled"); + }); + + return Promise.resolve(); +}; + +const testFunctionDepthDataFormat = function (session, controller, t) { + t.step(() => { + assert_throws_dom("InvalidStateError", () => session.depthDataFormat, + "session.depthDataFormat should throw when depth sensing is disabled"); + }); + + return Promise.resolve(); +}; + +const testFunctionDepthType = function (session, controller, t) { + t.step(() => { + assert_throws_dom("InvalidStateError", () => session.depthType, + "session.depthType should throw when depth sensing is disabled"); + }); + + return Promise.resolve(); +}; + +xr_session_promise_test( + "XRSession.depthUsage rejects if depth sensing is not enabled on a session", + testFunctionDepthUsage, + IMMERSIVE_AR_DEVICE, + 'immersive-ar'); + +xr_session_promise_test( + "XRSession.depthDataFormat rejects if depth sensing is not enabled on a session", + testFunctionDepthDataFormat, + IMMERSIVE_AR_DEVICE, + 'immersive-ar'); + +xr_session_promise_test( + "XRSession.depthType rejects if depth sensing is not enabled on a session", + testFunctionDepthType, + IMMERSIVE_AR_DEVICE, + 'immersive-ar'); + +</script> diff --git a/tests/wpt/tests/webxr/depth-sensing/depth_type_request_respected.https.html b/tests/wpt/tests/webxr/depth-sensing/depth_type_request_respected.https.html new file mode 100644 index 00000000000..2846c9ce10b --- /dev/null +++ b/tests/wpt/tests/webxr/depth-sensing/depth_type_request_respected.https.html @@ -0,0 +1,74 @@ +<!DOCTYPE html> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="../resources/webxr_util.js"></script> +<script src="../resources/webxr_test_constants.js"></script> + +<script> + +const depthTypeFunctionGenerator = function(expectedSessionDepthType) { + return (session, controller, t) => new Promise((resolve) => { + t.step(()=> { + assert_true(session.depthType === expectedSessionDepthType); + }); + + resolve(); + }); +} + +xr_session_promise_test( + "Can grant sessions that request a raw depth type", + depthTypeFunctionGenerator("raw"), + IMMERSIVE_AR_DEVICE, + 'immersive-ar', + { + 'requiredFeatures': ['depth-sensing'], + depthSensing: { + usagePreference: [], + dataFormatPreference: [], + depthTypeRequest: ["raw", "smooth"], + }, + }); + +xr_session_promise_test( + "Can grant sessions that request a smooth depth type", + depthTypeFunctionGenerator("smooth"), + IMMERSIVE_AR_DEVICE, + 'immersive-ar', + { + 'requiredFeatures': ['depth-sensing'], + depthSensing: { + usagePreference: [], + dataFormatPreference: [], + depthTypeRequest: ["smooth", "raw"], + }, + }); + +xr_session_promise_test( + "Can grant sessions that request empty depth type", + depthTypeFunctionGenerator(null), + IMMERSIVE_AR_DEVICE, + 'immersive-ar', + { + 'requiredFeatures': ['depth-sensing'], + depthSensing: { + usagePreference: [], + dataFormatPreference: [], + depthTypeRequest: [], + }, + }); + +xr_session_promise_test( + "Can grant sessions that don't request depth type", + depthTypeFunctionGenerator(null), + IMMERSIVE_AR_DEVICE, + 'immersive-ar', + { + 'requiredFeatures': ['depth-sensing'], + depthSensing: { + usagePreference: [], + dataFormatPreference: [] + }, + }); + +</script> diff --git a/tests/wpt/webgl/meta/conformance/textures/misc/texture-upload-size.html.ini b/tests/wpt/webgl/meta/conformance/textures/misc/texture-upload-size.html.ini index 435cfbe0d5c..37602dbc1f6 100644 --- a/tests/wpt/webgl/meta/conformance/textures/misc/texture-upload-size.html.ini +++ b/tests/wpt/webgl/meta/conformance/textures/misc/texture-upload-size.html.ini @@ -13,3 +13,6 @@ [WebGL test #588] expected: FAIL + + [WebGL test #52] + expected: FAIL |