aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock44
-rw-r--r--components/constellation/constellation.rs31
-rw-r--r--components/net/tests/fetch.rs2
-rw-r--r--components/net/tests/test.css3
-rw-r--r--components/script/dom/element.rs47
-rw-r--r--components/script/dom/htmlelement.rs2
-rw-r--r--components/script/dom/node.rs9
-rw-r--r--components/script/dom/raredata.rs7
-rw-r--r--components/script/dom/windowproxy.rs37
-rw-r--r--components/script/layout_dom/element.rs30
-rw-r--r--components/script/layout_dom/node.rs8
-rw-r--r--components/script/webdriver_handlers.rs30
-rw-r--r--components/script_bindings/webidls/Element.webidl5
-rw-r--r--components/shared/embedder/webdriver.rs15
-rw-r--r--components/webdriver_server/lib.rs35
-rw-r--r--ports/servoshell/desktop/app_state.rs12
-rw-r--r--python/wpt/run.py2
-rw-r--r--resources/ahem.css4
-rw-r--r--resources/ahem/AHEM____.TTFbin12480 -> 0 bytes
-rw-r--r--resources/ahem/Ahem.ps1
-rw-r--r--resources/ahem/Ahem.sitbin4793 -> 0 bytes
-rw-r--r--resources/ahem/COPIED-FROM1
-rw-r--r--resources/ahem/COPYING36
-rw-r--r--resources/ahem/README30
-rw-r--r--tests/wpt/include.ini2
-rw-r--r--tests/wpt/meta/css/css-align/blocks/align-content-block-002.html.ini1
-rw-r--r--tests/wpt/meta/css/css-pseudo/parsing/highlight-pseudos.html.ini3
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/all-hosts.html.ini6
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/animation-part.html.ini2
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/complex-matching.html.ini3
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/grouping-with-checked.html.ini9
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/grouping-with-disabled.html.ini12
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/host-part-001.html.ini3
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/host-part-002.html.ini3
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/host-part-nesting.html.ini3
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/idlharness.html.ini12
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/inner-host.html.ini3
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/interaction-with-pseudo-elements.html.ini9
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/invalidation-change-part-name-idl-domtokenlist.html.ini3
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/invalidation-change-part-name-idl-setter.html.ini3
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/invalidation-complex-selector.html.ini3
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/multiple-parts.html.ini3
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/part-name-idl.html.ini12
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/part-nested-pseudo.html.ini2
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/pseudo-classes-after-part.html.ini99
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/pseudo-elements-after-part.html.ini27
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/serialization.html.ini9
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/simple-inline.html.ini3
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/simple.html.ini3
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/style-sharing.html.ini3
-rw-r--r--tests/wpt/meta/css/selectors/invalidation/part-pseudo.html.ini2
-rw-r--r--tests/wpt/meta/css/selectors/parsing/parse-is-where.html.ini12
-rw-r--r--tests/wpt/meta/css/selectors/parsing/parse-part.html.ini57
-rw-r--r--tests/wpt/meta/reporting/cross-origin-report-no-credentials.https.sub.html.ini3
-rw-r--r--tests/wpt/meta/reporting/cross-origin-reports-isolated.https.sub.html.ini3
-rw-r--r--tests/wpt/meta/reporting/cross-origin-same-site-credentials.https.sub.html.ini3
-rw-r--r--tests/wpt/meta/reporting/document-reporting-bypass-report-to.https.sub.html.ini6
-rw-r--r--tests/wpt/meta/reporting/document-reporting-destroy-after-document-close.https.sub.html.ini3
-rw-r--r--tests/wpt/meta/reporting/document-reporting-named-endpoints.https.sub.html.ini9
-rw-r--r--tests/wpt/meta/reporting/document-reporting-not-batch-different-document.https.html.ini3
-rw-r--r--tests/wpt/meta/reporting/document-reporting-override-endpoint.https.sub.html.ini6
-rw-r--r--tests/wpt/meta/reporting/idlharness.any.js.ini158
-rw-r--r--tests/wpt/meta/reporting/reporting-isolated-across-navigations.https.sub.html.ini3
-rw-r--r--tests/wpt/meta/reporting/same-origin-cross-site-credentials.https.sub.html.ini3
-rw-r--r--tests/wpt/meta/reporting/same-origin-report-credentials.https.sub.html.ini3
-rw-r--r--tests/wpt/meta/reporting/same-origin-same-site-credentials.https.sub.html.ini3
-rw-r--r--tests/wpt/meta/shadow-dom/offsetParent-across-shadow-boundaries.html.ini6
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_click/click.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_click/shadow_dom.py.ini9
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_send_keys/interactability.py.ini9
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_send_keys/send_keys.py.ini2
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/find_element_from_element/find.py.ini24
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_computed_role/get.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_element_attribute/get.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_element_css_value/get.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_element_property/get.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_element_rect/get.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_element_shadow_root/get.py.ini30
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_element_tag_name/get.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_element_text/get.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/is_element_enabled/enabled.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/is_element_selected/selected.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/new_window/new.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/new_window/new_tab.py.ini6
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/new_window/new_window.py.ini6
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/key.py.ini13
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_origin.py.ini6
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/switch_to_frame/switch.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/take_screenshot/screenshot.py.ini3
-rw-r--r--tests/wpt/mozilla/meta/MANIFEST.json4
-rw-r--r--tests/wpt/mozilla/tests/css/css/ahem.css6
-rw-r--r--tests/wpt/mozilla/tests/mozilla/resources/no_mime_type.py2
92 files changed, 447 insertions, 624 deletions
diff --git a/Cargo.lock b/Cargo.lock
index b628ab3bfe3..8bedbdda50c 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1070,7 +1070,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c"
dependencies = [
"lazy_static",
- "windows-sys 0.59.0",
+ "windows-sys 0.48.0",
]
[[package]]
@@ -2025,7 +2025,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18"
dependencies = [
"libc",
- "windows-sys 0.59.0",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -2599,7 +2599,7 @@ dependencies = [
"gobject-sys",
"libc",
"system-deps",
- "windows-sys 0.59.0",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -4051,7 +4051,7 @@ checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9"
dependencies = [
"hermit-abi 0.5.0",
"libc",
- "windows-sys 0.59.0",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -4313,7 +4313,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667"
dependencies = [
"cfg-if",
- "windows-targets 0.52.6",
+ "windows-targets 0.48.5",
]
[[package]]
@@ -6308,7 +6308,7 @@ dependencies = [
"errno",
"libc",
"linux-raw-sys",
- "windows-sys 0.59.0",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -6653,7 +6653,7 @@ dependencies = [
[[package]]
name = "selectors"
version = "0.28.0"
-source = "git+https://github.com/servo/stylo?branch=2025-05-01#945b70e9a1984cd44ee56b7a674c302b19a4f620"
+source = "git+https://github.com/servo/stylo?branch=2025-05-01#2954cec3ae951723f9b346d8720010d30072b725"
dependencies = [
"bitflags 2.9.1",
"cssparser",
@@ -6948,7 +6948,7 @@ dependencies = [
[[package]]
name = "servo_arc"
version = "0.4.1"
-source = "git+https://github.com/servo/stylo?branch=2025-05-01#945b70e9a1984cd44ee56b7a674c302b19a4f620"
+source = "git+https://github.com/servo/stylo?branch=2025-05-01#2954cec3ae951723f9b346d8720010d30072b725"
dependencies = [
"serde",
"stable_deref_trait",
@@ -7409,7 +7409,7 @@ dependencies = [
[[package]]
name = "stylo"
version = "0.3.0"
-source = "git+https://github.com/servo/stylo?branch=2025-05-01#945b70e9a1984cd44ee56b7a674c302b19a4f620"
+source = "git+https://github.com/servo/stylo?branch=2025-05-01#2954cec3ae951723f9b346d8720010d30072b725"
dependencies = [
"app_units",
"arrayvec",
@@ -7467,7 +7467,7 @@ dependencies = [
[[package]]
name = "stylo_atoms"
version = "0.3.0"
-source = "git+https://github.com/servo/stylo?branch=2025-05-01#945b70e9a1984cd44ee56b7a674c302b19a4f620"
+source = "git+https://github.com/servo/stylo?branch=2025-05-01#2954cec3ae951723f9b346d8720010d30072b725"
dependencies = [
"string_cache",
"string_cache_codegen",
@@ -7476,12 +7476,12 @@ dependencies = [
[[package]]
name = "stylo_config"
version = "0.3.0"
-source = "git+https://github.com/servo/stylo?branch=2025-05-01#945b70e9a1984cd44ee56b7a674c302b19a4f620"
+source = "git+https://github.com/servo/stylo?branch=2025-05-01#2954cec3ae951723f9b346d8720010d30072b725"
[[package]]
name = "stylo_derive"
version = "0.3.0"
-source = "git+https://github.com/servo/stylo?branch=2025-05-01#945b70e9a1984cd44ee56b7a674c302b19a4f620"
+source = "git+https://github.com/servo/stylo?branch=2025-05-01#2954cec3ae951723f9b346d8720010d30072b725"
dependencies = [
"darling",
"proc-macro2",
@@ -7493,7 +7493,7 @@ dependencies = [
[[package]]
name = "stylo_dom"
version = "0.3.0"
-source = "git+https://github.com/servo/stylo?branch=2025-05-01#945b70e9a1984cd44ee56b7a674c302b19a4f620"
+source = "git+https://github.com/servo/stylo?branch=2025-05-01#2954cec3ae951723f9b346d8720010d30072b725"
dependencies = [
"bitflags 2.9.1",
"stylo_malloc_size_of",
@@ -7502,7 +7502,7 @@ dependencies = [
[[package]]
name = "stylo_malloc_size_of"
version = "0.3.0"
-source = "git+https://github.com/servo/stylo?branch=2025-05-01#945b70e9a1984cd44ee56b7a674c302b19a4f620"
+source = "git+https://github.com/servo/stylo?branch=2025-05-01#2954cec3ae951723f9b346d8720010d30072b725"
dependencies = [
"app_units",
"cssparser",
@@ -7519,12 +7519,12 @@ dependencies = [
[[package]]
name = "stylo_static_prefs"
version = "0.3.0"
-source = "git+https://github.com/servo/stylo?branch=2025-05-01#945b70e9a1984cd44ee56b7a674c302b19a4f620"
+source = "git+https://github.com/servo/stylo?branch=2025-05-01#2954cec3ae951723f9b346d8720010d30072b725"
[[package]]
name = "stylo_traits"
version = "0.3.0"
-source = "git+https://github.com/servo/stylo?branch=2025-05-01#945b70e9a1984cd44ee56b7a674c302b19a4f620"
+source = "git+https://github.com/servo/stylo?branch=2025-05-01#2954cec3ae951723f9b346d8720010d30072b725"
dependencies = [
"app_units",
"bitflags 2.9.1",
@@ -7698,7 +7698,7 @@ dependencies = [
"getrandom 0.2.16",
"once_cell",
"rustix",
- "windows-sys 0.59.0",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -7933,7 +7933,7 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
name = "to_shmem"
version = "0.2.0"
-source = "git+https://github.com/servo/stylo?branch=2025-05-01#945b70e9a1984cd44ee56b7a674c302b19a4f620"
+source = "git+https://github.com/servo/stylo?branch=2025-05-01#2954cec3ae951723f9b346d8720010d30072b725"
dependencies = [
"cssparser",
"servo_arc",
@@ -7946,7 +7946,7 @@ dependencies = [
[[package]]
name = "to_shmem_derive"
version = "0.1.0"
-source = "git+https://github.com/servo/stylo?branch=2025-05-01#945b70e9a1984cd44ee56b7a674c302b19a4f620"
+source = "git+https://github.com/servo/stylo?branch=2025-05-01#2954cec3ae951723f9b346d8720010d30072b725"
dependencies = [
"darling",
"proc-macro2",
@@ -8745,9 +8745,9 @@ dependencies = [
[[package]]
name = "web_atoms"
-version = "0.1.2"
+version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b9c5f0bc545ea3b20b423e33b9b457764de0b3730cd957f6c6aa6c301785f6e"
+checksum = "57ffde1dc01240bdf9992e3205668b235e59421fd085e8a317ed98da0178d414"
dependencies = [
"phf",
"phf_codegen",
@@ -9132,7 +9132,7 @@ version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
dependencies = [
- "windows-sys 0.59.0",
+ "windows-sys 0.48.0",
]
[[package]]
diff --git a/components/constellation/constellation.rs b/components/constellation/constellation.rs
index 5b4d244e746..82f55589686 100644
--- a/components/constellation/constellation.rs
+++ b/components/constellation/constellation.rs
@@ -4702,25 +4702,38 @@ where
WebDriverCommandMsg::CloseWebView(webview_id) => {
self.handle_close_top_level_browsing_context(webview_id);
},
- WebDriverCommandMsg::NewWebView(webview_id, sender, load_sender) => {
- let (chan, port) = match ipc::channel() {
+ WebDriverCommandMsg::NewWebView(
+ originating_webview_id,
+ response_sender,
+ load_status_sender,
+ ) => {
+ let (embedder_sender, receiver) = match ipc::channel() {
Ok(result) => result,
Err(error) => return warn!("Failed to create channel: {error:?}"),
};
- self.embedder_proxy
- .send(EmbedderMsg::AllowOpeningWebView(webview_id, chan));
- let (webview_id, viewport_details) = match port.recv() {
- Ok(Some((webview_id, viewport_details))) => (webview_id, viewport_details),
+ self.embedder_proxy.send(EmbedderMsg::AllowOpeningWebView(
+ originating_webview_id,
+ embedder_sender,
+ ));
+ let (new_webview_id, viewport_details) = match receiver.recv() {
+ Ok(Some((new_webview_id, viewport_details))) => {
+ (new_webview_id, viewport_details)
+ },
Ok(None) => return warn!("Embedder refused to allow opening webview"),
Err(error) => return warn!("Failed to receive webview id: {error:?}"),
};
self.handle_new_top_level_browsing_context(
ServoUrl::parse_with_base(None, "about:blank").expect("Infallible parse"),
- webview_id,
+ new_webview_id,
viewport_details,
- Some(load_sender),
+ Some(load_status_sender),
);
- let _ = sender.send(webview_id);
+ if let Err(error) = response_sender.send(new_webview_id) {
+ error!(
+ "WebDriverCommandMsg::NewWebView: IPC error when sending new_webview_id \
+ to webdriver server: {error}"
+ );
+ }
},
WebDriverCommandMsg::FocusWebView(webview_id) => {
self.handle_focus_web_view(webview_id);
diff --git a/components/net/tests/fetch.rs b/components/net/tests/fetch.rs
index e8c5077f12a..0deceab3055 100644
--- a/components/net/tests/fetch.rs
+++ b/components/net/tests/fetch.rs
@@ -225,7 +225,7 @@ fn test_fetch_blob() {
#[test]
fn test_file() {
- let path = Path::new("../../resources/ahem.css")
+ let path = Path::new("../../components/net/tests/test.css")
.canonicalize()
.unwrap();
let url = ServoUrl::from_file_path(path.clone()).unwrap();
diff --git a/components/net/tests/test.css b/components/net/tests/test.css
new file mode 100644
index 00000000000..f7fa63bbaa7
--- /dev/null
+++ b/components/net/tests/test.css
@@ -0,0 +1,3 @@
+html {
+ color: red;
+}
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs
index 961fb92121d..1fe51407638 100644
--- a/components/script/dom/element.rs
+++ b/components/script/dom/element.rs
@@ -861,8 +861,14 @@ pub(crate) fn get_attr_for_layout<'dom>(
pub(crate) trait LayoutElementHelpers<'dom> {
fn attrs(self) -> &'dom [LayoutDom<'dom, Attr>];
- fn has_class_for_layout(self, name: &AtomIdent, case_sensitivity: CaseSensitivity) -> bool;
+ fn has_class_or_part_for_layout(
+ self,
+ name: &AtomIdent,
+ attr_name: &LocalName,
+ case_sensitivity: CaseSensitivity,
+ ) -> bool;
fn get_classes_for_layout(self) -> Option<&'dom [Atom]>;
+ fn get_parts_for_layout(self) -> Option<&'dom [Atom]>;
fn synthesize_presentational_hints_for_legacy_attributes<V>(self, hints: &mut V)
where
@@ -905,8 +911,13 @@ impl<'dom> LayoutElementHelpers<'dom> for LayoutDom<'dom, Element> {
}
#[inline]
- fn has_class_for_layout(self, name: &AtomIdent, case_sensitivity: CaseSensitivity) -> bool {
- get_attr_for_layout(self, &ns!(), &local_name!("class")).is_some_and(|attr| {
+ fn has_class_or_part_for_layout(
+ self,
+ name: &AtomIdent,
+ attr_name: &LocalName,
+ case_sensitivity: CaseSensitivity,
+ ) -> bool {
+ get_attr_for_layout(self, &ns!(), attr_name).is_some_and(|attr| {
attr.to_tokens()
.unwrap()
.iter()
@@ -920,6 +931,11 @@ impl<'dom> LayoutElementHelpers<'dom> for LayoutDom<'dom, Element> {
.map(|attr| attr.to_tokens().unwrap())
}
+ fn get_parts_for_layout(self) -> Option<&'dom [Atom]> {
+ get_attr_for_layout(self, &ns!(), &local_name!("part"))
+ .map(|attr| attr.to_tokens().unwrap())
+ }
+
fn synthesize_presentational_hints_for_legacy_attributes<V>(self, hints: &mut V)
where
V: Push<ApplicableDeclarationBlock>,
@@ -1995,6 +2011,16 @@ impl Element {
})
}
+ pub(crate) fn is_part(&self, name: &Atom, case_sensitivity: CaseSensitivity) -> bool {
+ self.get_attribute(&ns!(), &LocalName::from("part"))
+ .is_some_and(|attr| {
+ attr.value()
+ .as_tokens()
+ .iter()
+ .any(|atom| case_sensitivity.eq_atom(name, atom))
+ })
+ }
+
pub(crate) fn set_atomic_attribute(
&self,
local_name: &LocalName,
@@ -4051,6 +4077,13 @@ impl ElementMethods<crate::DomTypeHolder> for Element {
rooted!(in(*cx) let slottable = Slottable(Dom::from_ref(self.upcast::<Node>())));
slottable.find_a_slot(true)
}
+
+ /// <https://drafts.csswg.org/css-shadow-parts/#dom-element-part>
+ fn Part(&self) -> DomRoot<DOMTokenList> {
+ self.ensure_rare_data()
+ .part
+ .or_init(|| DOMTokenList::new(self, &local_name!("part"), None, CanGc::note()))
+ }
}
impl VirtualMethods for Element {
@@ -4190,7 +4223,9 @@ impl VirtualMethods for Element {
match *name {
local_name!("id") => AttrValue::from_atomic(value.into()),
local_name!("name") => AttrValue::from_atomic(value.into()),
- local_name!("class") => AttrValue::from_serialized_tokenlist(value.into()),
+ local_name!("class") | local_name!("part") => {
+ AttrValue::from_serialized_tokenlist(value.into())
+ },
_ => self
.super_type()
.unwrap()
@@ -4564,8 +4599,8 @@ impl SelectorsElement for SelectorWrapper<'_> {
.is_some_and(|atom| case_sensitivity.eq_atom(id, atom))
}
- fn is_part(&self, _name: &AtomIdent) -> bool {
- false
+ fn is_part(&self, name: &AtomIdent) -> bool {
+ Element::is_part(self, name, CaseSensitivity::CaseSensitive)
}
fn imported_part(&self, _: &AtomIdent) -> Option<AtomIdent> {
diff --git a/components/script/dom/htmlelement.rs b/components/script/dom/htmlelement.rs
index f41370386e9..f47a40d3cdb 100644
--- a/components/script/dom/htmlelement.rs
+++ b/components/script/dom/htmlelement.rs
@@ -437,7 +437,7 @@ impl HTMLElementMethods<crate::DomTypeHolder> for HTMLElement {
document.request_focus(None, FocusInitiator::Local, can_gc);
}
- // https://drafts.csswg.org/cssom-view/#dom-htmlelement-offsetparent
+ /// <https://drafts.csswg.org/cssom-view/#dom-htmlelement-offsetparent>
fn GetOffsetParent(&self, can_gc: CanGc) -> Option<DomRoot<Element>> {
if self.is::<HTMLBodyElement>() || self.is::<HTMLHtmlElement>() {
return None;
diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs
index bf36242572f..6d4a0d2529e 100644
--- a/components/script/dom/node.rs
+++ b/components/script/dom/node.rs
@@ -1583,6 +1583,7 @@ pub(crate) unsafe fn from_untrusted_node_address(candidate: UntrustedNodeAddress
pub(crate) trait LayoutNodeHelpers<'dom> {
fn type_id_for_layout(self) -> NodeTypeId;
+ fn parent_node_ref(self) -> Option<LayoutDom<'dom, Node>>;
fn composed_parent_node_ref(self) -> Option<LayoutDom<'dom, Node>>;
fn first_child_ref(self) -> Option<LayoutDom<'dom, Node>>;
fn last_child_ref(self) -> Option<LayoutDom<'dom, Node>>;
@@ -1645,7 +1646,7 @@ pub(crate) trait LayoutNodeHelpers<'dom> {
impl<'dom> LayoutDom<'dom, Node> {
#[inline]
#[allow(unsafe_code)]
- fn parent_node_ref(self) -> Option<LayoutDom<'dom, Node>> {
+ pub(crate) fn parent_node_ref(self) -> Option<LayoutDom<'dom, Node>> {
unsafe { self.unsafe_get().parent_node.get_inner_as_layout() }
}
}
@@ -1662,6 +1663,12 @@ impl<'dom> LayoutNodeHelpers<'dom> for LayoutDom<'dom, Node> {
}
#[inline]
+ #[allow(unsafe_code)]
+ fn parent_node_ref(self) -> Option<LayoutDom<'dom, Node>> {
+ unsafe { self.unsafe_get().parent_node.get_inner_as_layout() }
+ }
+
+ #[inline]
fn composed_parent_node_ref(self) -> Option<LayoutDom<'dom, Node>> {
let parent = self.parent_node_ref();
if let Some(parent) = parent {
diff --git a/components/script/dom/raredata.rs b/components/script/dom/raredata.rs
index 0c048956217..2c303d6874f 100644
--- a/components/script/dom/raredata.rs
+++ b/components/script/dom/raredata.rs
@@ -11,6 +11,7 @@ use crate::dom::bindings::root::{Dom, MutNullableDom};
use crate::dom::customelementregistry::{
CustomElementDefinition, CustomElementReaction, CustomElementState,
};
+use crate::dom::domtokenlist::DOMTokenList;
use crate::dom::elementinternals::ElementInternals;
use crate::dom::htmlslotelement::SlottableData;
use crate::dom::intersectionobserver::IntersectionObserverRegistration;
@@ -76,4 +77,10 @@ pub(crate) struct ElementRareData {
/// > which is initialized to an empty list. This list holds IntersectionObserverRegistration records, which have:
pub(crate) registered_intersection_observers: Vec<IntersectionObserverRegistration>,
pub(crate) cryptographic_nonce: String,
+
+ /// <https://drafts.csswg.org/css-shadow-parts/#element-forwarded-part-name-list>
+ pub(crate) forwarded_part_names: Vec<(String, String)>,
+
+ /// <https://drafts.csswg.org/css-shadow-parts/#dom-element-part>
+ pub(crate) part: MutNullableDom<DOMTokenList>,
}
diff --git a/components/script/dom/windowproxy.rs b/components/script/dom/windowproxy.rs
index a8decee24ed..648146ac2e9 100644
--- a/components/script/dom/windowproxy.rs
+++ b/components/script/dom/windowproxy.rs
@@ -466,26 +466,40 @@ impl WindowProxy {
features: DOMString,
can_gc: CanGc,
) -> Fallible<Option<DomRoot<WindowProxy>>> {
- // Step 4.
+ // Step 5. If target is the empty string, then set target to "_blank".
let non_empty_target = match target.as_ref() {
"" => DOMString::from("_blank"),
_ => target,
};
- // Step 5
+ // Step 6. Let tokenizedFeatures be the result of tokenizing features.
let tokenized_features = tokenize_open_features(features);
- // Step 7-9
+ // Step 7 - 8.
+ // If tokenizedFeatures["noreferrer"] exists, then set noreferrer to
+ // the result of parsing tokenizedFeatures["noreferrer"] as a boolean feature.
let noreferrer = parse_open_feature_boolean(&tokenized_features, "noreferrer");
+
+ // Step 9. Let noopener be the result of getting noopener for window
+ // open with sourceDocument, tokenizedFeatures, and urlRecord.
let noopener = if noreferrer {
true
} else {
parse_open_feature_boolean(&tokenized_features, "noopener")
};
- // Step 10, 11
+ // (TODO) Step 10. Remove tokenizedFeatures["noopener"] and tokenizedFeatures["noreferrer"].
+
+ // (TODO) Step 11. Let referrerPolicy be the empty string.
+ // (TODO) Step 12. If noreferrer is true, then set referrerPolicy to "no-referrer".
+
+ // Step 13 - 14
+ // Let targetNavigable and windowType be the result of applying the rules for
+ // choosing a navigable given target, sourceDocument's node navigable, and noopener.
+ // If targetNavigable is null, then return null.
let (chosen, new) = match self.choose_browsing_context(non_empty_target, noopener) {
(Some(chosen), new) => (chosen, new),
(None, _) => return Ok(None),
};
- // TODO Step 12, set up browsing context features.
+ // TODO Step 15.2, Set up browsing context features for targetNavigable's
+ // active browsing context given tokenizedFeatures.
let target_document = match chosen.document() {
Some(target_document) => target_document,
None => return Ok(None),
@@ -496,7 +510,7 @@ impl WindowProxy {
false
};
let target_window = target_document.window();
- // Step 13, and 14.4, will have happened elsewhere,
+ // Step 15.3 and 15.4 will have happened elsewhere,
// since we've created a new browsing context and loaded it with about:blank.
if !url.is_empty() {
let existing_document = self
@@ -504,18 +518,18 @@ impl WindowProxy {
.get()
.and_then(ScriptThread::find_document)
.unwrap();
- // Step 14.1
let url = match existing_document.url().join(&url) {
Ok(url) => url,
Err(_) => return Err(Error::Syntax),
};
- // Step 14.3
let referrer = if noreferrer {
Referrer::NoReferrer
} else {
target_window.as_global_scope().get_referrer()
};
- // Step 14.5
+ // Step 15.5 Otherwise, navigate targetNavigable to urlRecord using sourceDocument,
+ // with referrerPolicy set to referrerPolicy and exceptionsEnabled set to true.
+ // FIXME: referrerPolicy may not be used properly here. exceptionsEnabled not used.
let referrer_policy = target_document.get_referrer_policy();
let pipeline_id = target_window.pipeline_id();
let secure = target_window.as_global_scope().is_secure_context();
@@ -534,14 +548,13 @@ impl WindowProxy {
} else {
NavigationHistoryBehavior::Push
};
-
target_window.load_url(history_handling, false, load_data, can_gc);
}
+ // Step 17 (Dis-owning has been done in create_auxiliary_browsing_context).
if noopener {
- // Step 15 (Dis-owning has been done in create_auxiliary_browsing_context).
return Ok(None);
}
- // Step 17.
+ // Step 18
Ok(target_document.browsing_context())
}
diff --git a/components/script/layout_dom/element.rs b/components/script/layout_dom/element.rs
index 9b50c9f3a2b..fd34d591f0c 100644
--- a/components/script/layout_dom/element.rs
+++ b/components/script/layout_dom/element.rs
@@ -216,11 +216,15 @@ impl<'dom> style::dom::TElement for ServoLayoutElement<'dom> {
}
fn has_part_attr(&self) -> bool {
- false
+ self.element
+ .get_attr_for_layout(&ns!(), &local_name!("part"))
+ .is_some()
}
fn exports_any_part(&self) -> bool {
- false
+ self.element
+ .get_attr_for_layout(&ns!(), &local_name!("exportparts"))
+ .is_some()
}
fn style_attribute(&self) -> Option<ArcBorrow<StyleLocked<PropertyDeclarationBlock>>> {
@@ -292,6 +296,17 @@ impl<'dom> style::dom::TElement for ServoLayoutElement<'dom> {
}
}
+ fn each_part<F>(&self, mut callback: F)
+ where
+ F: FnMut(&AtomIdent),
+ {
+ if let Some(parts) = self.element.get_parts_for_layout() {
+ for part in parts {
+ callback(AtomIdent::cast(part))
+ }
+ }
+ }
+
fn has_dirty_descendants(&self) -> bool {
unsafe {
self.as_node()
@@ -728,8 +743,12 @@ impl<'dom> ::selectors::Element for ServoLayoutElement<'dom> {
}
#[inline]
- fn is_part(&self, _name: &AtomIdent) -> bool {
- false
+ fn is_part(&self, name: &AtomIdent) -> bool {
+ self.element.has_class_or_part_for_layout(
+ name,
+ &local_name!("part"),
+ CaseSensitivity::CaseSensitive,
+ )
}
fn imported_part(&self, _: &AtomIdent) -> Option<AtomIdent> {
@@ -738,7 +757,8 @@ impl<'dom> ::selectors::Element for ServoLayoutElement<'dom> {
#[inline]
fn has_class(&self, name: &AtomIdent, case_sensitivity: CaseSensitivity) -> bool {
- self.element.has_class_for_layout(name, case_sensitivity)
+ self.element
+ .has_class_or_part_for_layout(name, &local_name!("class"), case_sensitivity)
}
fn is_html_slot_element(&self) -> bool {
diff --git a/components/script/layout_dom/node.rs b/components/script/layout_dom/node.rs
index dfb921b1ded..85b75f0b15f 100644
--- a/components/script/layout_dom/node.rs
+++ b/components/script/layout_dom/node.rs
@@ -119,9 +119,7 @@ impl<'dom> style::dom::TNode for ServoLayoutNode<'dom> {
type ConcreteShadowRoot = ServoShadowRoot<'dom>;
fn parent_node(&self) -> Option<Self> {
- self.node
- .composed_parent_node_ref()
- .map(Self::from_layout_js)
+ self.node.parent_node_ref().map(Self::from_layout_js)
}
fn first_child(&self) -> Option<Self> {
@@ -302,8 +300,8 @@ impl<'dom> ThreadSafeLayoutNode<'dom> for ServoThreadSafeLayoutNode<'dom> {
}
fn parent_style(&self) -> Arc<ComputedValues> {
- let parent = self.node.parent_node().unwrap().as_element().unwrap();
- let parent_data = parent.borrow_data().unwrap();
+ let parent_element = self.node.traversal_parent().unwrap();
+ let parent_data = parent_element.borrow_data().unwrap();
parent_data.styles.primary().clone()
}
diff --git a/components/script/webdriver_handlers.rs b/components/script/webdriver_handlers.rs
index 322839aa078..1bde6f314f2 100644
--- a/components/script/webdriver_handlers.rs
+++ b/components/script/webdriver_handlers.rs
@@ -9,9 +9,7 @@ use std::ptr::NonNull;
use base::id::{BrowsingContextId, PipelineId};
use cookie::Cookie;
-use embedder_traits::{
- WebDriverCookieError, WebDriverFrameId, WebDriverJSError, WebDriverJSResult, WebDriverJSValue,
-};
+use embedder_traits::{WebDriverFrameId, WebDriverJSError, WebDriverJSResult, WebDriverJSValue};
use euclid::default::{Point2D, Rect, Size2D};
use hyper_serde::Serde;
use ipc_channel::ipc::{self, IpcSender};
@@ -81,6 +79,8 @@ fn find_node_by_unique_id(
match documents.find_document(pipeline) {
Some(doc) => find_node_by_unique_id_in_document(&doc, node_id),
None => {
+ // FIXME: This is unreacheable!! Because we already early return in Constellation
+ // To be Fixed soon
if ScriptThread::has_node_id(pipeline, &node_id) {
Err(ErrorStatus::StaleElementReference)
} else {
@@ -994,7 +994,7 @@ pub(crate) fn handle_get_page_source(
pub(crate) fn handle_get_cookies(
documents: &DocumentCollection,
pipeline: PipelineId,
- reply: IpcSender<Vec<Serde<Cookie<'static>>>>,
+ reply: IpcSender<Result<Vec<Serde<Cookie<'static>>>, ErrorStatus>>,
) {
reply
.send(
@@ -1008,9 +1008,9 @@ pub(crate) fn handle_get_cookies(
.as_global_scope()
.resource_threads()
.send(GetCookiesDataForUrl(url, sender, NonHTTP));
- receiver.recv().unwrap()
+ Ok(receiver.recv().unwrap())
},
- None => Vec::new(),
+ None => Ok(Vec::new()),
},
)
.unwrap();
@@ -1021,7 +1021,7 @@ pub(crate) fn handle_get_cookie(
documents: &DocumentCollection,
pipeline: PipelineId,
name: String,
- reply: IpcSender<Vec<Serde<Cookie<'static>>>>,
+ reply: IpcSender<Result<Vec<Serde<Cookie<'static>>>, ErrorStatus>>,
) {
reply
.send(
@@ -1036,12 +1036,12 @@ pub(crate) fn handle_get_cookie(
.resource_threads()
.send(GetCookiesDataForUrl(url, sender, NonHTTP));
let cookies = receiver.recv().unwrap();
- cookies
+ Ok(cookies
.into_iter()
.filter(|cookie| cookie.name() == &*name)
- .collect()
+ .collect())
},
- None => Vec::new(),
+ None => Ok(Vec::new()),
},
)
.unwrap();
@@ -1052,15 +1052,13 @@ pub(crate) fn handle_add_cookie(
documents: &DocumentCollection,
pipeline: PipelineId,
cookie: Cookie<'static>,
- reply: IpcSender<Result<(), WebDriverCookieError>>,
+ reply: IpcSender<Result<(), ErrorStatus>>,
) {
// TODO: Return a different error if the pipeline doesn't exist
let document = match documents.find_document(pipeline) {
Some(document) => document,
None => {
- return reply
- .send(Err(WebDriverCookieError::UnableToSetCookie))
- .unwrap();
+ return reply.send(Err(ErrorStatus::UnableToSetCookie)).unwrap();
},
};
let url = document.url();
@@ -1073,7 +1071,7 @@ pub(crate) fn handle_add_cookie(
let domain = cookie.domain().map(ToOwned::to_owned);
reply
.send(match (document.is_cookie_averse(), domain) {
- (true, _) => Err(WebDriverCookieError::InvalidDomain),
+ (true, _) => Err(ErrorStatus::InvalidCookieDomain),
(false, Some(ref domain)) if url.host_str().map(|x| x == domain).unwrap_or(false) => {
let _ = document
.window()
@@ -1090,7 +1088,7 @@ pub(crate) fn handle_add_cookie(
.send(SetCookieForUrl(url, Serde(cookie), method));
Ok(())
},
- (_, _) => Err(WebDriverCookieError::UnableToSetCookie),
+ (_, _) => Err(ErrorStatus::UnableToSetCookie),
})
.unwrap();
}
diff --git a/components/script_bindings/webidls/Element.webidl b/components/script_bindings/webidls/Element.webidl
index 4545b18d058..e0073f856ca 100644
--- a/components/script_bindings/webidls/Element.webidl
+++ b/components/script_bindings/webidls/Element.webidl
@@ -144,3 +144,8 @@ Element includes NonDocumentTypeChildNode;
Element includes ParentNode;
Element includes ActivatableElement;
Element includes ARIAMixin;
+
+// https://drafts.csswg.org/css-shadow-parts/#idl
+partial interface Element {
+ [SameObject, PutForwards=value] readonly attribute DOMTokenList part;
+};
diff --git a/components/shared/embedder/webdriver.rs b/components/shared/embedder/webdriver.rs
index d28bb6fc6c3..4f58c10fb6f 100644
--- a/components/shared/embedder/webdriver.rs
+++ b/components/shared/embedder/webdriver.rs
@@ -94,7 +94,7 @@ pub enum WebDriverScriptCommand {
serialize_with = "::hyper_serde::serialize"
)]
Cookie<'static>,
- IpcSender<Result<(), WebDriverCookieError>>,
+ IpcSender<Result<(), ErrorStatus>>,
),
DeleteCookies(IpcSender<Result<(), ErrorStatus>>),
DeleteCookie(String, IpcSender<Result<(), ErrorStatus>>),
@@ -134,8 +134,11 @@ pub enum WebDriverScriptCommand {
ElementClick(String, IpcSender<Result<Option<String>, ErrorStatus>>),
GetActiveElement(IpcSender<Option<String>>),
GetComputedRole(String, IpcSender<Result<Option<String>, ErrorStatus>>),
- GetCookie(String, IpcSender<Vec<Serde<Cookie<'static>>>>),
- GetCookies(IpcSender<Vec<Serde<Cookie<'static>>>>),
+ GetCookie(
+ String,
+ IpcSender<Result<Vec<Serde<Cookie<'static>>>, ErrorStatus>>,
+ ),
+ GetCookies(IpcSender<Result<Vec<Serde<Cookie<'static>>>, ErrorStatus>>),
GetElementAttribute(
String,
String,
@@ -165,12 +168,6 @@ pub enum WebDriverScriptCommand {
WillSendKeys(String, String, bool, IpcSender<Result<bool, ErrorStatus>>),
}
-#[derive(Debug, Deserialize, Serialize)]
-pub enum WebDriverCookieError {
- InvalidDomain,
- UnableToSetCookie,
-}
-
#[derive(Clone, Debug, Deserialize, Serialize)]
pub enum WebDriverJSValue {
Undefined,
diff --git a/components/webdriver_server/lib.rs b/components/webdriver_server/lib.rs
index 5d5159f7232..f2638764df6 100644
--- a/components/webdriver_server/lib.rs
+++ b/components/webdriver_server/lib.rs
@@ -24,9 +24,9 @@ use constellation_traits::{EmbedderToConstellationMessage, TraversalDirection};
use cookie::{CookieBuilder, Expiration};
use crossbeam_channel::{Receiver, Sender, after, select, unbounded};
use embedder_traits::{
- MouseButton, WebDriverCommandMsg, WebDriverCommandResponse, WebDriverCookieError,
- WebDriverFrameId, WebDriverJSError, WebDriverJSResult, WebDriverJSValue, WebDriverLoadStatus,
- WebDriverMessageId, WebDriverScriptCommand,
+ MouseButton, WebDriverCommandMsg, WebDriverCommandResponse, WebDriverFrameId, WebDriverJSError,
+ WebDriverJSResult, WebDriverJSValue, WebDriverLoadStatus, WebDriverMessageId,
+ WebDriverScriptCommand,
};
use euclid::{Rect, Size2D};
use http::method::Method;
@@ -949,6 +949,7 @@ impl Handler {
)))
}
+ /// <https://w3c.github.io/webdriver/#new-window>
fn handle_new_window(
&mut self,
_parameters: &NewWindowParameters,
@@ -956,11 +957,16 @@ impl Handler {
let (sender, receiver) = ipc::channel().unwrap();
let session = self.session().unwrap();
+ // Step 2. (TODO) If session's current top-level browsing context is no longer open,
+ // return error with error code no such window.
+
let cmd_msg = WebDriverCommandMsg::NewWebView(
session.webview_id,
sender,
self.load_status_sender.clone(),
);
+ // Step 5. Create a new top-level browsing context by running the window open steps.
+ // This MUST be done without invoking the focusing steps.
self.constellation_chan
.send(EmbedderToConstellationMessage::WebDriverCommand(cmd_msg))
.unwrap();
@@ -968,8 +974,6 @@ impl Handler {
let mut handle = self.session.as_ref().unwrap().id.to_string();
if let Ok(new_webview_id) = receiver.recv() {
let session = self.session_mut().unwrap();
- session.webview_id = new_webview_id;
- session.browsing_context_id = BrowsingContextId::from(new_webview_id);
let new_handle = Uuid::new_v4().to_string();
handle = new_handle.clone();
session.window_handles.insert(new_webview_id, new_handle);
@@ -1365,7 +1369,10 @@ impl Handler {
let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::GetCookies(sender);
self.browsing_context_script_command(cmd)?;
- let cookies = wait_for_script_response(receiver)?;
+ let cookies = match wait_for_script_response(receiver)? {
+ Ok(cookies) => cookies,
+ Err(error) => return Err(WebDriverError::new(error, "")),
+ };
let response = cookies
.into_iter()
.map(|cookie| cookie_msg_to_cookie(cookie.into_inner()))
@@ -1377,7 +1384,10 @@ impl Handler {
let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::GetCookie(name, sender);
self.browsing_context_script_command(cmd)?;
- let cookies = wait_for_script_response(receiver)?;
+ let cookies = match wait_for_script_response(receiver)? {
+ Ok(cookies) => cookies,
+ Err(error) => return Err(WebDriverError::new(error, "")),
+ };
let Some(response) = cookies
.into_iter()
.map(|cookie| cookie_msg_to_cookie(cookie.into_inner()))
@@ -1410,16 +1420,7 @@ impl Handler {
self.browsing_context_script_command(cmd)?;
match wait_for_script_response(receiver)? {
Ok(_) => Ok(WebDriverResponse::Void),
- Err(response) => match response {
- WebDriverCookieError::InvalidDomain => Err(WebDriverError::new(
- ErrorStatus::InvalidCookieDomain,
- "Invalid cookie domain",
- )),
- WebDriverCookieError::UnableToSetCookie => Err(WebDriverError::new(
- ErrorStatus::UnableToSetCookie,
- "Unable to set cookie",
- )),
- },
+ Err(error) => Err(WebDriverError::new(error, "")),
}
}
diff --git a/ports/servoshell/desktop/app_state.rs b/ports/servoshell/desktop/app_state.rs
index 464e344424a..4740cfc35ca 100644
--- a/ports/servoshell/desktop/app_state.rs
+++ b/ports/servoshell/desktop/app_state.rs
@@ -12,7 +12,7 @@ use image::{DynamicImage, ImageFormat};
use keyboard_types::{Key, KeyboardEvent, Modifiers, ShortcutMatcher};
use log::{error, info};
use servo::base::id::WebViewId;
-use servo::config::pref;
+use servo::config::{opts, pref};
use servo::ipc_channel::ipc::IpcSender;
use servo::webrender_api::ScrollLocation;
use servo::webrender_api::units::{DeviceIntPoint, DeviceIntRect, DeviceIntSize};
@@ -477,9 +477,13 @@ impl WebViewDelegate for RunningAppState {
.build();
webview.notify_theme_change(self.inner().window.theme());
- webview.focus();
- webview.raise_to_top(true);
-
+ // When WebDriver is enabled, do not focus and raise the WebView to the top,
+ // as that is what the specification expects. Otherwise, we would like `window.open()`
+ // to create a new foreground tab
+ if opts::get().webdriver_port.is_some() {
+ webview.focus();
+ webview.raise_to_top(true);
+ }
self.add(webview.clone());
Some(webview)
}
diff --git a/python/wpt/run.py b/python/wpt/run.py
index 4d221f816e3..d44d24f5882 100644
--- a/python/wpt/run.py
+++ b/python/wpt/run.py
@@ -66,7 +66,7 @@ def run_tests(default_binary_path: str, **kwargs):
# chunks and leads to more consistent timing on GitHub Actions.
set_if_none(kwargs, "chunk_type", "id_hash")
- kwargs["user_stylesheets"].append(os.path.join(SERVO_ROOT, "resources", "ahem.css"))
+ kwargs["user_stylesheets"].append(os.path.join(SERVO_ROOT, "tests", "wpt", "tests", "fonts", "ahem.css"))
set_if_none(kwargs, "binary", default_binary_path)
set_if_none(kwargs, "webdriver_binary", default_binary_path)
diff --git a/resources/ahem.css b/resources/ahem.css
deleted file mode 100644
index 4c7e979e64c..00000000000
--- a/resources/ahem.css
+++ /dev/null
@@ -1,4 +0,0 @@
-@font-face {
- font-family: Ahem;
- src: url(ahem/AHEM____.TTF);
-}
diff --git a/resources/ahem/AHEM____.TTF b/resources/ahem/AHEM____.TTF
deleted file mode 100644
index ac81cb03165..00000000000
--- a/resources/ahem/AHEM____.TTF
+++ /dev/null
Binary files differ
diff --git a/resources/ahem/Ahem.ps b/resources/ahem/Ahem.ps
deleted file mode 100644
index 8bd54c6b64f..00000000000
--- a/resources/ahem/Ahem.ps
+++ /dev/null
@@ -1 +0,0 @@
-%!PS-AdobeFont-1.0: Ahem 001.000 %%CreationDate: 24.5.99 at 19:57 %%VMusage: 1024 22706 % Generated by Fontographer 4.1.5 % Most characters are the em square, except &EAcute and "p", which show ascent/descent from the baseline. Useful for testing composition systems. Produced by Todd Fahrner for the CSS Samurai's browser testing. % ADL: 800 200 0 %%EndComments FontDirectory/Ahem known{/Ahem findfont dup/UniqueID known{dup /UniqueID get 4790119 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 20 dict begin /FontInfo 16 dict dup begin /version (001.000) readonly def /FullName (Ahem) readonly def /FamilyName (Ahem) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def /UnderlinePosition -133 def /UnderlineThickness 20 def /Notice (Most characters are the em square, except &EAcute and "p", which show ascent/descent from the baseline. Useful for testing composition systems. Produced by Todd Fahrner for the CSS Samurai's browser testing.) readonly def /em 1000 def /ascent 800 def /descent 200 def end readonly def /FontName /Ahem def /Encoding 256 array dup 0/.notdef put dup 1/.notdef put dup 2/.notdef put dup 3/.notdef put dup 4/.notdef put dup 5/.notdef put dup 6/.notdef put dup 7/.notdef put dup 8/.notdef put dup 9/.notdef put dup 10/.notdef put dup 11/.notdef put dup 12/.notdef put dup 13/.notdef put dup 14/.notdef put dup 15/.notdef put dup 16/.notdef put dup 17/.notdef put dup 18/.notdef put dup 19/.notdef put dup 20/.notdef put dup 21/.notdef put dup 22/.notdef put dup 23/.notdef put dup 24/.notdef put dup 25/.notdef put dup 26/.notdef put dup 27/.notdef put dup 28/.notdef put dup 29/.notdef put dup 30/.notdef put dup 31/.notdef put dup 32/space put dup 33/exclam put dup 34/quotedbl put dup 35/numbersign put dup 36/dollar put dup 37/percent put dup 38/ampersand put dup 39/quoteright put dup 40/parenleft put dup 41/parenright put dup 42/asterisk put dup 43/plus put dup 44/comma put dup 45/minus put dup 46/period put dup 47/slash put dup 48/zero put dup 49/one put dup 50/two put dup 51/three put dup 52/four put dup 53/five put dup 54/six put dup 55/seven put dup 56/eight put dup 57/nine put dup 58/colon put dup 59/semicolon put dup 60/less put dup 61/equal put dup 62/greater put dup 63/question put dup 64/at put dup 65/A put dup 66/B put dup 67/C put dup 68/D put dup 69/E put dup 70/F put dup 71/G put dup 72/H put dup 73/I put dup 74/J put dup 75/K put dup 76/L put dup 77/M put dup 78/N put dup 79/O put dup 80/P put dup 81/Q put dup 82/R put dup 83/S put dup 84/T put dup 85/U put dup 86/V put dup 87/W put dup 88/X put dup 89/Y put dup 90/Z put dup 91/bracketleft put dup 92/backslash put dup 93/bracketright put dup 94/asciicircum put dup 95/underscore put dup 96/quoteleft put dup 97/a put dup 98/b put dup 99/c put dup 100/d put dup 101/e put dup 102/f put dup 103/g put dup 104/h put dup 105/i put dup 106/j put dup 107/k put dup 108/l put dup 109/m put dup 110/n put dup 111/o put dup 112/p put dup 113/q put dup 114/r put dup 115/s put dup 116/t put dup 117/u put dup 118/v put dup 119/w put dup 120/x put dup 121/y put dup 122/z put dup 123/braceleft put dup 124/bar put dup 125/braceright put dup 126/asciitilde put dup 127/.notdef put dup 128/.notdef put dup 129/.notdef put dup 130/.notdef put dup 131/.notdef put dup 132/.notdef put dup 133/.notdef put dup 134/.notdef put dup 135/.notdef put dup 136/.notdef put dup 137/.notdef put dup 138/.notdef put dup 139/.notdef put dup 140/.notdef put dup 141/.notdef put dup 142/.notdef put dup 143/.notdef put dup 144/dotlessi put dup 145/grave put dup 146/acute put dup 147/circumflex put dup 148/tilde put dup 149/macron put dup 150/breve put dup 151/dotaccent put dup 152/dieresis put dup 153/.notdef put dup 154/ring put dup 155/cedilla put dup 156/.notdef put dup 157/hungarumlaut put dup 158/ogonek put dup 159/caron put dup 160/nbspace put dup 161/exclamdown put dup 162/cent put dup 163/sterling put dup 164/currency put dup 165/yen put dup 166/brokenbar put dup 167/section put dup 168/dieresis put dup 169/copyright put dup 170/ordfeminine put dup 171/guillemotleft put dup 172/logicalnot put dup 173/hyphen put dup 174/registered put dup 175/macron put dup 176/degree put dup 177/plusminus put dup 178/twosuperior put dup 179/threesuperior put dup 180/acute put dup 181/mu put dup 182/paragraph put dup 183/periodcentered put dup 184/cedilla put dup 185/onesuperior put dup 186/ordmasculine put dup 187/guillemotright put dup 188/onequarter put dup 189/onehalf put dup 190/threequarters put dup 191/questiondown put dup 192/Agrave put dup 193/Aacute put dup 194/Acircumflex put dup 195/Atilde put dup 196/Adieresis put dup 197/Aring put dup 198/AE put dup 199/Ccedilla put dup 200/Egrave put dup 201/Eacute put dup 202/Ecircumflex put dup 203/Edieresis put dup 204/Igrave put dup 205/Iacute put dup 206/Icircumflex put dup 207/Idieresis put dup 208/Eth put dup 209/Ntilde put dup 210/Ograve put dup 211/Oacute put dup 212/Ocircumflex put dup 213/Otilde put dup 214/Odieresis put dup 215/multiply put dup 216/Oslash put dup 217/Ugrave put dup 218/Uacute put dup 219/Ucircumflex put dup 220/Udieresis put dup 221/Yacute put dup 222/Thorn put dup 223/germandbls put dup 224/agrave put dup 225/aacute put dup 226/acircumflex put dup 227/atilde put dup 228/adieresis put dup 229/aring put dup 230/ae put dup 231/ccedilla put dup 232/egrave put dup 233/eacute put dup 234/ecircumflex put dup 235/edieresis put dup 236/igrave put dup 237/iacute put dup 238/icircumflex put dup 239/idieresis put dup 240/eth put dup 241/ntilde put dup 242/ograve put dup 243/oacute put dup 244/ocircumflex put dup 245/otilde put dup 246/odieresis put dup 247/divide put dup 248/oslash put dup 249/ugrave put dup 250/uacute put dup 251/ucircumflex put dup 252/udieresis put dup 253/yacute put dup 254/thorn put dup 255/ydieresis put readonly def /PaintType 0 def /FontType 1 def /StrokeWidth 0 def /FontMatrix[0.001 0 0 0.001 0 0]readonly def /UniqueID 4790119 def /FontBBox{0 -200 1000 800}readonly def currentdict end currentfile eexec D8061D93A8246509E76A3EC656E953B7C22E43117F5A3D5F277C16E04EEF1E062177EBA1C7CD44CC 08EC69212435871DAE39145F9F511D31325A34487F72B91B61DF205DADD53B3626BEAC69A3EBD7A7 D1DCF6BB839B313143D219124CF63C16290FAF4759F32E6BC73D55DE9F71047CE1AB2D992BBA9040 CFB7C803C372371CF5D6EE966F903DE04BD5203314DA296E16E25A00333AE4BAE32D333A421DA78C 8EEC9DFC38A8CD91D7B463EFABEB7BB632B23B9FBF511C9076A64C977809E52EF5C6AFFB7BD57F5A 2CFCCA063E226D1F69EE6D82099789C7AACDCA9774086760D9125C5DC0B3C6B4CB02AAA3C691B600 2C10B806D9D9760F7796E080A92DCD951675EA909D77269CB6BFD767EB97F27AF43A993080DAE5AD 01E3FCCC2A5C687554002CE66DCFEC4EACF2C69215AF98E1851DAFE7244BDC6F3A0775F484A11634 2224EDD6565FEFC196EFB202AC2988599B989F7DBE219C075F90D6019F29683CCD25B4D4D31A54BA E067CFE982A0A9C417FF87E4F8A40D0719DFE7A6220FA99D238FA32F856A4492D316CD1A578A79A4 F7D8005977CD1AB08EC17FD09C12EEB7BC57BD9D575D59D88B530A501FED9A1C18DD5B7F5BD8892E 8B77F6A795596DC0E0B4EAFFCFE7A9B1092B13852758C5C51466408C91B1C654EBE24659DA18A126 FF7B60295F9FC18B784438EC28144BCFCA3E58845CF1ABFF1CAEC75FA16F61B3469D5B3645638C07 46830E03A395C974274D8AC421C6B23C02C62E0295DFD74F50D045CE9A7EDD7C5A8115D28F2E9CA8 57701F425416D5EFA91396AD179718BB3F1350667055D1AE055659C758D420EFD0ADE14BA051D59D 108817CB54CA11DEBDA46F42435905809C6907AD86956D2DBA1926BED10755F4BCCC541787211E76 2BCD336A0C89B15162EE1BBDB4B93197D3E03DB4E1FB112D1C70FDF8099E3359DF117C2324B78F6C 945657533CCFF91712846718B1DF57D11E70EF1363BEAE4B01A2B6FF7C86B46C33D503219296AC8E 4B40E7988921D551F26223A25F51DDF434C42B99FDCCA388A9DC7C6FB0CB7B2589B756F38F83DF58 77217EE630C757DB7AF2007469A2D2E75DD95A6BE1F9F052A044D1A495934A3FE1229866AE35FB23 9CB735AAEA7C85501757C29D5A2DFB09569298E8E6A1BC9862C5958BB47E0C48E778BEDFFCF0F01D 401948B2CCE02D91A6975192CC8B4DE1F572A48B0B7E0B339EFDEFB7D24AA203D946F8D39D85C49E 510E8B863C2DBD046241446CD25EC35313EC5862E521B1F99A48AD1C3827AB3B8E4DA99CD6DB7AA4 A62B4EBEDFB6B965F64FF019BFEA94CCDF71BC33805047C371F2CA5813321639E9B26A5E1E46F46B 3CFE4374596CDEB791C2EC09D44A9ED140328B3B593316460EDD6E28F857D58A90E4D5B371DE8A30 C056FD3D4549C493A407456063CC74C4CEB661E9F18C4C22C7F0FB927CDD322A8672F3B0851B5AF1 6BBD8B6FDDD89A7D093B91A9481777FC9E00100F0C91C3F2955BD20E98974631E7D158AB9416A8F6 0CFEB787E532FF18CFCED64330B5ED66612C3E0AEC74D2066DDCC1C44CCDE1C72FCACFAC986EAE7C 5D65D6EF1CE27B143E7BE6267E29774D2670EF831CB9AD882BF4A4A5222DF9D853177E3732E65A28 0982816E4DEFC64DBA6A47D0344FCAF42322FC171AA713F263F58D4C8561D6D2D18807B012409528 374E9D58ACBAEF664B35942ABEBE0FE54A0207E9A6B977EB9335F6A455168320FFFBD0BCCFBB7628 66A6538221B324EFC98AB255F2A4A313E0D4E15892764B701D849F6E69726817EB2A26851DF3E524 6CCD30F71C80111ED88F5205D8C85828F69F969929413F81CE3785CA74497292538AC422FFAFB350 8B3EAA0E6E786F0F632BE36FF5F4264C923704CFC4A7A60E217807ADD069CD4D999CA03F0D839598 7ABED83E733E06DEDC4E8D03F409DEF33D70CB0E87396DA1ADE83E493C9302DA46977BE70B2AE397 3B0F9E1A0B2DE9F6D3492602E8BD259F74CB63E3991BB7F1950BABD83D787E154AF4EF004A4846B0 7ABC732FC32B889292851E809504382756C114C922BF7FAE42E2576D535DAABA7DAE820ADD0AE2E9 6F19E5C09CACACD5BAC4E795B526A7509C8AFBA7319E397F04FAC95863FFEDF45F0352A0C614F7B0 34E6E7F3AA0ED5FB4CD2BE21FC13908F0BBA29756E3622ED010C459015B4A0F897003EC8E616DBA6 DD8B5A8FE036EF78602EF1EDEE711190E11B6DA4B8277175B3A07E68B7C157C5DDB8DA54771E69C1 CC44CCD5C7B8F02074227F0EF3F4AA1671482691CC82D17BBC8D2266392B1548D1DD2D82C88935CA 45416A4F02E658A7AA6C3B3BE050D815795B1695BFEA08383481D90A6AF44576A7DDBA153162C5CB 3565642FD4BC52935AD67E8801495FC610DF826CEF773FF710EF72C446A39B0DD7CC2A2BAB6D715A 1F9EF13F054BBCD5616464E9A3231396DE8EE7F4201E52EF3ED113F6B7874CCB8010C8DA7A792111 FE52D5EE94C76544D0D29C0463392A94F557652FF6E10468948AE9201AE92FDDE8D6378240E04477 909C3B696FFEC95EBE7A60543525763E8C70B86634DB4491543675B9A722F35546BF91263D8FBF23 CB6515BC721B672DB7AD41A0151F15B4D97B0E3314012613DD2B2B7171BC6FD94FE29A7C4D44E657 9E659A33793D397C80576B0131E884A65E9740FC1966AB125BA8436919A61E46BD7E24F7DB75D206 E0E27F866F9412266643786B7BB1C27E4F136243B0E8F905B1877F598C537E0DF68DD19A4E5C908C 732F4E8782E6D65A2A0130407DAEDCEFB4E981F7140B94473B93EC11FE144823E3FB4F040DB22BFB B01DE4FFCDA710E9F35D018285DA47B80DCEC844C7A43BDE81F9E7ADA697E11115524AEBCA48BE4B 6B351002757A1E2AB5AB573A18C82D8587FC576165A9D9E5610FAC401336DE657A7EA101FF8BBC16 D446C49CAAFE1EFC665247E63B297AA52D666CB9F08A0235A0726C4B2F9F66DE61FB48A5C8BE0DB5 998997B3B68F9D689ADBED55F803AE0086E73EDFF6FF74471B78D16FA63498EC5103F3401AB38AC8 7C3976133C405A6EC17C53E12E2411ECD5C129D5C53F93BB51095423486F3947E4CC90DCD653775F 3714068D53AC4BB6CEEDAC6314696F0199CBDAEF5ECBDE598A9AF75F4F965FA527D2D90A8C7562A4 1F0433A954E3CD4CBCE2F0CD26D04072B69DE1B59716A566E61354129957FF5A8A4BCB51C3FE1A9C AE4510D2C6CCEAF776974D0201E8ED5E2CBDDACCD8F9674C7EE4DF64A1A37075D0393498CC6BD09C 5A0929B34A6F6C2FDC001F936EDE2654ECDA6AFA436368A90F0EB70954607AF1C8BBBFF9AD2D494D 8F5DD0F34DA08B0BA7354800EC1069155DD87A4F37943D9106FB69CB5812ED3FA513159E6AA47631 DD63BF72CF07D3A718DD6AB95ED187D919ED3F173A464CBCF3A1CAE65266F18642F3845F9244DFEC A59033BCE4636824920FE36650BA71F9FD960625237B74903178320C8B999478A25E04A8CAD4D3EC B54C1826CBDD5643594EE55F07F0EEDE18A6E392C5B989B5465FCD1A86DD4477DA4AEF6FDA8CD363 A808D23EBCB36A2EF281226FD0BCB0A0EF24C71ED24266E40397D1A5863C547124DA6BF596E30011 6005FA21FD0F0976F119ADDB8E95B5380CB51B4E5E219C2CB4769E90FABE6853425AF11E4A7F29E9 00085B8AEC2489F07B588C4D6DD29BBB06F2ACFC467CE5CD3F0AAF7A215C20370310F01E4B5B10F3 D4570C7A6FC9C4AA074A874DCD04EBD53D03E511B2FAE76B34AC5EEF7D5B50E055A49AB6461FFC42 541C2948E304A29C3C08798DFC13AB5F7DB95A0F51D91B66F4182E7858BBE86E5D19B2F303B04327 16BAD69E1B817E78B646E581E2A52FA25CBB43D5ABFAE2E41ABCFED31A0EBC548EDBCA39B4200DF6 05366409ED0E42468692C3C1126231E739AA88C6BD16A56C62249AEBE02F0F79541F64920AE4C942 95179A6F272AB83AFC011F11A109E472093B1101FEF61B04BB8D11535BFE994858B19961B10F4D5E 6228952D697A676A0712A70678D288F3E0E17E756AABB8173C6C0D19113CFC4151FEC2E7737E70F5 5B1D002AC76CBAB18CC55655BC4C759A4E54BF7F33558F31AF8148814F27E24877F40A4A34F3911F F3A15F7D07231165E325D62ECB26B7F229C5637303A451F211BAE81FC87AFDD529FD05360B98EBE1 05D72BF444BDDF7A80F0C7A3212F36E7CD6F61947E3EBFD84B4A39F85C103CDA29A2D96EA56D29E1 FB798710DE64912DFDA45AE9F2B7E4316B8B7D1DE4D575EE8E36BEAFA3EA431BB9E917E249E78F07 CD9E8A0B95E6F4148D7366211A3CB79C461929C3538C2E54DD869A082C9E50A2617930896AAE8E33 A93B8D7E725E2F6C0C865D97D20C50E3806F08C598D9D976879A8B12EC441ACF4386929CEA07FB85 16F0EA4225EF4C42F88280F7D15A7CF54815B69BB2331AE602188FCD9E80E1B257DAF548E863FA71 91A1E4EA15FC354CA3C9A8EA0CED31FDC4834C2711BAE745E6FDFD4C54A373DDC146658D2D086969 5B0E91ECD20D4062872BC14F0526DCEE3F250FE4E615252E522276383B382E66B0D3932D07A47C23 BAB39DE68EC3541F85227000D886EB7191F0350361ADF6CFDBCFF657BDCD9EE53DA9F64BD7823A4E C4FAF24A28316B2DAA1421931DCE2821DA9EEA6E0CCBA7A397D0FB6C2277CFBF70CEDB2B41A36F12 2E7191B29AFE79C5239EE03D3A0D125649B4E09E91614CD92C7F1F5C086E9F3794638F5E10178364 9AB4F5020CF2C1B585AACD1FD102F28B65352A28F82386FB0A8B8F6508DE129DE32748A371C6EA0C 0D35B4B2ADBCF08D34BD4B48025905402400482269DA9006F052726187572556E7D3C60F9F4B8624 D1B5812A10DD644672685711C8ACAD1E1C004DB5A428EC03DCA2692056D64116228D486B8AD66465 70E75CAB6C93109A00458E532DE15111541769C9932EC672E43743EB22383F590F63660FA53483CF BF17086A0331B306F412738455B49C46B3D822E1294D0C62C5F805CE02A82F21CC36E8C7EA737C02 6A2F559F7375946E89AA02EF96A5102A7822F3609FC75B0CD60579D39564EE3082874A1E7F472C88 EC830F31E281DC618D39B3F9895FB3BAC49F8F5C0D5D6DA3EBA76567CBD09884869321514D62B70B 24BD92DC1A0F9E1D24B885E6E6EDF7DCF81E9FEAC4CAEA37C7B6505B2DA2A07490DCC3175943D516 E2533BCBD31810EE81971E311D5695A3E5AFE15E34DA11DEB353D4DFCB5CE2D8FE88D812CC5FE232 099F9F147CC87C47E017FD43C6C4B4657AAF946D4625B1ABAB856F0BE4D22BE1356A8AE9F74A3223 3D173D16ECA86557B1DF2F48120CD16D028C9D403DDD94C00245BB774F35C0A33317B641B5AC6BAC BE1437BC11FE074BD53174CBB706F2227FADD928405955A40D32A3318CE3FDACB621FE8B2866C709 9F8863D5A712A71FF67E8A6001C388A3B0F5B4FD3A05088B84AC5FFDD155407F683B088D18394289 0D2493F608D12CBDEE6C5A4072A96B50DE71BAF53AD388AB4CC3342F8E733F2208B7E29E0B70C509 8FD25B4409EED781EC50B6EBD34E8C63D04CF2740EA628E3EF9A4462F338839A5EA90428E57E4836 4DFBD5EB4D980771B3C358D6274E83289ACCF4DF02DB5B476BC64F2E4A0D37B7FC7816FD3E742F74 84A693CEDC427708851C18A8BB18C0357A21A84E24B14F0B81D435CEE7644B62211F7943BB45540C 2C286FF0E7A869C7448C2F2A051695C98B73012C300BFC0E0B49B73AE834956D88934570EA804A80 5DD54487945D2638887F77181115C14E4D95BF6C4D55F913026B26DDC62DD6BD3CA6383B535D7EA5 CCA880A363A787920555ABB2EF8618FBC13EAF12E90A36A68156BC2D880D296ECF645A3E2D88AD20 C22A7F2B621652870F4AAE48ADC6465F55AA8C65E4474875BAB83252E0060FA6CDA59951B70ECAB4 ACD16C97E3E0CF54B566481871747832D607BA6E16852BD760D55D4D10AD2C58CD2FF25B162B78CB B971DB3477F8D2ECA3EE9CBC90323B2C236E375337EA0848CD7CB5781A2B0A42DE7E4D99DB27460B 26796CEE129D23C76794B7CE21C13C7D4A998B752C8CF43A4821B736EBE246D2A2BD7BA3351FBCFB D2E512A576B0A065241AC9C40151C4DA7D06C581077ACB4C3A7AFEC15FB5F5B78DC78535B79568D2 60A99B0A0835EB2906B749EBB364850D5B24F98839DDAC5A19FE5AC3CFDA91186287F22088018BA0 6C35F680553D7E5F3360CB9539931ADCCA910DA7AF02473957F1EC9D9492C429270D8B99E0029708 26FB1CB733512C696D3BD442C84E0759460AD00B03D5056C55CB597DAECBF98B422C75CDA119B062 FF5FA251B1E31AAE5E2A1DC63241CEA9236733789F2E9AFA3AE6326D8713BC7B35C5FECEE088DBCD 225A91BD5F851D954C8FA91DD27611532070464DF076DED556A3546C08B4E2082B6286A60F4390A5 F797427792D1AAEE2BA3941F6FE39589BBBDB00AD959F06D85077311D1CE96C271A8A52FFDC6521D 3D87B7EBD39B0A0481FB90B65DB562ECB94217E830A39E1251CC8AAFFCA7D65BF373C9D72870109C 862745D0DAB7B9A4A8BE2145B89893DFA9DF3A29EE82160CCEF63759C9D4043A92E7C5F9E1D3107B F32910E9DBBF9FD4D4C949A96B72C420C1075FA2E6E376FA49ADD0866F0E0BFDAEE810F0807C1819 3CE19E7E81DF48E421D816B657F6D263B0DCA0EECB983DE88F0F7275F849B32579E6B4D47854B026 122CB9433E9E94C994BBF3649601CF9835FE5F56F090390AC8212A9AE61FC08CF436D9DF101EF1B0 BF8DE6E72877121AF321919AF90F53BBA4541541D222E7B40EB5ADB9CA202079471F3DC8FC2B3E83 C91C77F0628CEBD06F41CB5F0D45E872038EF0B996138A32E9CCD746D91FA08D6DDA83B8BB22AE58 172566FDC0B23642DCB3125846504DD6CD8A6D9C718005D8EA88C68160DC9F84406CBB5B6E8477FA BF1D7F6CBD9A4DEB2CB2D4FD8E47939D31D3F4F229FBD32A61AD4EA360BDFC1D65C2874C8F3B48D7 0ED7F7605B44662C9AF75815F647BA5C9801A3D4F633DF5ED8B5727F59A37D24D6D57768F81B8DD9 7143A39240C4BF37D374059C9594B7681A590E001D7ADFBCBF7B6CFF419171F8659A36DA28BD125D F1BE74AE67F2220F7B45AAA13F97D9BE9C1AB7DE04F2190C12BDD1A38289E36C5F811CD34AC2CD79 CE11A39C46C3D79D073C9E132546BAFCA615C18212488E556EDA969688FAE7D5DEB7B7C4CED3965F 449C59DC99F30110B9922D17258D0A749790B59432A81DF94080613D0C867BEFFDC9FAAD481021DB 2A41963C1E6741D39DFC6EAE2888D3E3C10DD03549F15CA0E196C496CD7C54A982938D076BAC29C3 532A909B1C1B4DA819695EA5A60BC00B27924E5F7B738AEE0B00005046555AC34B5793CED3419F1F 0DD0CB2AFB9F9687BFBBF19C2F048EE1B69D060E07192D8A30EA81E7C18808123A9535044B0F9B97 53848A56ACF74CA8422A86E0C520C5F08DAD0D798727020D92EAD72E617436CCF46F850C459565BE DD2113730BCCC47957D6FE94A957D7CE041DD22F49499747F69EDE674DB15062551AD073E955404F BBB0F80FA5BDBCEA635B2B437DE0AAD6422ABE3C354E312C27E9136EAADBD9C922BAFB6AB6DF5021 CAB56CE07FC11AFC3C620148B7BECF50F62CFDC605D893931538814A1EEEF75E7A4FF61C34A90101 49B7C93E442678CD841073516A4E2AE298E9B33CCADE663E51ADED4EDDFA8E12139EEA5481973B46 B818753D52DA6399970B71FDC6F7918E4E4A3628B083EC9922433AD99E26D0238B1CF66402E5222F E0C25E5EBFC3F839885BCF2D16542F8F109503311C6CE80B29B7B7036A1F15FEC4761F1F66E05578 75412FC707E3F73E916229F8D0B6BEF0CF3ADF6C8544A006F23A9CAB785453A0C5308BB4A3F1A722 9427BEF3FD3AF4F72B0EA6AC62DD8D27F0F0F6D1F8DE6B9FE613473C8F9341DD441E1EE757CAE9E3 F5823F4317A0A332B7D3C122F34B681A46AC7B6EE2CFCFCE337297C02D8A2AC1C164C45C06D24E3F 0E34A366537875CB47BA9C1FEF822BFD0026688EF18C3C2533D08BD09BED88EF3D291A87539BD5A8 F50E7E5350662E053FD5FB6424960774C09A511DDE7CAC206EC3863D61D9DDD8460A0D1A7041F6A7 D7D269ACE95122FD5B6F78CFFE75D4E27AC30C49902E17D8EBAE8B4371C5A6D658106476F57BC410 EC523A9DFC321E3DAAD06C86B08CDAA8FC513CCA1F348E1F7891A31729106A133592FC49D6AE8F48 2BCB87F815EEF89C900250BEE5E7440315F05F1EAB1A243A1DC9747D9BCCB11AC97E0427B8AE0D85 2DD07A29E60CD758497FAA49641C1C87F2EEAB75701601520AB7377B5832B4CDF730F533833FEA23 810215F5CED3A3D2DDD5C6E09D2C1372F9C9C398C9BF53BE17C6D8C6391AD9DB00551A88335B4F17 C90B1F93A895BEB5BB38161E2C999A3550968D0E825112F1E5BC2CA8205214005D234415C1BE18D9 A901DC3D7DD23970B9248C0E1B3883394BA9DCAACAA839C97044B7E190EFE457360AEA940D61091B 4EB2000717FCC5768F664D536B7BFBD867BEB880FA518197F7A936D1249688BBC313197AFC5D4273 198690C3C5C5827A77DB5F3315DF7C66D0B7770996BFDEDB5A5F81BC20AF0CACA5C50906D8C55A6E 42E49BEE7AD5DD407E9C256F2151A3335FD102FD970D9A7D4F756A4EF161A7C773AAB8FFB63AF09C DAA402066DFBC7B2EEA032893655EE59F3F6D54B8ECC37EAF5F5628B2FBF6182F15746A8DE9A9D47 D5CC6ED05C84F533BE40C0ADCB09448C46594147CF55DC14178B605C8F3CEAF1849192A3C660FE9C DE62ED49152A88334556AA31CD9F60F07609B046A0A9FA87D823BF3FAE666EA92F348B27F474253D EA96BC7158BDE6F2E8617CE71AA69DDB99797D1DAEFE81D4A54E790A30E595E284D2D0F29562CD6A F153137676F08CB29324548D00E64398E9E4FB1C78FD6E6843964C45B67D81BA1B062D99517A34B9 C312D71B7BDD2D77E7E68BC335C60DCCA6895F94C422BDCBA910713AD0D9BD81E288062838B8B711 0D09A4C687EE8BC43CEC6D9306820B778462B8F647E0BD1AC38DC8AC5A902CCFF4D3CA00BD3CB326 F2C84BBDE72230590E59239EBAC07FCEAC808E59F77C805578CC2CB7904EA17BDEFFA7646ECD183C A3DC1DFBF93258267984AE381DF783E203DD8890F0736359945C3D50511A8E7AAF8819B6E3FC71D8 22EDE5718E461C799090D3116747CC20F277326B30714B8CB788A16AA1092BD9AC23D98C3AE27DE1 3485005AC9DF490B93F245D6F8EF2E67619A29C031FCEF50D800CF6683311ACBBF85A98794C77D7B EB073A19CD5512AE5A9147EF976A36EB965083FA48F8C9DE860174818477434A83AC97F9999F9BD5 E406A1E76EDFE1D316E31888E881712368C4C3CB639A115A3E6335F784B4F0C9204C1BBE064B60E2 3740DED48204079B15CE80F557CEA83F345B6DBC9A414A86ACD235A936D9142E5C2C824EBACBA4B3 3C349B0E04B8E16AE78B66697546429E3C9D1705D4DBFD121278C63B27D3A184A1AC2DBDEB1BE412 379EB99069D11CF102F6CA69A7E441357B284227F9AAD645C853BAF627A884DC1271B8F0F2D28BEC 608141CE484F0A88979A0CEC71083937F1E25E0EF7E5E94F3A774166FCA492A88A2B46F118248958 2D16AAD1A157764FF931F3402AE542EE641E70ED5E19C429A11F8D1E108E044E07A7CDFD52260483 8D080EE2710434587789A34EABEB855074472CAA0F594A9E30AD9C3755C16C7ADA4A3B7BBDE3AEAB FDC2C2192DEC91C0143050139721801BF72EDBE78B1A684D2FCECEBF8813A74F872F1852DE29C81C 797A817A3E6073109E07791C7B9F3196FD1546BDFA34136CF67E8278A9C09DC9D149C9718AC0E6B6 CCF0CD1B446DA82241BCB48C13E74D96DC8723A4F4A883850F8D76042685B034B0AF478E02E0191E A2820F327E0113BF8FADA1D29811D25FDB47268EBC8961EDD0B47F2EF2DD9941094C637EB8849568 A01616B9FF922914F4BAB5C3798DA5A78D775C8946BE0CD34957E4F972F56B5579A0062E5F0A3A74 4C4254413D07A630CA51E638DF1DDFD6E7376C959EB1924A11FCC8EF791B0EFAB668DAA528E848B3 57CE43E8B86D0A34E01531CEAD72030D133696210E0C1282485F6F2391E61904EFD996D5722482AC 3FD20D6D945ABCEA1D28DE683511B17E9E573A54E9C0DCBB0E9D18F33C9E4ADBDA524104D732D8E9 CB84194BBF2F93B5F3D16D54F449A85B3B6E3536567E3E57E5E49125ED39E2ED0E2C0AD0A08AF241 07A4829408553D6F4FD08C5DA2B785CA5A7ABAE7B9508DABEBE81A0BCEC9CDAA8AAB9CB711CFA6C1 6E71F2612D0818D8357C52C12A573B66985D052106264EFB96BD93258CA086BF48D85CFBE3C3C248 F6BFD839C2ADE5442F285A80DD29148A9808E5B733EA1F5F4CE4FB2A3C6FCC58E8D268E49178BA49 5B8BE7F3DF4775A03BD0F6B28F730CF146A819032769618AB056DBE2BF3D6DE5F44226F2F3BE95E6 945214804C0D11857CF8C31578A1364884C16A9B676D86167921059BDA50AB8C10455C3B8997D483 C4B8599690337AC7A7AD63FFF3EF5D1B67F2B8B2128C57C9AFB8D3C753F02CAC83AFF82490C8411A 0E8131F154B394C625A251D688F88E396969E576751C580CA70046408B47E5139E5C4D0FDCFBEAFC B4B63428792EE7E318DD8366BB1E3A563795924F4A10CC8E8B85971BD412DC12708FF1215F715A15 99CCEC8FF74EEBA34FAC6AC730E790E3497A4B6794F8BDC5D3D6A0AF819B950A42C5B4B53BEC8579 57DAD79BDD3265CDA3DB3BDB57EEF6F7427DB559037ABF79FB5048CFE699EBCC7AD54DEF337D6D15 736C32D89FB4ABBD44CAD6BFABD26972ED888D4080F2CE1D1DD81DB9131A70CD085874AEDD920DAB D2DF39B7B8301872B0224668C9B83CF3DD5322A0939C8E539A10DC92F7673FF3D6624C03202A1874 2DF7CBED2139833020144F52C4B9C6D9C00EE01279F12B117A516A5F63E8A487E7104DD22C51A9AD 4F84C57F6C60E5FD249565021E0C734B1F6C1F5E002BDB3CB52D0994C556A90E109F1B9CD9220AE3 67C119C0B517195F7A34C34CC896C1B86E6323DA27AAB83EFB09D1D0899BAAB39332B22E48C1131C A1FFB8D94C0D3C5EF81DA9B1C4551F226F816716245DF35A660889F70D21EE09E2525EF2ECAAC681 C5F5D07692B6D933A4E74DFD6A01D285ED8DE7C0C8C43013D0C1D21F727F7E5FD957D84796162362 84A48C12B02AB8B7350EC721A7D44014DDE0F04CB516FC22AD865A7552D978FF883AB31A2E6E8465 D5DFD66F27EF29AB94C9A2D2C0ECD6510E234A4657BD6EE58D8F01A97541336E4E8B364C698B3FE4 0CF6CB375DF221D5EF1757E32744FAA0AE3498DEDF616715962099B1C3AA561287838D21538CF002 6846FA72D86C33244B839EC63D791B8AE88C9C86062FE84C902957300E4ED9FC8DFCC6E26F522D99 AA4CEDC233A5FD75B6C1A17F2213A09272594B6A52A2BE5475ABBB8E23092196A8400335ACE63551 78EE28CAAA34706303A33A1E220AA648F41C822025E2779A861A45ACF5E99A0A6C846AE1328D2C68 5D920FD29A2D41F10E49DD3B4371DE9FFD25C55B33A1071262A79A91127E6BA40CA6D2667102AE82 8223BB5A9324894FC335FDE30D9E820FF8550209F6F0F4224CE7133C5289C02CD70BECDC3B1E2F1A C874B90BC518A180A1ED8CFB094DE78DBEE77B42BADFAE49D3FF1EBE7E0BB148C673D92AE5CE56F7 A5E6FB6AD3AE98F776735CE3A9668FA34EF42FDEA2B615705CE6C3090E9BCB4A690C88BA66C12DF6 51AD065B12C36D5AEA5C774A7E53A88F1822B2BD430C961406585BD2A5165A9BD39E2C717033681E CACEC13133D94E2E89217E6C301EED2519B4932AAE8858DC1CF465DA315154A017C6AA27327AF497 D4FEF99E564AD49931A9E57F53FAD918974F0E8E87BC72064046C819F2371BDA383603D6B371AB6D 51F7BCEBD832255BF977837E8766D3D9ED92EA70764C53B89E260ADC415E05919D4EFEA0B7826827 6FA3A5844EB0A66DD261EADA4FC3836355249BE8D506839364B8A2CB7895CE8228853BC2715F8FD0 6AA5691D7ABE5E4E2E6BEB4EB1DA247F9D2C3D88C2300F2316C63DAB9C1223B1481B5C94D3A38C91 DAB2928D3BFD3480CE6202CD3E13C8879F1C67EF0A89E7135A4103DC6C58CF60AE60058EB29D6DD3 2EA7367624815A222BE9F05DB8D2451D110DAF352E995105F24D0E56BC168BC543EF7335CA8D4EBC 5B4FE119ADEA3E342E7BA4F23ED196BAC8215CEB10B4F1F7C93AF4CFC6B88E4753C61ED5F3CA7397 CA89AA133EAB2A287608D2FE33CBFBEAE29B1691BC35F7E72AB6D958F06AA3023C633D983F97B08A 846A0D99D66742891D2AA152ADF0A4BF996E22ABCD6E532BA9DA53970887A282D4EA7A7E15ACA15F 5EE3A88A99D7E4D069DF9EA55D340AE7622D764D2F50B3917956DCBA97580F7DDF7BBC45356145CE EBB27FEC5A3F9AA5455F899C3797412659DF45AF87D26A57923AB3BD1975A570E7FEACEBDA3A5099 4A4ECE85EFA2CB883F8ABA5E60F74F5E022385C756D639A135923EA9EB09D8A136442071F8BD01B1 E5B88E0622D53DA2FB6C1054A45B40BEDDC805BB825DA4345EB2AA7709AF2AD49806F044C0A20CCC DB71283BE79DF6C4104BB4599BFC9EDF219F1399FE804B12F010D893F404CB8EFD903F35B37FD80B 97251C59C73CFB89634B3EAED136986F9D946B719EB04B5396F4AE9C135382005745BFED67DA33F1 DD507DF06AF64C84305A99B731FD68879EE148D4C8B1DC43178EB4BFFCACEB0A6CB0E1959775191E 3AF0459A4FE0AD307ADE17A9E930916E9D579E379C037D575ECF7E0305B73EA2250B13C94D18045D 2A4C04664C5FA789C7A0098F165EB3286CFC8B882B39999178F7C74F6E45F8F7F2CBDED4EA9BB535 B3BA4F3C72006BB9CCD2F2EA58DC820E723E1987E86DC3C483A7EBD4ED4EECE791877102EB3A9035 93BD5DA3A3466B9C9E3E069B85A473E41549E763740FEAE5BC4314A601BA9CD7318ABCB3078DC2F8 EBCAC29DB2984B08EB561D37B767BF10442EB93F2038D91F46E953FE8D265EE8DB4D388EAAAAEF68 62FC9DC0620A21400182B5072990C9B9819EE14C2F9B8999A8771959C2DD3AAC2F3CA5EAA5DCACD8 2A33AE51C470CCCB2DDCAF24338AEAD5F7CA866388BF1FC62D6E7A6D96510C761B7EB58ACAE7DA61 18154AD5F2DE54C6775A4D8DD95A00368DDD71C5FE0F33DF6D52B6A2F163473278D2E1F1CE71E355 2D73D1BB2D9AE9EFDDE947598569A1079656C1C7CECB6706DE4EF3F442852DC2D97A2895396A8791 D80E45E8DE2D52BB8B7D88D2C3F49FDD03BD83C000E762E0DAAC0AF2608F30917EEDE517CD595008 0076EB009F602C51B3D8A794B3DFA38BB416B91E6A111A0852322C4FBD25DAD95ED33C3F996F67FD 71C4DDAD6C6112F66E587AE642E8EFFFB0DF0D1D23AA307D3129F67C16B5A17569FCDE2620F70AD4 DF94B1438B4BAFD1B311F995DB04FCAF4C721CBED94FF66B1DBD900BC4F4160AD1CF55D6C5F74019 02F32D62078B05975AA71C4FDEDF656966A0C1DF25FC4DF61E218D9A1BDF55B6BCB09771F6C8C6F1 64E7D06C06C094F99CB068ED782DDF291A8F236E6EB50B3117D3BDEC32E981CB5DDA0D72BA79FB72 EA3D88A87AC94687376AC4604D4C1473BC05BF263ADAD77F3EAD8186D66DA6298784228ADAD52B5D 3F4CD38CEC4E8D7B61F73DED591783618B005DB67171B151786B2C8B7208CB5FCB46471F766E6026 C8B7FDA28D251F399FF004ACB1AC2E5BFCE34DB39CE6C265E30AF64122392E77222A438A79B6F828 A83240961C9C9129C0A1F43FD3F0A27FA203321F7864291BDEB55E1991826F012E46945164388A6A 60A67823515F068605F3C660C0B46B0948A85A87CD0108DEC3E57D9209C1DF188A79985A8151F0D2 D39922A41B214D58C2B63778C412DAF06C35165B6B3769B5F33C7588955AF608F05768B61887585B DA3A49E430181F789ADECB4E90ACC7188CE7932FB61EFA6CC6B5CC3F40802E0D33930A3CDCE226ED 6B91CE3D7BA1AB7A10FA0A346A8AC94834A5120C5B3C6EA481A8A462B499731BE63503DFB76C79B7 CDE10E9DE33504C778C96B3FF0D6FEDD3E893181DC73DE591FAD7F27493993D0673EDE1924C3DB66 DDB780AD7CD9A12CAADBB8B8DB2CEF92AF4C081219B9504CA74EEA27ACE7D345C52FBBE33503D596 87B0FCB863EFD3D7D777251E96B3173BD7C9B01951052F7946561D5412432E63FCBC74D664B1CD13 DD66E1573148FCCC155038272E053E2ABCA08FF984939BBFE02F052CEC6F6C4CAA6E9DCC3F281DD3 F7BEB819C3C122E7ED00BCA391E2C44E2CDF855D8E8A1E7E738A64212864F29F9FE5046BD8617A83 A1AD080801F9BD1419A7CA274C0B8C8C138B0D7AA71F63DD3A1B0E29EF16BD5F8C5CC636E1E2F69D A1CABD42C65B2D849851713A356F28D00B908B5DB61AABB08180ACEBEB679FC7E2D4049AA4309BC6 E5725A0D9A8E74C3E607C1EE5C34C2AB3D1610B8B49928D6926C530CE4700C7C50E8DF0E3EE1B04F FE6E0413EC2A31DA32F18600B9BB455B6A722E410DD8023FFF9FEB30A06098F4761F4506F076F988 B8C5A1FF827C5E7E95DC19AA5D4BE4A1724BECAB3222173D03560B9771DF7D3B208050EEA13DDF80 14378432FE0430F8FB7EB6ACE1EA82F2317AFCE8D2B45A65B7784C9E13F1193B6346F6A352E228C8 8A4D55D31695CAE971BDA2FBCC17960991B8E60947AC99CF2FABCB79A48E16283B2BA2164A930740 A9D18F0009AFF67DD34167BD41196B3D5DAFC9E1049CCA6FB774209DEA7E2C42F6E65A188D24896F 3653891ABBAB78FD1C23817CF3C5D8E3AB5F64D379282D2BC351525E9C76B76567E08A01F1E16255 0378016066F6BDDCB6D9E5F7D08AB20939EFAD81CF5E364A70D65EFB67B9E571880C3FE2835A747B A63C62FC210735A2A3083FB9DE151D2E6E679B91C71D1DC6314D6CF5FB5E28ACA83FFF557700CA6F 21393495BF37F483773475E4A01D4A13CEA3AB3F3A48B732A0EDAD00D357E6FB319F9856E3C60D8B 5D12CD73DD6E781198F4E90AAC81D3EB4F81631C6CE5C0C15C10D3EF2646CFE66DCE4D96E9BF865B 757E8BF6166116AAC9CBD2F3740A4BB774C56929682454B42D94AB588F7F08C947B05160C69AC734 6850D92EA778FC283C8E426C20B5298872676067E9514628EAB2945EEAAD7B0B14B5897AC72E85E0 79D14BEEECF991C3B5520425DFECEECE27074E88764123B44DF55D6B0AC4B5907BD06A1597042E38 1620C3FC4FC060055F44CC990CB0CE4FA3413E25EE2946B320822602693D0A84A903219CD5BD4D80 A9E39FC7E3A3E005836161BF14BCDF1CA8CA53ADAA0EFC8EA9099B09F52B3E41D35D45ADFDB07A49 D728FECD98878114E540AB9EF742CD5C9D460457ECE43DDFE1A5D86E4D18B23CA9321641E132C15A CFDB4160FFCD520F73B4953548FE979B1816EA0898FD5CB960B64F2D3825E62D5756E612E21DF873 1DFB0247E1EFD2703734B09BEFF822DCAA6D0E05A56A2460D8E6B77BD6318B449EB09EDD7377266A E07FE52A9A487A419ABFCC76A68316E08B80BA83B34E9E47DBDF4579BC64EC21360EEFBDE14694B7 17F729A6BD42BE390CCE525A5DA99E98F34D9A7F3BFE9575E801925764EE7B1DBE3026EADB091F1D 55D7FC7150F6F9C7A0B018C60B24CB616A38179D8F87EE7AD45CB396BE8E80C28FC165D71C386E45 81BE50C467EA1A136F5524161D35B177A4B87ECD98738704C1AAF35511E2774A5CA6F552ECE4F1FF B439E130E4888A970846B49C6DB033B426D4B8546C4B8EA3E664C7AFC6E957BD57B0A2DFA3F14A23 930FD17F2B8203D0ADEA1882229024764251D4E74709C7397AB4223D8EF5323C09861455D36F55C7 69048ACC0295ACC374B65000F7DFC1EC3A22F390A5FFFE871760BF89F37AA22397BF0675D630D2CB E1BDC2A0897534E5E223916C2A6E9D012E93955D70597A9CD89187AFB4018A89F828F4491BE959F0 A387773E61B44748CC18377772089F99D3DFF8D8C7B2E82C34F4B9ADF5092E4197C86EAF396CAA00 F8CD06FF2C1B1B46955F30A6898F7AAC6AB3BA2657C41F972C7A23F76EF0382A4817F362364489B8 B009BB7147C7A1B44216B09C2731873F15E5AF07B2F0B9F35BC176ADFA37A0D668CD51175AF4CAB0 4D8F2E8E3B758C89A80A372DE05C0C4BCBEAD27FDD7A4AD65D4404D1D70607833057E12C1A7B57D5 8791F7022F156B273E41BFED870F73A6DA20ADA11055A0F1C7F0C7FD04D5E3A9FBBF578356598546 DC94211B501E13B5E8E3E6C2A7E8EFA083EFA69C4720AA78874BA25FA1DC6EC16BE1F98BBD6D9C7A B9BCD387E18182A48EE6A355B7063CABED163499F433089FCA5B23C80049C32CBE669C518850144A 3A22DEE14676208C871E163013D00F8181CBEAC592FD328194C24E1C8897E43B92080C2F0EF20896 CD42CE9C7E7F7BE4C3F10797924923A5BFC901238A7370B623561C831153E1B0D99E8B7B0880BCC0 98403F8AD1D28D02A1D56B587570B761B21BCD31138BA52D5C2BD8C44E60CBE9C4CF29AEAF10A7E1 3AF3443CF7E59C5B2211C348DF9300240B7DFD026C86C6FF0DC13CE702A16FF580EAAE28ABEFDB6D 74857E0DAD7A133BE197E1DF368C83336739E180F62583D737B4FA1A7768E8A939C1B8B87A6EFDD8 CC7A7ABD2FD67D407DFE11AEE68C2A018ECB13A7962647AA73FABE65C263B99F4F64F8E783008F63 F08E60214FB8E87BB9F070BA1D525963212C969EE445489D5BE6A84F891DF035685B577250A04E2A 072910D98A4D0DA55EC11BCD68D6DC9FC9406AED3F29654A281320B832E55C4CE18148567C89DF73 3618F030784B8E33E279693662471ECDAE924EBD4C70E0A195E291C6326878F8F9D456E911F9097A DBB6F65F063A1013A93E5F03A40DDB2B1A8F5653F4B9CE8D97DE9697950A61E7FFD9C1BE4BF0A4A9 B0D23033DECEF861F8105E0BC940D1AC0241431FFF30301EEC0AA5A92B1884D57784D65FF566DA67 F63E22F63CAD3B3C79AB163E06D3815C5B0FB77190A9AFDA28F20AAA7B27211687AA70DD145D991A DEC5806C72CBC11842E71520FD506131FC2B1171707FE37B0088CF0741BBE9B1DA3C20B483C1EABC 6B8D001FE905EC49C083E743C80EB61F1C07D2EC900D29F555D1746C72E4FEE31B8C9BA2FF5AD86A CA7C99AF7166E10BA511EFB374E6B4B6CC60A1BC411A0F0A99A235717311F9B5F13DA039CC809CE6 7A0DCE7E6789DC3855612B87A45A22ECDBB3D27A50D273A79DC536885497F45162EBDF611B28F08E 5E87F4DB33A4AF35EF1ABF036D0F20408C40C97BC7CD0C1BD67C63C8B579472C31DCAF6EFB3340C5 84EA880860E8270D0C9DE4EDC9A5ECAD002F8FC89AE35B5B1BAF0EE2622812722171C7EBE7456430 333B2BC721AC050608A248B749FA14425AE342A372ECEDC8D8575885FD9F8A01A1AC49600DF359CB 447240CE2BE67E2A87F8C667714CA293C73C32FBD81C68ED378098B4AA2F25F6833BDA37378122E2 B42B0D71455A107A5A8E1ECA62F90B344A721829ACABD7508CCAF5A5E4FD21FB7835904436332C34 B0C76E8D5AF8FD17DC4905B9240FF0A8463F382A4F994B983EF7181B2194C408BD78420EC166036E 85834828815B1F0E2B86054302022A579B326835E5C3A5E6004B65913AD3C850087768B98967CAED 1AE2D57ED0F571401B49454CBD6E0C0A56184AB53AF115E8E9EAE3DFA21C043ECB858DFC4719711E F0276CBAC01060B468313C1F47A5F6D19827F0B2BC270A507053D3F1E7CC5103D851F31132BA7673 C00D8442B969991CBF2170867ED3CBE7DB83FB54280BE9A7F6409442E25F19450AD71303D9DF6C5B 87D94BB1BE7164B4304B6A4D5199B9C66CAF82F77D9EDB6AD9F9EDF53FE4771C77B9E2D0F66A9DF2 907EE8AB0B99A3C84E2A54695E31FD722CF866D92776EBE025A7E782316F31249CCC8ADAE49CAB8E 5EE47174BDBC51912526F12591BA50A9EFE34A811B4B742534DAF509037EE1120C9D34A5A10C3C50 86A7A7FD6725D41949A0CD6B09F315C84888653589B5D037EBB4A7994E2167A8A8C5A83EBBC7B2D7 3885E9CA771D458BE380A9A9C577675473E73AA1B8EC7B403B15487ACBE732E3473F0C657E7667FA 378E596CB60376BD4674F6F434BC0F1D74C53F16DD262F75E1126F0E9DC72AAF172D45927CAFFB78 19AAE5591F8499ACE69C55E540880472AD52E410F7EBACBFC5A425782BA6EFA0314AE9DB2A701D83 B6718CC8A193A881750E5D19764B41EA7F65D5407F8EDB7A0CE18FFBAE859D6A06E03CE95799427E E6CFB40946DC4D91F16308DEEACACB1DEB688ACB8C9B066031D439DF464683C26AA72903F65043C8 24043F42269743B48B9F0FF7F1A03490D0488727A1E0AE777362336E91E07724491857EADF75C77E 5A0E9EB475858069D091ED36624675F318016EE24B2FC58CFE1CDF3B0E48CBAF0570A86919ACF9E6 0348717CEC01D9B06B133785964D25FB84F480F44F37DCC14C4410079F996845C3A6C3F687685831 31DACF9D31CD567909108660E25B31C8A54A7BFF987D8877E27EA80D450A582BD6E14C36D146036C AE2203C923E77C45721931AD20FBB70DA40C424A81C3DF7D7F72906DEC2DCDCC6F48FB94F0B5F50F 1D5EE35258BF057E914F05880F75616D57CF722825988D1DF1029F6829A754629A104141E58AD0CF 2E80C798544F816622D5ECBF98F4FA691FADD53EA9A1C0F888C3E9F56B3AC3AD7FA5DF806B70BC93 104A950594E0C93596577111F806ACF86300CB419EA2AF287B0D8429E8860232129E66055C1494F8 4A33D24E85AFF56A6E0A8ABDA05ACCD8E7EFD2269107B96CC1E541288FFD0844265EC9C7973483AA 5CEE5E273EC905AF86F4E006C676DE7D5052F66602568FFD3C7EC31C796F7B8DC857F21132A5FFD2 C2056BC52DF2C6A05966ACED0E5EDCEF502FCB79DCA3BC0C2D7C08A256611E44F5F5D923FF120A35 9A8E378A68DB20FFDC4B04FD8C5EE9D70020F5409CDE41FBD28B8231FAFA932DB9B7851F2C981BD7 41048D58FB311CB5D5CA58E91D688AA7F96C11D341BD1CC285A4864C8B852945C0E7446658B9A168 89B0D2DBCAA9C3E19EBB69AA9E4461D92BB34BB7C108C054099BEFF7278C55738751A291D20F2285 A3A2B2CB9D395A945FD3ADC1C0A005EF6369B0375B93BA4F30A4C77CC425B31B7AB2192E69EF4C1B 13C6CEEA5E26E68D5507A0A163B2E3D45F1FEE90E6C242EA7A9954B723B68C424F6BF647727E8028 6BBFE003D0C422A4F6823ECB5825192AB1EBB2B1B16A5A786AA7C62CD02624B0CB9C0566627D001A 8B9DEAD47294AC97B0D75AB890A18F87663FA32553444411D96EF29C86E6FCA8636C3CEA00037A74 59D83A715275B77E3FFAAFFAC8F5AC1BA2ECB925B1F81725663DE85830A52E7E465485E22F4189B8 635D6C4B484684C938AA352FA813E2F00E5733DCB2E6F6CB03EA98E5AE658FD2725713F7FF9B0CEE EC80D6D1FCED6A4047CCD98DC0C56BC9B64061FB458D2742FBFB46A3FC883D173AD767E7F5C91A90 F1611088DB87C6FC6FADDA141D8D598060EE144D0EC5BDF3B18FAA97919737270BDED59CFD1547F8 047D075F7CE8CBF1FB63E95AB4D34EE34C7001522D5FFED2F9BFF121035158DC4D011A3C32700D28 364526B06FC48FDE1E1DCE77BC120E93C85EB0C8B6589D1AA97338DA39D4CBB0C2CDEEBEA86EF069 367C53E571075D67E01B5BEE2CA83F27D341DB417A207A9DA8452E2D74B6B27909E976A96C7EF316 50CE7570532C3A9E502ED3812146ABFA12754D7E1871CCB59154254C9FF34AE07EC5033CAA68FB5F 0F64D7013B1976A373DDFC406420012E61F76D62F34D2FEF08751F54E8A2321D38BBF32CDBCBB619 A47EC4A4EBB92CDA9417B695131C99A895FDC7242CF93B29A12E6862871E1D07F6023574810627F5 655F14CB55F4062456C6DAC6FA4121E0C87E30FC0FEFD09F113B42C94AC0045BB6729AA4685D3C31 0CB92A3B8DA8229DE0CE4D1D39F575147FDF2238D243E15CD1BBA7AC2BB3744B95B103E3DA2C9EE5 2B053C200501C8D933CDDA4495CEA2C6C5731AEC14BD1E8CA27DFF3CC1A04C2FE936B16516673279 5E5EAB231CBE020039A5DBC94A198925001A338C2AEBE26C4C3C0242A2697865381775368D34D0E5 6225CDB95A62674D7027AD9C2786FD637D5762C378F2FBE5B44B2A93A4B047FA8D8E2FC020E24258 F3CB93ADCAFBF884C0B17847D7ED45C0EE756E9550CCCB65044572CB04E5C96833DBAEC0C71E8AF1 67A773389CEB9AD55C63A37D5B02986AD6574AB96EEAADAEA4BB069ED66C9421C3CD52514DA8636C 98306CE6B5DA2442304EF186C2C4AF16172AEDA79D25698D3FF457BCB8A8B4F532F4C7DBA8AC6702 9BED6D804755729F68AAD5D4C780FFE432E9038CEFC5FFA9D0B92C2E911AC259D52858ECE3B98CEB 7CB39386272DBCF4020C86E355465EE1A0C956ABD520D144444313C3DA655AFEC31B127788A52B11 9A6CF230880D2D0F9FAF9438F2B2C297913D1E65DA4DD056B72CD1EB5E299F13DA6EC29E90C18D4C 226284369D975011E08DE090DB02C940394C7FA2A9185B5DA872D3237C1042E7B1419F320FE0B2FA D7BE54B21572211A860F0D83FACD214E045FAB5666686561507BB894197D8B9263F2C903D9DC7D12 F396482ED4AB4B8CF2BB5BAA3ABF991984D66650F0921FE26D4F3A278BC2AF17F1270267AD340D0D B44E5B9492E0EC851E85178BEC1BE3EF265ADD71F89B44EBFB7AED2689875AF8D23AE2AB4074BD82 D02BBFACD555F78842D55654AF77B736E42527A8B87E92FE141D4B8AC9F86CDEE43CD8F458755629 7C386745A45D25F9C235436ED1A3F518CB3CB060F9E25F3053A46101F8A47E8E56D12F3BE60C9B24 D6E8CD106B21B918FADA3351072D466A4C611A3A22062654200FB562F8F226541624DD047EE2216E 15A23BD056931A7DBF1AB4837040695F92BE2828ED16E2E3151E8548B007B92040F2CE3E375C5258 881DE796857CB4F8B045E1B9C4BF7E592654E3D52947E66208F3C1068AB8EC1A5EFA08BA5A3DDA75 AF95CF256C26C247EA42E788438AD2F6C21AB08F36B65592E73C60C28C1A2B606DA7247BC9955727 9F7CCC3159BE92D298AE0F2B62F934D3B57BA952B7C9BAD9DC78448A5959694BEBD4FB9635A0F5DD 49A72C12150E2A83763F545B2613BD56E836BD1F0135FFB953160A24095C31EF7F7E5539C3CE9C32 43E0EF46776D83F450ABD074A6BE926A774681D2D7D70982E6198080B8CF113890403AACA80585C3 1050B9FAFE8339AE404F1FCED604E1B884A634C508E1C50B7C64FB3055043F5A3B336F0E0F9471F8 624113A49D197BB3D0D0643D73B9A93AAD1AEF9D6440D1D960537917952F85E063C38212D0C212F1 10CDDE659EDD02D9F0D62057FCF8F65798EC6EE9866ABDC74DA9CA98B909802F38AD7B2C5EB5F682 769D4E3715BDB46DDEF744CE75FE0D38D04EFFF7CF64DCB552F474C8D6861AC30D8269BCAC58B843 15214A035146AFCDD689B69E2529B632B097E4DC6E36C585A8C228C687A6CF9E69DBB752ABAE8E8A 6F880EFB2BA3DE28B126C0357E6ADF9BB92353CA98B1DC5EFF9B136BDDDF4D442435339DA03C979C BA3DA87F14ACF3EA05C07793424C0586B56CB44581C6E969BFDD32862C11C5B561EDBE135A9A5939 EE591266B1A6FDBCA8147D4775F53B9B5016E00185608BB14637DE71B23B0A9D908E9594343C782B CE1DE2409C3953CAD9129E8C250FF111B6C664D96820E059C67B1F37730F858AA9E40E33EC688D55 819B66A6443212175AE46C17FE2A2E1E5C800A803933BDB5577D749CE78590B7F133CBF5B33F61A9 9E478B00E679717299D3B4157E1383436A460A24390781CA9AF2D468CCD08BD6A0A1452AE459C1F5 A1DA700FB018BD928D57344BCBAD15A37F8AD3EC32A1F3A6F21CCE25D73D4E1F1DC93CAF76FDED7A 431B954C154A513B7982A7F72D03E24551E768545C81FF727D5EAB1E6F8B7F850BB96721151E88AE CA305CD7576E47B0AA02E8058BF142C5F6C8D0F8A987070C98C7BB3EF7BF09EC255F6A959C04D04F C456703E17961C88F5C22120C07868BE80D2EBC356B2653F2159675C2F8917AD7D9202FC65594728 374AA869A0B5EF2684D8DDCB8B8EF3B8FC8B04D31FD16C5132C174D9F23F72C3BF891960B1636150 1866C7F7C54B74A257579DCAB97B709D0D4A8B8FE99A1B7CCCF0899D09BECAD1C3B0ECCC8E9975EA BDA1047ED99F3997467150A785B8ECF3B2C6D3FD1729F6AD8450DB4C4B6686B5F5A06C61CCCB0143 BF7C7836D79FBA68BEE6474240DF8675F8F2B780898236BBA20A63341ECC3B02D14F620B91641D58 93585DC32806A933F26F3B9840C95E637F0E233CEAFB31177EBE6BB9A3A0D82D46EF410560D6D10F 36FFACEAC9D735A80A06A5646698A4290D9EB02047996E741C212EC6FCEA3BF7502EE2F3E860BB7A EAB485F1991FB28410DDD46A77A40178D8E0190ABD7817349A50A7EDFFB008742100E927445A4908 10E1FEE2869B4609838BBC219A3D6822C652C5A9F564C7AA7F3A3F934B2D4F0F06A54BF344BCA794 A4D3A2EF5B565D39D9241BC2A5EF7C96A11465166F480017DE4C884BABBCF33F072DCCAF833E0771 D105B449ED23DDC5D3C02DE2CBA45F8D22BA3E1B6842EEE791540BE727044CF7D99FADFEF45FE14C 74CEA615DFB5BB6F7B27A4A1EF8A1FFD4F838A8DE85D488F41E97B9ECE0EDF00604F922EE0EE4ADF 486CC0EAA2C3C60EC275F2792FEBAF4B6BC4FA59AC378212EFCB763CC794D2179FFD538A6C19F5F7 35084AE03A90AF00BE5821CFB9BF2C966B4AF8D66AEC8A58C1C683AD392F1DF20983D1210AB6BD73 9FF130869E652C09E9A61D8E892A86DE1B31BBB1B80239B6829368ED026C645F95FB953298411E84 003C85967FCC739651014E3AE23B578A64BF14F6AC87777A6719ACE6119D6393E8DC9B9C7AC424A7 857092DE86375831DC985ABA2133B44EAD072744924EA4A738DB94D432045A8035A9BE5F9DA3581B E8D60FB428BFD91A4E145D11CC9E37B47179162B6721F02E943E3CC9CE5A14C89117F44E4113E47D 08A3D75BA6E33D52A7A479BB40A41DB53E3A9C6BE6298B2ACC8AA8A0CFC10954EDF1D3EA9EE3C5AC 8D8C4424603C5B41DB638FF08CD744DD8AF80D1D96587F12AAF4FECAE452DC350204E10740469ED1 ACA97C52C331A823C651E99021A7DCA218086B724D2B483F0484C158D238507834F478347418ED16 B42D30F04C3E1AB8E0C006E8943934B6AEDFA2A5B255F2B41F5EF8A1CA1FEA020A40A8A8AF420615 E2FC6237EDADAB7B8C8DEB09D78580B4C29782EF9551E55CD962FC17DC96FBA80DFE4AFB9806AD98 F06B021F84C35D19B5672E538EC00838588BE19932C79B79F630948E4A47D1C54025FA75AED05AFF A16F675A7C089E7890618EBD3D0CEF29CCAB7F5BBBF5C6FCE56E64816ACA9895DC824E8BBE7A329C DD7FF5925736B8FF8AEC4A56E6A980311F8F5A6B06520E74512270098436D99C5BD9C4BA2F81728B 1C82B52D9E9C33EFE65BDB233C6384471C0FAFAE94D7308B7EA591ECE5412151F0CA5C1F8214CA0E FE6EC698D0AF6B64524C6FF9F3DF6B2AAFA270535F6484B743FF927C0284E56296C8BE8E77D566D2 EC6D45C933C5CE1128BDF66FFD0DA7864F1BB09F74604D2D27B4C7FB1DA5D28CEB0902A32C1EDDB3 6BEEA2D44FCBE59B0D0F3C37FFCBAC595D6110DA77605FF20042239CBC1B7B245CD25C99196105D9 9AB195319A9AE4287A0A46D32F8DFDFCABF792CE8105CF77F0AF50A011D7D58F17696FC68706B4C2 B9BF5AD816C492AE5248EB96622399A3AC9FE5FD926CAFE71279F7677820983BBDDF28625E4884A2 ECEEE746603B1E7E500239FEDC6A7DFAD82AE32A7A4A83046B3649EE86A77A39E5A165C28DA4FFBF 98652943738A6F3C4A83C092DC0A40B1065F429AA1B1C2B1A2DBD13F194ACC00D52E3D4C0A8C9CE9 C2EFDD9708F5CDA6334687D4E21DA5C5C734CE2574BF1E441D9BE03946EB7A35359AEDFCB84028D5 04D7393088C9A7DD1C0B185E72C51E7DD1BF6F7D074105C530963F3E463A98B2ED01DAFEC6AAE40E E63CDF0CD8C180306692D12175F73D3175FADE69B4FA3B98D0A4358BEFDC972D8A26EBF8FEB0FC53 35FE9F528808E7ED2228172021278E0EB68ECEB7C3E6FDD42B27EFBC8D41530959317FF714928F77 FD36FB5723FC5F3890A8D91CF18BFA4073BE695FCCA6294F9B272E29352F72B9F420B881BE4543E0 C45650974079F8BD8D70A1CC24CE4112F201DCF2556325F5D62BE6606F72888937BB54BDBF744C25 E08CA867C757FB314E8D51DDFEA3905CA670E5F478F42033B569A754C686E3FE4F93FFB96BB1CB57 16334F15CBD2D37650D6C4BCB11DDC6BEBA5D33B862D2D9B7CDD4FA537F439DDCB13C966BF5CF6A9 395ED6E32DAD3F9BCEEABEFE91F4AB4F129982165F089F9D40159998F8D737641D6C32CE4DA1AE05 F0C1958EA4D2A9BDA6AA567BCC1F0DD5152624E66E4BE9F45791C0B1EC1E09EEADC0515E72E7C672 A63AB31E8B85EE2EA39B193618427C4134162604DBE8BE3BBA64B4F3A43FE6F56A08BDF26AD4C4B4 6BB12C4EDAE915E47C236364298A637ABCD18590C6EF2C096A2D3D53C48469D25B514A23A6568186 05E255F1B85F576638243CDB4FF8068DEBB912EF9674C80976DD3CD0C75CBB562BD3F3C6A31868F8 40CC9197E4FA01DF1A1422ED16B127A4059D2C63838BAAA0F7F620D89A4450916B2FA001FA4E9C77 3ECA2D2DE2775ECBC0CEBB9CA6903440EB1E4E83ECADC1B5EA255D953F91BC39846692CDCED695BE F7EF5B838A34509B771F4C89CE01FD851E3CC0A02486FA574A1F09DB3DDEE582C27C5FB213ACBC35 C96CE631EC7FDCACE158B5814FA74101EDE2FE917928532AF7476C41857D972CA11EFAFB7CB42AA8 5E957769A16C570CC97CBA01F71E574AFC75C94A99939BC8EB001760829467FB5227539FAC3226EF 68D8E7D91870787C47285A3F08F0386B132024F2008C9C081CD741D691D9E7EFAF47B2BD7D552426 5F40CC31ABE23DC2A26CA215CA49700432DEC497ABDE6EBD4066207033879642B6CA884DA74281EE C3F8EB4F40C89998ED7D4659604E95ACAA0F182625139D9F9E4DFFD97C20C09D88927F524FDE1E3F C8AC0B149F9C4F4AE3F82FCCD553608AB401DA54BCA3A7FE854B01E5C07A20FF9AD6C7C7E25C68E3 92E48C88B5AF930920CFB487092CEE4937BF5E76F99D49289252DA678433A6877B37856C4D3402A7 ECB7C4E6FA9E1595CA25F15279EF185864D44A0389B1FE69AF3C271688B0E2EAA7147B4C2B4A1206 7CA524E7BB570434E1D1F0A886A4A368B93220E33B9041B979000A2FCEDCC494C05A1EA3EA79331F CF6567C41FD5BA08829F094B7F0A1149E5738219A8FEB3FF04FC4A7EE3A620040D436AF600AE157D F48A246B76B05BF836F7BB2950BFEBB9B2B34E1FF7150BA77E48D45ABC18D074906D136D9AED3BCF FE951A7F707E 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark{restore}if \ No newline at end of file
diff --git a/resources/ahem/Ahem.sit b/resources/ahem/Ahem.sit
deleted file mode 100644
index 34057623140..00000000000
--- a/resources/ahem/Ahem.sit
+++ /dev/null
Binary files differ
diff --git a/resources/ahem/COPIED-FROM b/resources/ahem/COPIED-FROM
deleted file mode 100644
index 45bac8b4984..00000000000
--- a/resources/ahem/COPIED-FROM
+++ /dev/null
@@ -1 +0,0 @@
-The files in this directory are copied from http://www.w3.org/Style/CSS/Test/Fonts/Ahem/
diff --git a/resources/ahem/COPYING b/resources/ahem/COPYING
deleted file mode 100644
index 6327b904bed..00000000000
--- a/resources/ahem/COPYING
+++ /dev/null
@@ -1,36 +0,0 @@
-The Ahem font in this directory belongs to the public domain. In
-jurisdictions that do not recognize public domain ownership of these
-files, the following Creative Commons Zero declaration applies:
-
-<http://labs.creativecommons.org/licenses/zero-waive/1.0/us/legalcode>
-
-which is quoted below:
-
- The person who has associated a work with this document (the "Work")
- affirms that he or she (the "Affirmer") is the/an author or owner of
- the Work. The Work may be any work of authorship, including a
- database.
-
- The Affirmer hereby fully, permanently and irrevocably waives and
- relinquishes all of her or his copyright and related or neighboring
- legal rights in the Work available under any federal or state law,
- treaty or contract, including but not limited to moral rights,
- publicity and privacy rights, rights protecting against unfair
- competition and any rights protecting the extraction, dissemination
- and reuse of data, whether such rights are present or future, vested
- or contingent (the "Waiver"). The Affirmer makes the Waiver for the
- benefit of the public at large and to the detriment of the Affirmer's
- heirs or successors.
-
- The Affirmer understands and intends that the Waiver has the effect
- of eliminating and entirely removing from the Affirmer's control all
- the copyright and related or neighboring legal rights previously held
- by the Affirmer in the Work, to that extent making the Work freely
- available to the public for any and all uses and purposes without
- restriction of any kind, including commercial use and uses in media
- and formats or by methods that have not yet been invented or
- conceived. Should the Waiver for any reason be judged legally
- ineffective in any jurisdiction, the Affirmer hereby grants a free,
- full, permanent, irrevocable, nonexclusive and worldwide license for
- all her or his copyright and related or neighboring legal rights in
- the Work.
diff --git a/resources/ahem/README b/resources/ahem/README
deleted file mode 100644
index 7a4fcea05a1..00000000000
--- a/resources/ahem/README
+++ /dev/null
@@ -1,30 +0,0 @@
-The Ahem font was developed by Todd Fahrner to help test writers
-develop predictable tests. The font's em square is exactly square.
-Its ascent and descent is exactly the size of the em square. This
-means that the font's extent is exactly the same as its line-height,
-meaning that it can be exactly aligned with padding, borders, margins,
-and so forth.
-
-The font's alphabetic baseline is 0.2em above its bottom, and 0.8em
-below its top. The font has an x-height of 0.8em.
-
-The font has four glyphs:
-
- 'X' U+0058 A square exactly 1em in height and width.
-
- 'p' U+0070 A rectangle exactly 0.2em high, 1em wide, and aligned so
- that its top is flush with the baseline.
-
- 'É' U+00C9 A rectangle exactly 0.8em high, 1em wide, and aligned so
- that its bottom is flush with the baseline.
-
- ' ' U+0020 A transparent space exactly 1em high and wide.
-
-Most other US-ASCII characters in the font have the same glyph as X.
-
-The Ahem font belongs to the public domain as described in COPYING.
-
-Acknowledgements: The font was originally created by Todd Fahrner in
-the late 90s, and was updated by Paul Nelson in the mid 2000s. The
-changes were the introduction of x-height information to the OS/2
-table and the addition of the space and non-breaking space glyphs.
diff --git a/tests/wpt/include.ini b/tests/wpt/include.ini
index 2f7cfcbab3f..34b46888286 100644
--- a/tests/wpt/include.ini
+++ b/tests/wpt/include.ini
@@ -216,6 +216,8 @@ skip: true
skip: true
[srcdoc.meta]
skip: true
+[reporting]
+ skip: false
[resize-observer]
skip: false
[resource-timing]
diff --git a/tests/wpt/meta/css/css-align/blocks/align-content-block-002.html.ini b/tests/wpt/meta/css/css-align/blocks/align-content-block-002.html.ini
index 4bdb2e838cf..20f2aa68cb1 100644
--- a/tests/wpt/meta/css/css-align/blocks/align-content-block-002.html.ini
+++ b/tests/wpt/meta/css/css-align/blocks/align-content-block-002.html.ini
@@ -28,4 +28,3 @@
[.test 16: space-around]
expected: FAIL
- \ No newline at end of file
diff --git a/tests/wpt/meta/css/css-pseudo/parsing/highlight-pseudos.html.ini b/tests/wpt/meta/css/css-pseudo/parsing/highlight-pseudos.html.ini
index 4777bdd940b..df99ba6dd73 100644
--- a/tests/wpt/meta/css/css-pseudo/parsing/highlight-pseudos.html.ini
+++ b/tests/wpt/meta/css/css-pseudo/parsing/highlight-pseudos.html.ini
@@ -1,7 +1,4 @@
[highlight-pseudos.html]
- ["::part(my-part)::selection" should be a valid selector]
- expected: FAIL
-
["::target-text" should be a valid selector]
expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/all-hosts.html.ini b/tests/wpt/meta/css/css-shadow-parts/all-hosts.html.ini
deleted file mode 100644
index 8fce3b78803..00000000000
--- a/tests/wpt/meta/css/css-shadow-parts/all-hosts.html.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-[all-hosts.html]
- [::part with host selector styles in first host]
- expected: FAIL
-
- [::part with host selector styles in second host]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/animation-part.html.ini b/tests/wpt/meta/css/css-shadow-parts/animation-part.html.ini
index 5609256d589..7d3d4520485 100644
--- a/tests/wpt/meta/css/css-shadow-parts/animation-part.html.ini
+++ b/tests/wpt/meta/css/css-shadow-parts/animation-part.html.ini
@@ -1,2 +1,2 @@
[animation-part.html]
- expected: FAIL
+ expected: TIMEOUT
diff --git a/tests/wpt/meta/css/css-shadow-parts/complex-matching.html.ini b/tests/wpt/meta/css/css-shadow-parts/complex-matching.html.ini
deleted file mode 100644
index 6c473570671..00000000000
--- a/tests/wpt/meta/css/css-shadow-parts/complex-matching.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[complex-matching.html]
- [Complex selector for host works]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/grouping-with-checked.html.ini b/tests/wpt/meta/css/css-shadow-parts/grouping-with-checked.html.ini
index f39eba9208a..d7f1d73d98d 100644
--- a/tests/wpt/meta/css/css-shadow-parts/grouping-with-checked.html.ini
+++ b/tests/wpt/meta/css/css-shadow-parts/grouping-with-checked.html.ini
@@ -1,12 +1,3 @@
[grouping-with-checked.html]
[Styles applied to ::part(...)]
expected: FAIL
-
- [Styles applied to ::part(...):checked]
- expected: FAIL
-
- [Styles applied via grouped selector including matched ::part(...):checked]
- expected: FAIL
-
- [Styles applied via grouped selector including unmatched ::part(...):checked]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/grouping-with-disabled.html.ini b/tests/wpt/meta/css/css-shadow-parts/grouping-with-disabled.html.ini
deleted file mode 100644
index 3d6b92b5b8e..00000000000
--- a/tests/wpt/meta/css/css-shadow-parts/grouping-with-disabled.html.ini
+++ /dev/null
@@ -1,12 +0,0 @@
-[grouping-with-disabled.html]
- [Styles applied to ::part(...)]
- expected: FAIL
-
- [Styles applied to ::part(...):disabled]
- expected: FAIL
-
- [Styles applied via grouped selector including matched ::part(...):disabled]
- expected: FAIL
-
- [Styles applied via grouped selector including unmatched ::part(...):disabled]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/host-part-001.html.ini b/tests/wpt/meta/css/css-shadow-parts/host-part-001.html.ini
deleted file mode 100644
index d52687ff32f..00000000000
--- a/tests/wpt/meta/css/css-shadow-parts/host-part-001.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[host-part-001.html]
- [:host::part works]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/host-part-002.html.ini b/tests/wpt/meta/css/css-shadow-parts/host-part-002.html.ini
deleted file mode 100644
index ad2c732963f..00000000000
--- a/tests/wpt/meta/css/css-shadow-parts/host-part-002.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[host-part-002.html]
- [:host::part has correct cascading behavior]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/host-part-nesting.html.ini b/tests/wpt/meta/css/css-shadow-parts/host-part-nesting.html.ini
deleted file mode 100644
index aacd37b4934..00000000000
--- a/tests/wpt/meta/css/css-shadow-parts/host-part-nesting.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[host-part-nesting.html]
- [:host::part works in nesting]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/idlharness.html.ini b/tests/wpt/meta/css/css-shadow-parts/idlharness.html.ini
deleted file mode 100644
index cc4dd4679ca..00000000000
--- a/tests/wpt/meta/css/css-shadow-parts/idlharness.html.ini
+++ /dev/null
@@ -1,12 +0,0 @@
-[idlharness.html]
- [Element interface: attribute part]
- expected: FAIL
-
- [Element interface: element must inherit property "part" with the proper type]
- expected: FAIL
-
- [Element interface: htmlElement must inherit property "part" with the proper type]
- expected: FAIL
-
- [Element interface: svgElement must inherit property "part" with the proper type]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/inner-host.html.ini b/tests/wpt/meta/css/css-shadow-parts/inner-host.html.ini
deleted file mode 100644
index 5c34edcb01f..00000000000
--- a/tests/wpt/meta/css/css-shadow-parts/inner-host.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[inner-host.html]
- [Part in outer host is styled by document style sheet]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/interaction-with-pseudo-elements.html.ini b/tests/wpt/meta/css/css-shadow-parts/interaction-with-pseudo-elements.html.ini
index 1a36ec9273d..675aa8dff70 100644
--- a/tests/wpt/meta/css/css-shadow-parts/interaction-with-pseudo-elements.html.ini
+++ b/tests/wpt/meta/css/css-shadow-parts/interaction-with-pseudo-elements.html.ini
@@ -1,16 +1,7 @@
[interaction-with-pseudo-elements.html]
- [::before in selected host is styled]
- expected: FAIL
-
- [::after in selected host is styled]
- expected: FAIL
-
[::placeholder in selected host is styled]
expected: FAIL
- [::selection in selected host is styled]
- expected: FAIL
-
[::first-line in selected host is styled]
expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/invalidation-change-part-name-idl-domtokenlist.html.ini b/tests/wpt/meta/css/css-shadow-parts/invalidation-change-part-name-idl-domtokenlist.html.ini
deleted file mode 100644
index c086b128d2e..00000000000
--- a/tests/wpt/meta/css/css-shadow-parts/invalidation-change-part-name-idl-domtokenlist.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[invalidation-change-part-name-idl-domtokenlist.html]
- [Part in selected host changed color via part IDL DOMTokenList attribute.]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/invalidation-change-part-name-idl-setter.html.ini b/tests/wpt/meta/css/css-shadow-parts/invalidation-change-part-name-idl-setter.html.ini
deleted file mode 100644
index 2269f6e697a..00000000000
--- a/tests/wpt/meta/css/css-shadow-parts/invalidation-change-part-name-idl-setter.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[invalidation-change-part-name-idl-setter.html]
- [Part in selected host changed color via part IDL attribute setter.]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/invalidation-complex-selector.html.ini b/tests/wpt/meta/css/css-shadow-parts/invalidation-complex-selector.html.ini
deleted file mode 100644
index 772668059f2..00000000000
--- a/tests/wpt/meta/css/css-shadow-parts/invalidation-complex-selector.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[invalidation-complex-selector.html]
- [Part in selected host changed color]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/multiple-parts.html.ini b/tests/wpt/meta/css/css-shadow-parts/multiple-parts.html.ini
deleted file mode 100644
index fc47c2d1237..00000000000
--- a/tests/wpt/meta/css/css-shadow-parts/multiple-parts.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[multiple-parts.html]
- [Double-part in selected host is styled]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/part-name-idl.html.ini b/tests/wpt/meta/css/css-shadow-parts/part-name-idl.html.ini
deleted file mode 100644
index 27699f0b592..00000000000
--- a/tests/wpt/meta/css/css-shadow-parts/part-name-idl.html.ini
+++ /dev/null
@@ -1,12 +0,0 @@
-[part-name-idl.html]
- [Access to .part returns an empty DOMTokenList.]
- expected: FAIL
-
- [Multiple names give a DOMTokenList with multiple entries.]
- expected: FAIL
-
- [DOMTokenList created by access is persisted.]
- expected: FAIL
-
- [Changes in DOMTokenList are refected in attribute.]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/part-nested-pseudo.html.ini b/tests/wpt/meta/css/css-shadow-parts/part-nested-pseudo.html.ini
deleted file mode 100644
index 1cc6eac641c..00000000000
--- a/tests/wpt/meta/css/css-shadow-parts/part-nested-pseudo.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[part-nested-pseudo.html]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/pseudo-classes-after-part.html.ini b/tests/wpt/meta/css/css-shadow-parts/pseudo-classes-after-part.html.ini
index d37678023dd..d8bc08b193e 100644
--- a/tests/wpt/meta/css/css-shadow-parts/pseudo-classes-after-part.html.ini
+++ b/tests/wpt/meta/css/css-shadow-parts/pseudo-classes-after-part.html.ini
@@ -1,82 +1,28 @@
[pseudo-classes-after-part.html]
- ["::part(mypart):active" should be a valid selector]
- expected: FAIL
-
["::part(mypart):active-view-transition" should be a valid selector]
expected: FAIL
["::part(mypart):active-view-transition-type(mytype)" should be a valid selector]
expected: FAIL
- ["::part(mypart):any-link" should be a valid selector]
- expected: FAIL
-
- ["::part(mypart):autofill" should be a valid selector]
- expected: FAIL
-
- ["::part(mypart):checked" should be a valid selector]
- expected: FAIL
-
- ["::part(mypart):default" should be a valid selector]
- expected: FAIL
-
- ["::part(mypart):defined" should be a valid selector]
- expected: FAIL
-
["::part(mypart):dir(ltr)" should be a valid selector]
expected: FAIL
- ["::part(mypart):disabled" should be a valid selector]
- expected: FAIL
-
- ["::part(mypart):enabled" should be a valid selector]
- expected: FAIL
-
- ["::part(mypart):focus" should be a valid selector]
- expected: FAIL
-
- ["::part(mypart):focus-visible" should be a valid selector]
- expected: FAIL
-
- ["::part(mypart):focus-within" should be a valid selector]
- expected: FAIL
-
- ["::part(mypart):fullscreen" should be a valid selector]
- expected: FAIL
-
["::part(mypart):future" should be a valid selector]
expected: FAIL
- ["::part(mypart):hover" should be a valid selector]
- expected: FAIL
-
- ["::part(mypart):indeterminate" should be a valid selector]
- expected: FAIL
-
["::part(mypart):in-range" should be a valid selector]
expected: FAIL
- ["::part(mypart):invalid" should be a valid selector]
- expected: FAIL
-
["::part(mypart):lang(en)" should be a valid selector]
expected: FAIL
- ["::part(mypart):link" should be a valid selector]
- expected: FAIL
-
["::part(mypart):modal" should be a valid selector]
expected: FAIL
["::part(mypart):open" should be a valid selector]
expected: FAIL
- ["::part(mypart):optional" should be a valid selector]
- expected: FAIL
-
- ["::part(mypart):out-of-range" should be a valid selector]
- expected: FAIL
-
["::part(mypart):past" should be a valid selector]
expected: FAIL
@@ -86,56 +32,11 @@
["::part(mypart):picture-in-picture" should be a valid selector]
expected: FAIL
- ["::part(mypart):placeholder-shown" should be a valid selector]
- expected: FAIL
-
["::part(mypart):playing" should be a valid selector]
expected: FAIL
- ["::part(mypart):popover-open" should be a valid selector]
- expected: FAIL
-
- ["::part(mypart):read-only" should be a valid selector]
- expected: FAIL
-
- ["::part(mypart):read-write" should be a valid selector]
- expected: FAIL
-
- ["::part(mypart):required" should be a valid selector]
- expected: FAIL
-
["::part(mypart):state(mystate)" should be a valid selector]
expected: FAIL
- ["::part(mypart):target" should be a valid selector]
- expected: FAIL
-
- ["::part(mypart):user-invalid" should be a valid selector]
- expected: FAIL
-
- ["::part(mypart):user-valid" should be a valid selector]
- expected: FAIL
-
- ["::part(mypart):valid" should be a valid selector]
- expected: FAIL
-
- ["::part(mypart):visited" should be a valid selector]
- expected: FAIL
-
["::part(mypart):xr-overlay" should be a valid selector]
expected: FAIL
-
- ["::part(mypart):not(:hover)" should be a valid selector]
- expected: FAIL
-
- ["::part(mypart):is(:hover)" should be a valid selector]
- expected: FAIL
-
- ["::part(mypart):where(:hover)" should be a valid selector]
- expected: FAIL
-
- ["::part(mypart):is(:first-child)" should be a valid selector]
- expected: FAIL
-
- ["::part(mypart):where(:first-child)" should be a valid selector]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/pseudo-elements-after-part.html.ini b/tests/wpt/meta/css/css-shadow-parts/pseudo-elements-after-part.html.ini
index 02f53015dc9..62fad3f5e1f 100644
--- a/tests/wpt/meta/css/css-shadow-parts/pseudo-elements-after-part.html.ini
+++ b/tests/wpt/meta/css/css-shadow-parts/pseudo-elements-after-part.html.ini
@@ -1,13 +1,4 @@
[pseudo-elements-after-part.html]
- ["::part(mypart)::after" should be a valid selector]
- expected: FAIL
-
- ["::part(mypart)::backdrop" should be a valid selector]
- expected: FAIL
-
- ["::part(mypart)::before" should be a valid selector]
- expected: FAIL
-
["::part(mypart)::cue" should be a valid selector]
expected: FAIL
@@ -29,18 +20,12 @@
["::part(mypart)::highlight(myhighlight)" should be a valid selector]
expected: FAIL
- ["::part(mypart)::marker" should be a valid selector]
- expected: FAIL
-
["::part(mypart)::placeholder" should be a valid selector]
expected: FAIL
["::part(mypart)::search-text" should be a valid selector]
expected: FAIL
- ["::part(mypart)::selection" should be a valid selector]
- expected: FAIL
-
["::part(mypart)::spelling-error" should be a valid selector]
expected: FAIL
@@ -95,21 +80,12 @@
[computed style for ::part()::search-text]
expected: FAIL
- [computed style for ::part()::selection]
- expected: FAIL
-
[computed style for ::part()::spelling-error]
expected: FAIL
[computed style for ::part()::target-text]
expected: FAIL
- [::part styles with ::part(mypart)::after {\n display: block;\n content: "";\n height: 77px;\n } and <div part='mypart'></div>]
- expected: FAIL
-
- [::part styles with ::part(mypart)::before {\n display: block;\n content: "";\n height: 46px;\n } and <div part='mypart'></div>]
- expected: FAIL
-
[::part styles with ::part(mypart)::details-content {\n height: 371px;\n } and <details part='mypart'><summary style="height:47px">summary</summary>details</details>]
expected: FAIL
@@ -121,6 +97,3 @@
[::part styles with ::part(mypart) {\n font: 20px/1 Ahem;\n }\n ::part(mypart)::first-line {\n font-size: 86px;\n } and <div part=mypart>X<br>X</div>]
expected: FAIL
-
- [::part styles with ::part(mypart)::marker {\n font: 63px/1.0 Ahem;\n content: "X";\n } and <li style="list-style-position: inside" part="mypart"></li>]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/serialization.html.ini b/tests/wpt/meta/css/css-shadow-parts/serialization.html.ini
deleted file mode 100644
index bf16109e185..00000000000
--- a/tests/wpt/meta/css/css-shadow-parts/serialization.html.ini
+++ /dev/null
@@ -1,9 +0,0 @@
-[serialization.html]
- [Escape start parenthesis in ::part name.]
- expected: FAIL
-
- [Escape start space in ::part name.]
- expected: FAIL
-
- [Collapse spaces in ::part names list.]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/simple-inline.html.ini b/tests/wpt/meta/css/css-shadow-parts/simple-inline.html.ini
deleted file mode 100644
index 4121d642be0..00000000000
--- a/tests/wpt/meta/css/css-shadow-parts/simple-inline.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[simple-inline.html]
- [Part in selected host is styled]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/simple.html.ini b/tests/wpt/meta/css/css-shadow-parts/simple.html.ini
deleted file mode 100644
index 9c3278c9e3a..00000000000
--- a/tests/wpt/meta/css/css-shadow-parts/simple.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[simple.html]
- [Part in selected host is styled]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/style-sharing.html.ini b/tests/wpt/meta/css/css-shadow-parts/style-sharing.html.ini
deleted file mode 100644
index 1bb66f211bf..00000000000
--- a/tests/wpt/meta/css/css-shadow-parts/style-sharing.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[style-sharing.html]
- [Part in selected host does not incorrectly share style with non-part]
- expected: FAIL
diff --git a/tests/wpt/meta/css/selectors/invalidation/part-pseudo.html.ini b/tests/wpt/meta/css/selectors/invalidation/part-pseudo.html.ini
deleted file mode 100644
index 10f1aa0b918..00000000000
--- a/tests/wpt/meta/css/selectors/invalidation/part-pseudo.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[part-pseudo.html]
- expected: FAIL
diff --git a/tests/wpt/meta/css/selectors/parsing/parse-is-where.html.ini b/tests/wpt/meta/css/selectors/parsing/parse-is-where.html.ini
deleted file mode 100644
index c698a273547..00000000000
--- a/tests/wpt/meta/css/selectors/parsing/parse-is-where.html.ini
+++ /dev/null
@@ -1,12 +0,0 @@
-[parse-is-where.html]
- ["::part(foo):is(:hover)" should be a valid selector]
- expected: FAIL
-
- ["::part(foo):where(:hover)" should be a valid selector]
- expected: FAIL
-
- ["::part(foo):is([attr='value'\])" should be a valid selector]
- expected: FAIL
-
- ["::part(foo):where([attr='value'\])" should be a valid selector]
- expected: FAIL
diff --git a/tests/wpt/meta/css/selectors/parsing/parse-part.html.ini b/tests/wpt/meta/css/selectors/parsing/parse-part.html.ini
index 8a0356d9826..d0caf3e03d8 100644
--- a/tests/wpt/meta/css/selectors/parsing/parse-part.html.ini
+++ b/tests/wpt/meta/css/selectors/parsing/parse-part.html.ini
@@ -1,37 +1,4 @@
[parse-part.html]
- ["::part(--foo)" should be a valid selector]
- expected: FAIL
-
- ["::part(bar)" should be a valid selector]
- expected: FAIL
-
- ["::part(--)" should be a valid selector]
- expected: FAIL
-
- ["::part(--0)" should be a valid selector]
- expected: FAIL
-
- ["::part(foo bar)" should be a valid selector]
- expected: FAIL
-
- ["::part(-foo bar)" should be a valid selector]
- expected: FAIL
-
- ["::part(foo):focus" should be a valid selector]
- expected: FAIL
-
- ["::part(foo):hover" should be a valid selector]
- expected: FAIL
-
- ["::part(foo):focus-within" should be a valid selector]
- expected: FAIL
-
- ["::part(foo)::before" should be a valid selector]
- expected: FAIL
-
- ["::part(foo)::after" should be a valid selector]
- expected: FAIL
-
["::part(foo)::placeholder" should be a valid selector]
expected: FAIL
@@ -44,12 +11,6 @@
["::part(foo)::file-selector-button" should be a valid selector]
expected: FAIL
- ["::part(foo):is(:focus)" should be a valid selector]
- expected: FAIL
-
- [":lang(en)::part(foo)" should be a valid selector]
- expected: FAIL
-
[":dir(ltr)::part(foo)" should be a valid selector]
expected: FAIL
@@ -58,21 +19,3 @@
["::part(foo):dir(ltr)" should be a valid selector]
expected: FAIL
-
- ["::part(foo):is(ul)" should be a valid selector]
- expected: FAIL
-
- ["::part(foo):is(nav ul)" should be a valid selector]
- expected: FAIL
-
- ["::part(foo):where(ul)" should be a valid selector]
- expected: FAIL
-
- ["::part(foo):where(nav ul)" should be a valid selector]
- expected: FAIL
-
- ["::part(foo):disabled" should be a valid selector]
- expected: FAIL
-
- ["::part(foo):checked" should be a valid selector]
- expected: FAIL
diff --git a/tests/wpt/meta/reporting/cross-origin-report-no-credentials.https.sub.html.ini b/tests/wpt/meta/reporting/cross-origin-report-no-credentials.https.sub.html.ini
new file mode 100644
index 00000000000..e83aa84d6b1
--- /dev/null
+++ b/tests/wpt/meta/reporting/cross-origin-report-no-credentials.https.sub.html.ini
@@ -0,0 +1,3 @@
+[cross-origin-report-no-credentials.https.sub.html]
+ [Reporting endpoints did not receive credentials.]
+ expected: FAIL
diff --git a/tests/wpt/meta/reporting/cross-origin-reports-isolated.https.sub.html.ini b/tests/wpt/meta/reporting/cross-origin-reports-isolated.https.sub.html.ini
new file mode 100644
index 00000000000..9d96ad354c4
--- /dev/null
+++ b/tests/wpt/meta/reporting/cross-origin-reports-isolated.https.sub.html.ini
@@ -0,0 +1,3 @@
+[cross-origin-reports-isolated.https.sub.html]
+ [Reports were sent in two requests.]
+ expected: FAIL
diff --git a/tests/wpt/meta/reporting/cross-origin-same-site-credentials.https.sub.html.ini b/tests/wpt/meta/reporting/cross-origin-same-site-credentials.https.sub.html.ini
new file mode 100644
index 00000000000..1d2d2079b07
--- /dev/null
+++ b/tests/wpt/meta/reporting/cross-origin-same-site-credentials.https.sub.html.ini
@@ -0,0 +1,3 @@
+[cross-origin-same-site-credentials.https.sub.html]
+ [Reporting endpoints received credentials.]
+ expected: FAIL
diff --git a/tests/wpt/meta/reporting/document-reporting-bypass-report-to.https.sub.html.ini b/tests/wpt/meta/reporting/document-reporting-bypass-report-to.https.sub.html.ini
new file mode 100644
index 00000000000..26668188a63
--- /dev/null
+++ b/tests/wpt/meta/reporting/document-reporting-bypass-report-to.https.sub.html.ini
@@ -0,0 +1,6 @@
+[document-reporting-bypass-report-to.https.sub.html]
+ [document policy violation observed]
+ expected: FAIL
+
+ [Only the Reporting-Endpoints configured endpoint received reports.]
+ expected: FAIL
diff --git a/tests/wpt/meta/reporting/document-reporting-destroy-after-document-close.https.sub.html.ini b/tests/wpt/meta/reporting/document-reporting-destroy-after-document-close.https.sub.html.ini
new file mode 100644
index 00000000000..b31627a692e
--- /dev/null
+++ b/tests/wpt/meta/reporting/document-reporting-destroy-after-document-close.https.sub.html.ini
@@ -0,0 +1,3 @@
+[document-reporting-destroy-after-document-close.https.sub.html]
+ [No more reports received after navigation to same document without endpoint header]
+ expected: FAIL
diff --git a/tests/wpt/meta/reporting/document-reporting-named-endpoints.https.sub.html.ini b/tests/wpt/meta/reporting/document-reporting-named-endpoints.https.sub.html.ini
new file mode 100644
index 00000000000..599ece01563
--- /dev/null
+++ b/tests/wpt/meta/reporting/document-reporting-named-endpoints.https.sub.html.ini
@@ -0,0 +1,9 @@
+[document-reporting-named-endpoints.https.sub.html]
+ [csp violation report observed]
+ expected: FAIL
+
+ [document policy violation observed]
+ expected: FAIL
+
+ [Reporting endpoints received reports.]
+ expected: FAIL
diff --git a/tests/wpt/meta/reporting/document-reporting-not-batch-different-document.https.html.ini b/tests/wpt/meta/reporting/document-reporting-not-batch-different-document.https.html.ini
new file mode 100644
index 00000000000..1d7a5ff6462
--- /dev/null
+++ b/tests/wpt/meta/reporting/document-reporting-not-batch-different-document.https.html.ini
@@ -0,0 +1,3 @@
+[document-reporting-not-batch-different-document.https.html]
+ [Reports are not batched for same url in different document.]
+ expected: FAIL
diff --git a/tests/wpt/meta/reporting/document-reporting-override-endpoint.https.sub.html.ini b/tests/wpt/meta/reporting/document-reporting-override-endpoint.https.sub.html.ini
new file mode 100644
index 00000000000..8f28f3de76e
--- /dev/null
+++ b/tests/wpt/meta/reporting/document-reporting-override-endpoint.https.sub.html.ini
@@ -0,0 +1,6 @@
+[document-reporting-override-endpoint.https.sub.html]
+ [document policy violation observed]
+ expected: FAIL
+
+ [Only the second reporting endpoint received reports.]
+ expected: FAIL
diff --git a/tests/wpt/meta/reporting/idlharness.any.js.ini b/tests/wpt/meta/reporting/idlharness.any.js.ini
new file mode 100644
index 00000000000..5a55d02e27f
--- /dev/null
+++ b/tests/wpt/meta/reporting/idlharness.any.js.ini
@@ -0,0 +1,158 @@
+[idlharness.any.html]
+ [ReportBody interface: existence and properties of interface object]
+ expected: FAIL
+
+ [ReportBody interface object length]
+ expected: FAIL
+
+ [ReportBody interface object name]
+ expected: FAIL
+
+ [ReportBody interface: existence and properties of interface prototype object]
+ expected: FAIL
+
+ [ReportBody interface: existence and properties of interface prototype object's "constructor" property]
+ expected: FAIL
+
+ [ReportBody interface: existence and properties of interface prototype object's @@unscopables property]
+ expected: FAIL
+
+ [ReportBody interface: operation toJSON()]
+ expected: FAIL
+
+ [Report interface: existence and properties of interface object]
+ expected: FAIL
+
+ [Report interface object length]
+ expected: FAIL
+
+ [Report interface object name]
+ expected: FAIL
+
+ [Report interface: existence and properties of interface prototype object]
+ expected: FAIL
+
+ [Report interface: existence and properties of interface prototype object's "constructor" property]
+ expected: FAIL
+
+ [Report interface: existence and properties of interface prototype object's @@unscopables property]
+ expected: FAIL
+
+ [Report interface: operation toJSON()]
+ expected: FAIL
+
+ [Report interface: attribute type]
+ expected: FAIL
+
+ [Report interface: attribute url]
+ expected: FAIL
+
+ [Report interface: attribute body]
+ expected: FAIL
+
+ [ReportingObserver interface: existence and properties of interface object]
+ expected: FAIL
+
+ [ReportingObserver interface object length]
+ expected: FAIL
+
+ [ReportingObserver interface object name]
+ expected: FAIL
+
+ [ReportingObserver interface: existence and properties of interface prototype object]
+ expected: FAIL
+
+ [ReportingObserver interface: existence and properties of interface prototype object's "constructor" property]
+ expected: FAIL
+
+ [ReportingObserver interface: existence and properties of interface prototype object's @@unscopables property]
+ expected: FAIL
+
+ [ReportingObserver interface: operation observe()]
+ expected: FAIL
+
+ [ReportingObserver interface: operation disconnect()]
+ expected: FAIL
+
+ [ReportingObserver interface: operation takeRecords()]
+ expected: FAIL
+
+
+[idlharness.any.worker.html]
+ [ReportBody interface: existence and properties of interface object]
+ expected: FAIL
+
+ [ReportBody interface object length]
+ expected: FAIL
+
+ [ReportBody interface object name]
+ expected: FAIL
+
+ [ReportBody interface: existence and properties of interface prototype object]
+ expected: FAIL
+
+ [ReportBody interface: existence and properties of interface prototype object's "constructor" property]
+ expected: FAIL
+
+ [ReportBody interface: existence and properties of interface prototype object's @@unscopables property]
+ expected: FAIL
+
+ [ReportBody interface: operation toJSON()]
+ expected: FAIL
+
+ [Report interface: existence and properties of interface object]
+ expected: FAIL
+
+ [Report interface object length]
+ expected: FAIL
+
+ [Report interface object name]
+ expected: FAIL
+
+ [Report interface: existence and properties of interface prototype object]
+ expected: FAIL
+
+ [Report interface: existence and properties of interface prototype object's "constructor" property]
+ expected: FAIL
+
+ [Report interface: existence and properties of interface prototype object's @@unscopables property]
+ expected: FAIL
+
+ [Report interface: operation toJSON()]
+ expected: FAIL
+
+ [Report interface: attribute type]
+ expected: FAIL
+
+ [Report interface: attribute url]
+ expected: FAIL
+
+ [Report interface: attribute body]
+ expected: FAIL
+
+ [ReportingObserver interface: existence and properties of interface object]
+ expected: FAIL
+
+ [ReportingObserver interface object length]
+ expected: FAIL
+
+ [ReportingObserver interface object name]
+ expected: FAIL
+
+ [ReportingObserver interface: existence and properties of interface prototype object]
+ expected: FAIL
+
+ [ReportingObserver interface: existence and properties of interface prototype object's "constructor" property]
+ expected: FAIL
+
+ [ReportingObserver interface: existence and properties of interface prototype object's @@unscopables property]
+ expected: FAIL
+
+ [ReportingObserver interface: operation observe()]
+ expected: FAIL
+
+ [ReportingObserver interface: operation disconnect()]
+ expected: FAIL
+
+ [ReportingObserver interface: operation takeRecords()]
+ expected: FAIL
diff --git a/tests/wpt/meta/reporting/reporting-isolated-across-navigations.https.sub.html.ini b/tests/wpt/meta/reporting/reporting-isolated-across-navigations.https.sub.html.ini
new file mode 100644
index 00000000000..f9ca747ab03
--- /dev/null
+++ b/tests/wpt/meta/reporting/reporting-isolated-across-navigations.https.sub.html.ini
@@ -0,0 +1,3 @@
+[reporting-isolated-across-navigations.https.sub.html]
+ [Reports should be sent to the correct endpoints]
+ expected: FAIL
diff --git a/tests/wpt/meta/reporting/same-origin-cross-site-credentials.https.sub.html.ini b/tests/wpt/meta/reporting/same-origin-cross-site-credentials.https.sub.html.ini
new file mode 100644
index 00000000000..7312d2c733e
--- /dev/null
+++ b/tests/wpt/meta/reporting/same-origin-cross-site-credentials.https.sub.html.ini
@@ -0,0 +1,3 @@
+[same-origin-cross-site-credentials.https.sub.html]
+ [Reporting endpoints received credentials.]
+ expected: FAIL
diff --git a/tests/wpt/meta/reporting/same-origin-report-credentials.https.sub.html.ini b/tests/wpt/meta/reporting/same-origin-report-credentials.https.sub.html.ini
new file mode 100644
index 00000000000..9c536def669
--- /dev/null
+++ b/tests/wpt/meta/reporting/same-origin-report-credentials.https.sub.html.ini
@@ -0,0 +1,3 @@
+[same-origin-report-credentials.https.sub.html]
+ [Reporting endpoints received credentials.]
+ expected: FAIL
diff --git a/tests/wpt/meta/reporting/same-origin-same-site-credentials.https.sub.html.ini b/tests/wpt/meta/reporting/same-origin-same-site-credentials.https.sub.html.ini
new file mode 100644
index 00000000000..d054359ab5b
--- /dev/null
+++ b/tests/wpt/meta/reporting/same-origin-same-site-credentials.https.sub.html.ini
@@ -0,0 +1,3 @@
+[same-origin-same-site-credentials.https.sub.html]
+ [Reporting endpoints received credentials.]
+ expected: FAIL
diff --git a/tests/wpt/meta/shadow-dom/offsetParent-across-shadow-boundaries.html.ini b/tests/wpt/meta/shadow-dom/offsetParent-across-shadow-boundaries.html.ini
new file mode 100644
index 00000000000..29a0011fff4
--- /dev/null
+++ b/tests/wpt/meta/shadow-dom/offsetParent-across-shadow-boundaries.html.ini
@@ -0,0 +1,6 @@
+[offsetParent-across-shadow-boundaries.html]
+ [offsetParent must find the first offset parent which is a shadow-including ancestor of the context object even some shadow tree of open mode did not have any offset parent]
+ expected: FAIL
+
+ [offsetParent must find the first offset parent which is a shadow-including ancestor of the context object even some shadow tree of closed mode did not have any offset parent]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_click/click.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_click/click.py.ini
index 7405df1cdfb..2ed5e00cc3f 100644
--- a/tests/wpt/meta/webdriver/tests/classic/element_click/click.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/element_click/click.py.ini
@@ -4,6 +4,3 @@
[test_no_such_element_with_shadow_root]
expected: FAIL
-
- [test_no_such_element_from_other_window_handle[closed\]]
- expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_click/shadow_dom.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_click/shadow_dom.py.ini
deleted file mode 100644
index 32fd2854998..00000000000
--- a/tests/wpt/meta/webdriver/tests/classic/element_click/shadow_dom.py.ini
+++ /dev/null
@@ -1,9 +0,0 @@
-[shadow_dom.py]
- [test_shadow_element_click[host_element\]]
- expected: FAIL
-
- [test_nested_shadow_element_click[outer_element\]]
- expected: FAIL
-
- [test_nested_shadow_element_click[inner_element\]]
- expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_send_keys/interactability.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_send_keys/interactability.py.ini
index 9510b686ea1..921b8c5cb5d 100644
--- a/tests/wpt/meta/webdriver/tests/classic/element_send_keys/interactability.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/element_send_keys/interactability.py.ini
@@ -5,9 +5,6 @@
[test_iframe_is_interactable]
expected: FAIL
- [test_readonly_element]
- expected: FAIL
-
[test_not_a_focusable_element]
expected: FAIL
@@ -22,3 +19,9 @@
[test_disabled]
expected: FAIL
+
+ [test_transparent_element]
+ expected: FAIL
+
+ [test_readonly_element]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_send_keys/send_keys.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_send_keys/send_keys.py.ini
index 9dca7adc465..85afe070906 100644
--- a/tests/wpt/meta/webdriver/tests/classic/element_send_keys/send_keys.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/element_send_keys/send_keys.py.ini
@@ -5,5 +5,5 @@
[test_no_such_element_with_shadow_root]
expected: FAIL
- [test_no_such_element_from_other_window_handle[closed\]]
+ [test_surrogates]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/find_element_from_element/find.py.ini b/tests/wpt/meta/webdriver/tests/classic/find_element_from_element/find.py.ini
index 64a0652b75b..85a7daf2244 100644
--- a/tests/wpt/meta/webdriver/tests/classic/find_element_from_element/find.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/find_element_from_element/find.py.ini
@@ -1,7 +1,6 @@
[find.py]
- expected: TIMEOUT
[test_no_browsing_context]
- expected: ERROR
+ expected: FAIL
[test_no_such_element_with_shadow_root]
expected: FAIL
@@ -15,33 +14,12 @@
[test_no_such_element_with_unknown_selector[existent-inside-shadow-root\]]
expected: FAIL
- [test_no_such_element_with_startnode_from_other_window_handle]
- expected: FAIL
-
[test_no_such_element_with_startnode_from_other_frame]
expected: FAIL
- [test_stale_element_reference[top_context\]]
- expected: FAIL
-
- [test_stale_element_reference[child_context\]]
- expected: FAIL
-
[test_find_element[xpath-//a\]]
expected: FAIL
- [test_xhtml_namespace[css selector-#linkText\]]
- expected: FAIL
-
- [test_xhtml_namespace[link text-full link text\]]
- expected: FAIL
-
- [test_xhtml_namespace[partial link text-link text\]]
- expected: FAIL
-
- [test_xhtml_namespace[tag name-a\]]
- expected: FAIL
-
[test_xhtml_namespace[xpath-//*[name()='a'\]\]]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_computed_role/get.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_computed_role/get.py.ini
index 44749396246..c023dd2d5c5 100644
--- a/tests/wpt/meta/webdriver/tests/classic/get_computed_role/get.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/get_computed_role/get.py.ini
@@ -5,8 +5,5 @@
[test_no_such_element_with_shadow_root]
expected: FAIL
- [test_no_such_element_from_other_window_handle[closed\]]
- expected: FAIL
-
[test_computed_roles[<article>foo</article>-article-article\]]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_element_attribute/get.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_element_attribute/get.py.ini
index c5bc0a36f6d..c7642bd8ee1 100644
--- a/tests/wpt/meta/webdriver/tests/classic/get_element_attribute/get.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/get_element_attribute/get.py.ini
@@ -5,9 +5,6 @@
[test_no_such_element_with_shadow_root]
expected: FAIL
- [test_no_such_element_from_other_window_handle[closed\]]
- expected: FAIL
-
[test_boolean_attribute[audio-attrs0\]]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_element_css_value/get.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_element_css_value/get.py.ini
index 0af7750e50e..c1af0175608 100644
--- a/tests/wpt/meta/webdriver/tests/classic/get_element_css_value/get.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/get_element_css_value/get.py.ini
@@ -4,6 +4,3 @@
[test_no_such_element_with_shadow_root]
expected: FAIL
-
- [test_no_such_element_from_other_window_handle[closed\]]
- expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_element_property/get.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_element_property/get.py.ini
index 991123b881c..3a1948de96e 100644
--- a/tests/wpt/meta/webdriver/tests/classic/get_element_property/get.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/get_element_property/get.py.ini
@@ -5,8 +5,5 @@
[test_no_such_element_with_shadow_root]
expected: FAIL
- [test_no_such_element_from_other_window_handle[closed\]]
- expected: FAIL
-
[test_web_reference[shadowRoot-ShadowRoot\]]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_element_rect/get.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_element_rect/get.py.ini
index 10339e7291b..3a58f29d7bd 100644
--- a/tests/wpt/meta/webdriver/tests/classic/get_element_rect/get.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/get_element_rect/get.py.ini
@@ -5,8 +5,5 @@
[test_no_such_element_with_shadow_root]
expected: FAIL
- [test_no_such_element_from_other_window_handle[closed\]]
- expected: FAIL
-
[test_basic]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_element_shadow_root/get.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_element_shadow_root/get.py.ini
index 1b3957f08c8..bb9de0071f4 100644
--- a/tests/wpt/meta/webdriver/tests/classic/get_element_shadow_root/get.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/get_element_shadow_root/get.py.ini
@@ -1,33 +1,3 @@
[get.py]
- [test_no_top_browsing_context]
- expected: FAIL
-
[test_no_browsing_context]
expected: FAIL
-
- [test_no_such_element_with_invalid_value]
- expected: FAIL
-
- [test_no_such_element_from_other_window_handle[open\]]
- expected: FAIL
-
- [test_no_such_element_from_other_window_handle[closed\]]
- expected: FAIL
-
- [test_no_such_element_from_other_frame[open\]]
- expected: FAIL
-
- [test_no_such_element_from_other_frame[closed\]]
- expected: FAIL
-
- [test_stale_element_reference[top_context\]]
- expected: FAIL
-
- [test_stale_element_reference[child_context\]]
- expected: FAIL
-
- [test_get_shadow_root]
- expected: FAIL
-
- [test_no_shadow_root]
- expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_element_tag_name/get.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_element_tag_name/get.py.ini
index 879854dfc56..8fb651289ad 100644
--- a/tests/wpt/meta/webdriver/tests/classic/get_element_tag_name/get.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/get_element_tag_name/get.py.ini
@@ -5,8 +5,5 @@
[test_no_such_element_with_shadow_root]
expected: FAIL
- [test_no_such_element_from_other_window_handle[closed\]]
- expected: FAIL
-
[test_get_element_tag_name]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_element_text/get.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_element_text/get.py.ini
index 66e31b2d5a7..b4016ed5298 100644
--- a/tests/wpt/meta/webdriver/tests/classic/get_element_text/get.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/get_element_text/get.py.ini
@@ -5,9 +5,6 @@
[test_no_such_element_with_shadow_root]
expected: FAIL
- [test_no_such_element_from_other_window_handle[closed\]]
- expected: FAIL
-
[test_transform_capitalize[space\]]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/is_element_enabled/enabled.py.ini b/tests/wpt/meta/webdriver/tests/classic/is_element_enabled/enabled.py.ini
index 9f75dbb4f9e..a287655de66 100644
--- a/tests/wpt/meta/webdriver/tests/classic/is_element_enabled/enabled.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/is_element_enabled/enabled.py.ini
@@ -5,9 +5,6 @@
[test_no_such_element_with_shadow_root]
expected: FAIL
- [test_no_such_element_from_other_window_handle[closed\]]
- expected: FAIL
-
[test_stale_element_reference[child_context\]]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/is_element_selected/selected.py.ini b/tests/wpt/meta/webdriver/tests/classic/is_element_selected/selected.py.ini
index 2c5777abee2..07512c40b00 100644
--- a/tests/wpt/meta/webdriver/tests/classic/is_element_selected/selected.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/is_element_selected/selected.py.ini
@@ -5,8 +5,5 @@
[test_no_such_element_with_shadow_root]
expected: FAIL
- [test_no_such_element_from_other_window_handle[closed\]]
- expected: FAIL
-
[test_stale_element_reference[child_context\]]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/new_window/new.py.ini b/tests/wpt/meta/webdriver/tests/classic/new_window/new.py.ini
index 7288018eebf..374e04d8c54 100644
--- a/tests/wpt/meta/webdriver/tests/classic/new_window/new.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/new_window/new.py.ini
@@ -1,6 +1,3 @@
[new.py]
[test_no_top_browsing_context]
expected: FAIL
-
- [test_no_browsing_context]
- expected: ERROR
diff --git a/tests/wpt/meta/webdriver/tests/classic/new_window/new_tab.py.ini b/tests/wpt/meta/webdriver/tests/classic/new_window/new_tab.py.ini
index db51a3496ae..935bc48d1e9 100644
--- a/tests/wpt/meta/webdriver/tests/classic/new_window/new_tab.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/new_window/new_tab.py.ini
@@ -1,9 +1,3 @@
[new_tab.py]
- [test_keeps_current_window_handle]
- expected: FAIL
-
- [test_opens_about_blank_in_new_tab]
- expected: FAIL
-
[test_initial_selection_for_contenteditable]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/new_window/new_window.py.ini b/tests/wpt/meta/webdriver/tests/classic/new_window/new_window.py.ini
index 5ea6fe581f7..c29bde84dc1 100644
--- a/tests/wpt/meta/webdriver/tests/classic/new_window/new_window.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/new_window/new_window.py.ini
@@ -2,11 +2,5 @@
[test_payload]
expected: FAIL
- [test_keeps_current_window_handle]
- expected: FAIL
-
- [test_opens_about_blank_in_new_window]
- expected: FAIL
-
[test_initial_selection_for_contenteditable]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/key.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/key.py.ini
index 42ceab66336..0a9efbca289 100644
--- a/tests/wpt/meta/webdriver/tests/classic/perform_actions/key.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/key.py.ini
@@ -9,19 +9,16 @@
expected: FAIL
[test_backspace_erases_keys]
- expected: ERROR
+ expected: FAIL
[test_element_in_shadow_tree[outer-open\]]
- expected: ERROR
+ expected: FAIL
[test_element_in_shadow_tree[outer-closed\]]
- expected: ERROR
+ expected: FAIL
[test_element_in_shadow_tree[inner-open\]]
- expected: ERROR
+ expected: FAIL
[test_element_in_shadow_tree[inner-closed\]]
- expected: ERROR
-
- [test_element_not_focused]
- expected: ERROR
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_origin.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_origin.py.ini
index 8102334d66b..4018e8e3e5b 100644
--- a/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_origin.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_origin.py.ini
@@ -1,10 +1,4 @@
[pointer_origin.py]
- [test_viewport_inside]
- expected: FAIL
-
- [test_pointer_inside]
- expected: FAIL
-
[test_element_center_point]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/switch_to_frame/switch.py.ini b/tests/wpt/meta/webdriver/tests/classic/switch_to_frame/switch.py.ini
index 66625728565..b26241b424d 100644
--- a/tests/wpt/meta/webdriver/tests/classic/switch_to_frame/switch.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/switch_to_frame/switch.py.ini
@@ -13,6 +13,3 @@
[test_no_browsing_context_when_already_top_level]
expected: FAIL
-
- [test_frame_id_shadow_root]
- expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/take_screenshot/screenshot.py.ini b/tests/wpt/meta/webdriver/tests/classic/take_screenshot/screenshot.py.ini
index aef7c9d5ddc..f2fac7a7fa1 100644
--- a/tests/wpt/meta/webdriver/tests/classic/take_screenshot/screenshot.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/take_screenshot/screenshot.py.ini
@@ -4,6 +4,3 @@
[test_no_browsing_context]
expected: FAIL
-
- [test_format_and_dimensions]
- expected: FAIL
diff --git a/tests/wpt/mozilla/meta/MANIFEST.json b/tests/wpt/mozilla/meta/MANIFEST.json
index cce286bb674..72c56c27fda 100644
--- a/tests/wpt/mozilla/meta/MANIFEST.json
+++ b/tests/wpt/mozilla/meta/MANIFEST.json
@@ -8608,7 +8608,7 @@
],
"css": {
"ahem.css": [
- "51eede74aaa0b43f2c9235019bc73a508b1f14e4",
+ "a7db592e0df53e0b70f66ca7b31a7734db18887e",
[]
]
},
@@ -10654,7 +10654,7 @@
[]
],
"no_mime_type.py": [
- "860005a42c237735287031133786352d7c732402",
+ "980eeee18f993f20a9df033f337a52ec93155ec4",
[]
],
"origin_helpers.js": [
diff --git a/tests/wpt/mozilla/tests/css/css/ahem.css b/tests/wpt/mozilla/tests/css/css/ahem.css
index 51eede74aaa..a7db592e0df 100644
--- a/tests/wpt/mozilla/tests/css/css/ahem.css
+++ b/tests/wpt/mozilla/tests/css/css/ahem.css
@@ -1,3 +1,9 @@
+@font-face {
+ font-family: 'ahem';
+ src: local('Ahem'),
+ url('/fonts/Ahem.ttf');
+}
+
body {
font-family: 'ahem';
font-size: 100px;
diff --git a/tests/wpt/mozilla/tests/mozilla/resources/no_mime_type.py b/tests/wpt/mozilla/tests/mozilla/resources/no_mime_type.py
index 860005a42c2..980eeee18f9 100644
--- a/tests/wpt/mozilla/tests/mozilla/resources/no_mime_type.py
+++ b/tests/wpt/mozilla/tests/mozilla/resources/no_mime_type.py
@@ -7,5 +7,5 @@ def main(request, response):
headers = []
if b'Content-Type' in request.GET:
headers += [(b'Content-Type', request.GET[b'Content-Type'])]
- with open('./resources/ahem/AHEM____.TTF', 'rb') as f:
+ with open('./tests/wpt/tests/fonts/Ahem.ttf', 'rb') as f:
return 200, headers, f.read()