mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Auto merge of #10647 - ConnorGBrewster:parse_xml, r=jdm
Finish hooking up XML parser This is a work in progress PR for #10581. I just want to make sure I am headed in the right direction. cc @jdm <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/10647) <!-- Reviewable:end -->
This commit is contained in:
commit
daa1a2a0a8
29 changed files with 393 additions and 96 deletions
|
@ -27,7 +27,7 @@ canvas_traits = {path = "../canvas_traits"}
|
|||
js = {git = "https://github.com/servo/rust-mozjs"}
|
||||
angle = {git = "https://github.com/emilio/angle", branch = "servo"}
|
||||
ipc-channel = {git = "https://github.com/servo/ipc-channel"}
|
||||
xml5ever = {git = "https://github.com/Ygg01/xml5ever", features = ["unstable"]}
|
||||
xml5ever = {version = "0.1.2", features = ["unstable"]}
|
||||
gfx_traits = {path = "../gfx_traits"}
|
||||
webrender_traits = {git = "https://github.com/servo/webrender_traits"}
|
||||
app_units = {version = "0.2.3", features = ["plugins"]}
|
||||
|
|
|
@ -127,6 +127,8 @@ impl ServoXMLParser {
|
|||
if !pending_input.is_empty() {
|
||||
let chunk = pending_input.remove(0);
|
||||
self.tokenizer.borrow_mut().feed(chunk.into());
|
||||
} else {
|
||||
self.tokenizer.borrow_mut().run();
|
||||
}
|
||||
|
||||
// Document parsing is blocked on an external resource.
|
||||
|
|
|
@ -11,11 +11,13 @@ use dom::comment::Comment;
|
|||
use dom::document::Document;
|
||||
use dom::documenttype::DocumentType;
|
||||
use dom::element::{Element, ElementCreator};
|
||||
use dom::htmlscriptelement::HTMLScriptElement;
|
||||
use dom::node::Node;
|
||||
use dom::processinginstruction::ProcessingInstruction;
|
||||
use dom::servoxmlparser;
|
||||
use dom::servoxmlparser::ServoXMLParser;
|
||||
use dom::text::Text;
|
||||
use html5ever;
|
||||
use msg::constellation_msg::PipelineId;
|
||||
use parse::Parser;
|
||||
use std::borrow::Cow;
|
||||
|
@ -24,7 +26,7 @@ use url::Url;
|
|||
use util::str::DOMString;
|
||||
use xml5ever::tendril::StrTendril;
|
||||
use xml5ever::tokenizer::{Attribute, QName};
|
||||
use xml5ever::tree_builder::{NodeOrText, TreeSink};
|
||||
use xml5ever::tree_builder::{NextParserState, NodeOrText, TreeSink};
|
||||
|
||||
impl<'a> TreeSink for servoxmlparser::Sink {
|
||||
type Handle = JS<Node>;
|
||||
|
@ -101,6 +103,24 @@ impl<'a> TreeSink for servoxmlparser::Sink {
|
|||
doc);
|
||||
JS::from_ref(pi.upcast())
|
||||
}
|
||||
|
||||
fn mark_script_already_started(&mut self, node: Self::Handle) {
|
||||
let script = node.downcast::<HTMLScriptElement>();
|
||||
if let Some(script) = script {
|
||||
script.mark_already_started();
|
||||
}
|
||||
}
|
||||
|
||||
fn complete_script(&mut self, node: Self::Handle) -> NextParserState {
|
||||
let script = node.downcast::<HTMLScriptElement>();
|
||||
if let Some(script) = script {
|
||||
return match script.prepare() {
|
||||
html5ever::tree_builder::NextParserState::Continue => NextParserState::Continue,
|
||||
html5ever::tree_builder::NextParserState::Suspend => NextParserState::Suspend
|
||||
};
|
||||
}
|
||||
NextParserState::Continue
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -119,4 +139,3 @@ pub fn parse_xml(document: &Document,
|
|||
};
|
||||
parser.parse_chunk(String::from(input));
|
||||
}
|
||||
|
||||
|
|
|
@ -1510,23 +1510,22 @@ impl ScriptThread {
|
|||
headers.get().map(|&LastModified(HttpDate(ref tm))| dom_last_modified(tm))
|
||||
});
|
||||
|
||||
let content_type = match metadata.content_type {
|
||||
Some(ContentType(Mime(TopLevel::Text, SubLevel::Xml, _))) => {
|
||||
Some(DOMString::from("text/xml"))
|
||||
let content_type = metadata.content_type.as_ref().and_then(|&ContentType(ref mimetype)| {
|
||||
match *mimetype {
|
||||
Mime(TopLevel::Application, SubLevel::Xml, _) |
|
||||
Mime(TopLevel::Application, SubLevel::Ext(_), _) |
|
||||
Mime(TopLevel::Text, SubLevel::Xml, _) |
|
||||
Mime(TopLevel::Text, SubLevel::Plain, _) => Some(DOMString::from(mimetype.to_string())),
|
||||
_ => None,
|
||||
}
|
||||
|
||||
Some(ContentType(Mime(TopLevel::Text, SubLevel::Plain, _))) => {
|
||||
Some(DOMString::from("text/plain"))
|
||||
}
|
||||
|
||||
_ => None
|
||||
};
|
||||
});
|
||||
|
||||
let loader = DocumentLoader::new_with_thread(self.resource_thread.clone(),
|
||||
Some(page.pipeline()),
|
||||
Some(incomplete.url.clone()));
|
||||
|
||||
let is_html_document = match metadata.content_type {
|
||||
Some(ContentType(Mime(TopLevel::Application, SubLevel::Xml, _))) |
|
||||
Some(ContentType(Mime(TopLevel::Text, SubLevel::Xml, _))) =>
|
||||
IsHTMLDocument::NonHTMLDocument,
|
||||
_ => IsHTMLDocument::HTMLDocument,
|
||||
|
@ -1587,20 +1586,27 @@ impl ScriptThread {
|
|||
|
||||
document.set_https_state(metadata.https_state);
|
||||
|
||||
match metadata.content_type {
|
||||
Some(ContentType(Mime(TopLevel::Text, SubLevel::Xml, _))) => {
|
||||
let is_xml = match metadata.content_type {
|
||||
Some(ContentType(Mime(TopLevel::Application, SubLevel::Ext(ref sub_level), _)))
|
||||
if sub_level.ends_with("+xml") => true,
|
||||
|
||||
Some(ContentType(Mime(TopLevel::Application, SubLevel::Xml, _))) |
|
||||
Some(ContentType(Mime(TopLevel::Text, SubLevel::Xml, _))) => true,
|
||||
|
||||
_ => false,
|
||||
};
|
||||
|
||||
if is_xml {
|
||||
parse_xml(document.r(),
|
||||
parse_input,
|
||||
final_url,
|
||||
xml::ParseContext::Owner(Some(incomplete.pipeline_id)));
|
||||
}
|
||||
_ => {
|
||||
} else {
|
||||
parse_html(document.r(),
|
||||
parse_input,
|
||||
final_url,
|
||||
ParseContext::Owner(Some(incomplete.pipeline_id)));
|
||||
}
|
||||
}
|
||||
|
||||
if incomplete.is_frozen {
|
||||
window.freeze();
|
||||
|
|
6
components/servo/Cargo.lock
generated
6
components/servo/Cargo.lock
generated
|
@ -1837,7 +1837,7 @@ dependencies = [
|
|||
"uuid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"webrender_traits 0.1.0 (git+https://github.com/servo/webrender_traits)",
|
||||
"websocket 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"xml5ever 0.1.1 (git+https://github.com/Ygg01/xml5ever)",
|
||||
"xml5ever 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -2523,8 +2523,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "xml5ever"
|
||||
version = "0.1.1"
|
||||
source = "git+https://github.com/Ygg01/xml5ever#a51a6df18f384ecfb0a99b288c267178cf68f7f7"
|
||||
version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"mac 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
|
6
ports/cef/Cargo.lock
generated
6
ports/cef/Cargo.lock
generated
|
@ -1705,7 +1705,7 @@ dependencies = [
|
|||
"uuid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"webrender_traits 0.1.0 (git+https://github.com/servo/webrender_traits)",
|
||||
"websocket 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"xml5ever 0.1.1 (git+https://github.com/Ygg01/xml5ever)",
|
||||
"xml5ever 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -2389,8 +2389,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "xml5ever"
|
||||
version = "0.1.1"
|
||||
source = "git+https://github.com/Ygg01/xml5ever#a51a6df18f384ecfb0a99b288c267178cf68f7f7"
|
||||
version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"mac 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
|
6
ports/gonk/Cargo.lock
generated
6
ports/gonk/Cargo.lock
generated
|
@ -1688,7 +1688,7 @@ dependencies = [
|
|||
"uuid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"webrender_traits 0.1.0 (git+https://github.com/servo/webrender_traits)",
|
||||
"websocket 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"xml5ever 0.1.1 (git+https://github.com/Ygg01/xml5ever)",
|
||||
"xml5ever 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -2340,8 +2340,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "xml5ever"
|
||||
version = "0.1.1"
|
||||
source = "git+https://github.com/Ygg01/xml5ever#a51a6df18f384ecfb0a99b288c267178cf68f7f7"
|
||||
version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"mac 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
[contenttype_xml.html]
|
||||
type: testharness
|
||||
[XML document.contentType === 'application/xml']
|
||||
expected: FAIL
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
[Document-createProcessingInstruction-xhtml.xhtml]
|
||||
type: testharness
|
||||
disabled: xml
|
|
@ -1,3 +1,17 @@
|
|||
[Document-getElementsByTagName-xhtml.xhtml]
|
||||
type: testharness
|
||||
disabled: xml
|
||||
[HTML element with uppercase tag name matches in XHTML documents]
|
||||
expected: FAIL
|
||||
|
||||
[Element in non-HTML namespace, prefix, lowercase name]
|
||||
expected: FAIL
|
||||
|
||||
[Element in non-HTML namespace, prefix, uppercase name]
|
||||
expected: FAIL
|
||||
|
||||
[Element in HTML namespace, no prefix, non-ascii characters in name]
|
||||
expected: FAIL
|
||||
|
||||
[Element in HTML namespace, prefix, non-ascii characters in name]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
[Element-childElementCount-dynamic-add-xhtml.xhtml]
|
||||
type: testharness
|
||||
disabled: xml
|
|
@ -1,3 +0,0 @@
|
|||
[Element-childElementCount-dynamic-remove-xhtml.xhtml]
|
||||
type: testharness
|
||||
disabled: xml
|
|
@ -1,3 +0,0 @@
|
|||
[Element-childElementCount-nochild-xhtml.xhtml]
|
||||
type: testharness
|
||||
disabled: xml
|
|
@ -1,3 +0,0 @@
|
|||
[Element-childElementCount-xhtml.xhtml]
|
||||
type: testharness
|
||||
disabled: xml
|
|
@ -1,3 +1,5 @@
|
|||
[Element-firstElementChild-entity-xhtml.xhtml]
|
||||
type: testharness
|
||||
disabled: xml
|
||||
[Entity References]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
[Element-firstElementChild-namespace-xhtml.xhtml]
|
||||
type: testharness
|
||||
disabled: xml
|
|
@ -1,3 +0,0 @@
|
|||
[Element-firstElementChild-xhtml.xhtml]
|
||||
type: testharness
|
||||
disabled: xml
|
|
@ -1,3 +0,0 @@
|
|||
[Element-lastElementChild-xhtml.xhtml]
|
||||
type: testharness
|
||||
disabled: xml
|
|
@ -1,3 +0,0 @@
|
|||
[Element-nextElementSibling-xhtml.xhtml]
|
||||
type: testharness
|
||||
disabled: xml
|
|
@ -1,3 +0,0 @@
|
|||
[Element-previousElementSibling-xhtml.xhtml]
|
||||
type: testharness
|
||||
disabled: xml
|
|
@ -1,3 +0,0 @@
|
|||
[Element-siblingElement-null-xhtml.xhtml]
|
||||
type: testharness
|
||||
disabled: xml
|
|
@ -1,6 +1,5 @@
|
|||
[Node-isEqualNode-xhtml.xhtml]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[isEqualNode should return true when only the internal subsets of DocumentTypes differ.]
|
||||
expected: NOTRUN
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,3 +1,248 @@
|
|||
[ParentNode-querySelector-All-xht.xht]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[Detached Element.querySelectorAll tree order]
|
||||
expected: FAIL
|
||||
|
||||
[In-document Element.querySelectorAll tree order]
|
||||
expected: FAIL
|
||||
|
||||
[Document.querySelectorAll: Attribute whitespace-separated list selector, not matching class attribute with empty value: #attr-whitespace [class~=""\]]
|
||||
expected: FAIL
|
||||
|
||||
[Document.querySelector: Attribute whitespace-separated list selector, not matching class attribute with empty value: #attr-whitespace [class~=""\]]
|
||||
expected: FAIL
|
||||
|
||||
[Document.querySelectorAll: :target pseudo-class selector, matching the element referenced by the URL fragment identifier: :target]
|
||||
expected: FAIL
|
||||
|
||||
[Document.querySelector: :target pseudo-class selector, matching the element referenced by the URL fragment identifier: :target]
|
||||
expected: FAIL
|
||||
|
||||
[Document.querySelectorAll: :lang pseudo-class selector, matching inherited language: #pseudo-lang-div1:lang(en)]
|
||||
expected: FAIL
|
||||
|
||||
[Document.querySelector: :lang pseudo-class selector, matching inherited language: #pseudo-lang-div1:lang(en)]
|
||||
expected: FAIL
|
||||
|
||||
[Document.querySelectorAll: :lang pseudo-class selector, matching specified language with exact value: #pseudo-lang-div2:lang(fr)]
|
||||
expected: FAIL
|
||||
|
||||
[Document.querySelector: :lang pseudo-class selector, matching specified language with exact value: #pseudo-lang-div2:lang(fr)]
|
||||
expected: FAIL
|
||||
|
||||
[Document.querySelectorAll: :lang pseudo-class selector, matching specified language with partial value: #pseudo-lang-div3:lang(en)]
|
||||
expected: FAIL
|
||||
|
||||
[Document.querySelector: :lang pseudo-class selector, matching specified language with partial value: #pseudo-lang-div3:lang(en)]
|
||||
expected: FAIL
|
||||
|
||||
[Document.querySelectorAll: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR)]
|
||||
expected: FAIL
|
||||
|
||||
[Document.querySelector: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR)]
|
||||
expected: FAIL
|
||||
|
||||
[Document.querySelectorAll: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line]
|
||||
expected: FAIL
|
||||
|
||||
[Document.querySelector: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line]
|
||||
expected: FAIL
|
||||
|
||||
[Document.querySelectorAll: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line]
|
||||
expected: FAIL
|
||||
|
||||
[Document.querySelector: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line]
|
||||
expected: FAIL
|
||||
|
||||
[Document.querySelectorAll: :first-letter pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-letter]
|
||||
expected: FAIL
|
||||
|
||||
[Document.querySelector: :first-letter pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-letter]
|
||||
expected: FAIL
|
||||
|
||||
[Document.querySelectorAll: ::first-letter pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-letter]
|
||||
expected: FAIL
|
||||
|
||||
[Document.querySelector: ::first-letter pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-letter]
|
||||
expected: FAIL
|
||||
|
||||
[Detached Element.querySelectorAll: Attribute whitespace-separated list selector, not matching class attribute with empty value: #attr-whitespace [class~=""\]]
|
||||
expected: FAIL
|
||||
|
||||
[Detached Element.querySelector: Attribute whitespace-separated list selector, not matching class attribute with empty value: #attr-whitespace [class~=""\]]
|
||||
expected: FAIL
|
||||
|
||||
[Detached Element.querySelectorAll: :target pseudo-class selector, matching the element referenced by the URL fragment identifier: :target]
|
||||
expected: FAIL
|
||||
|
||||
[Detached Element.querySelector: :target pseudo-class selector, matching the element referenced by the URL fragment identifier: :target]
|
||||
expected: FAIL
|
||||
|
||||
[Detached Element.querySelectorAll: :lang pseudo-class selector, not matching element with no inherited language: #pseudo-lang-div1:lang(en)]
|
||||
expected: FAIL
|
||||
|
||||
[Detached Element.querySelector: :lang pseudo-class selector, not matching element with no inherited language: #pseudo-lang-div1:lang(en)]
|
||||
expected: FAIL
|
||||
|
||||
[Detached Element.querySelectorAll: :lang pseudo-class selector, matching specified language with exact value: #pseudo-lang-div2:lang(fr)]
|
||||
expected: FAIL
|
||||
|
||||
[Detached Element.querySelector: :lang pseudo-class selector, matching specified language with exact value: #pseudo-lang-div2:lang(fr)]
|
||||
expected: FAIL
|
||||
|
||||
[Detached Element.querySelectorAll: :lang pseudo-class selector, matching specified language with partial value: #pseudo-lang-div3:lang(en)]
|
||||
expected: FAIL
|
||||
|
||||
[Detached Element.querySelector: :lang pseudo-class selector, matching specified language with partial value: #pseudo-lang-div3:lang(en)]
|
||||
expected: FAIL
|
||||
|
||||
[Detached Element.querySelectorAll: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR)]
|
||||
expected: FAIL
|
||||
|
||||
[Detached Element.querySelector: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR)]
|
||||
expected: FAIL
|
||||
|
||||
[Detached Element.querySelectorAll: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line]
|
||||
expected: FAIL
|
||||
|
||||
[Detached Element.querySelector: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line]
|
||||
expected: FAIL
|
||||
|
||||
[Detached Element.querySelectorAll: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line]
|
||||
expected: FAIL
|
||||
|
||||
[Detached Element.querySelector: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line]
|
||||
expected: FAIL
|
||||
|
||||
[Detached Element.querySelectorAll: :first-letter pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-letter]
|
||||
expected: FAIL
|
||||
|
||||
[Detached Element.querySelector: :first-letter pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-letter]
|
||||
expected: FAIL
|
||||
|
||||
[Detached Element.querySelectorAll: ::first-letter pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-letter]
|
||||
expected: FAIL
|
||||
|
||||
[Detached Element.querySelector: ::first-letter pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-letter]
|
||||
expected: FAIL
|
||||
|
||||
[Fragment.querySelectorAll: Attribute whitespace-separated list selector, not matching class attribute with empty value: #attr-whitespace [class~=""\]]
|
||||
expected: FAIL
|
||||
|
||||
[Fragment.querySelector: Attribute whitespace-separated list selector, not matching class attribute with empty value: #attr-whitespace [class~=""\]]
|
||||
expected: FAIL
|
||||
|
||||
[Fragment.querySelectorAll: :target pseudo-class selector, matching the element referenced by the URL fragment identifier: :target]
|
||||
expected: FAIL
|
||||
|
||||
[Fragment.querySelector: :target pseudo-class selector, matching the element referenced by the URL fragment identifier: :target]
|
||||
expected: FAIL
|
||||
|
||||
[Fragment.querySelectorAll: :lang pseudo-class selector, not matching element with no inherited language: #pseudo-lang-div1:lang(en)]
|
||||
expected: FAIL
|
||||
|
||||
[Fragment.querySelector: :lang pseudo-class selector, not matching element with no inherited language: #pseudo-lang-div1:lang(en)]
|
||||
expected: FAIL
|
||||
|
||||
[Fragment.querySelectorAll: :lang pseudo-class selector, matching specified language with exact value: #pseudo-lang-div2:lang(fr)]
|
||||
expected: FAIL
|
||||
|
||||
[Fragment.querySelector: :lang pseudo-class selector, matching specified language with exact value: #pseudo-lang-div2:lang(fr)]
|
||||
expected: FAIL
|
||||
|
||||
[Fragment.querySelectorAll: :lang pseudo-class selector, matching specified language with partial value: #pseudo-lang-div3:lang(en)]
|
||||
expected: FAIL
|
||||
|
||||
[Fragment.querySelector: :lang pseudo-class selector, matching specified language with partial value: #pseudo-lang-div3:lang(en)]
|
||||
expected: FAIL
|
||||
|
||||
[Fragment.querySelectorAll: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR)]
|
||||
expected: FAIL
|
||||
|
||||
[Fragment.querySelector: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR)]
|
||||
expected: FAIL
|
||||
|
||||
[Fragment.querySelectorAll: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line]
|
||||
expected: FAIL
|
||||
|
||||
[Fragment.querySelector: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line]
|
||||
expected: FAIL
|
||||
|
||||
[Fragment.querySelectorAll: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line]
|
||||
expected: FAIL
|
||||
|
||||
[Fragment.querySelector: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line]
|
||||
expected: FAIL
|
||||
|
||||
[Fragment.querySelectorAll: :first-letter pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-letter]
|
||||
expected: FAIL
|
||||
|
||||
[Fragment.querySelector: :first-letter pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-letter]
|
||||
expected: FAIL
|
||||
|
||||
[Fragment.querySelectorAll: ::first-letter pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-letter]
|
||||
expected: FAIL
|
||||
|
||||
[Fragment.querySelector: ::first-letter pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-letter]
|
||||
expected: FAIL
|
||||
|
||||
[In-document Element.querySelectorAll: Attribute whitespace-separated list selector, not matching class attribute with empty value: #attr-whitespace [class~=""\]]
|
||||
expected: FAIL
|
||||
|
||||
[In-document Element.querySelector: Attribute whitespace-separated list selector, not matching class attribute with empty value: #attr-whitespace [class~=""\]]
|
||||
expected: FAIL
|
||||
|
||||
[In-document Element.querySelectorAll: :target pseudo-class selector, matching the element referenced by the URL fragment identifier: :target]
|
||||
expected: FAIL
|
||||
|
||||
[In-document Element.querySelector: :target pseudo-class selector, matching the element referenced by the URL fragment identifier: :target]
|
||||
expected: FAIL
|
||||
|
||||
[In-document Element.querySelectorAll: :lang pseudo-class selector, matching inherited language: #pseudo-lang-div1:lang(en)]
|
||||
expected: FAIL
|
||||
|
||||
[In-document Element.querySelector: :lang pseudo-class selector, matching inherited language: #pseudo-lang-div1:lang(en)]
|
||||
expected: FAIL
|
||||
|
||||
[In-document Element.querySelectorAll: :lang pseudo-class selector, matching specified language with exact value: #pseudo-lang-div2:lang(fr)]
|
||||
expected: FAIL
|
||||
|
||||
[In-document Element.querySelector: :lang pseudo-class selector, matching specified language with exact value: #pseudo-lang-div2:lang(fr)]
|
||||
expected: FAIL
|
||||
|
||||
[In-document Element.querySelectorAll: :lang pseudo-class selector, matching specified language with partial value: #pseudo-lang-div3:lang(en)]
|
||||
expected: FAIL
|
||||
|
||||
[In-document Element.querySelector: :lang pseudo-class selector, matching specified language with partial value: #pseudo-lang-div3:lang(en)]
|
||||
expected: FAIL
|
||||
|
||||
[In-document Element.querySelectorAll: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR)]
|
||||
expected: FAIL
|
||||
|
||||
[In-document Element.querySelector: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR)]
|
||||
expected: FAIL
|
||||
|
||||
[In-document Element.querySelectorAll: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line]
|
||||
expected: FAIL
|
||||
|
||||
[In-document Element.querySelector: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line]
|
||||
expected: FAIL
|
||||
|
||||
[In-document Element.querySelectorAll: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line]
|
||||
expected: FAIL
|
||||
|
||||
[In-document Element.querySelector: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line]
|
||||
expected: FAIL
|
||||
|
||||
[In-document Element.querySelectorAll: :first-letter pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-letter]
|
||||
expected: FAIL
|
||||
|
||||
[In-document Element.querySelector: :first-letter pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-letter]
|
||||
expected: FAIL
|
||||
|
||||
[In-document Element.querySelectorAll: ::first-letter pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-letter]
|
||||
expected: FAIL
|
||||
|
||||
[In-document Element.querySelector: ::first-letter pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-letter]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
[ProcessingInstruction-literal-2.xhtml]
|
||||
type: testharness
|
||||
[ProcessingInstruction literals]
|
||||
expected: FAIL
|
||||
|
|
@ -1,3 +1,14 @@
|
|||
[browsing-context-first-created.xhtml]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[Check the history.length of the first created browsing context]
|
||||
expected: FAIL
|
||||
|
||||
[Check the document's meta data]
|
||||
expected: FAIL
|
||||
|
||||
[Check the document's status]
|
||||
expected: FAIL
|
||||
|
||||
[Check the document's content]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
[document-compatmode-06.xhtml]
|
||||
type: testharness
|
||||
[document.compatMode: Standards]
|
||||
expected: FAIL
|
||||
|
|
@ -1,3 +1,56 @@
|
|||
[dynamic-urls.sub.xhtml]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[The 'href' attribute of the 'a' element]
|
||||
expected: FAIL
|
||||
|
||||
[The 'href' attribute of the 'link' element]
|
||||
expected: FAIL
|
||||
|
||||
[The 'href' attribute of the 'area' element]
|
||||
expected: FAIL
|
||||
|
||||
[The 'cite' attribute of the 'q' element]
|
||||
expected: FAIL
|
||||
|
||||
[The 'cite' attribute of the 'blockquote' element]
|
||||
expected: FAIL
|
||||
|
||||
[The 'cite' attribute of the 'ins' element]
|
||||
expected: FAIL
|
||||
|
||||
[The 'cite' attribute of the 'del' element]
|
||||
expected: FAIL
|
||||
|
||||
[The 'src' attribute of the 'img' element]
|
||||
expected: FAIL
|
||||
|
||||
[The 'src' attribute of the 'embed' element]
|
||||
expected: FAIL
|
||||
|
||||
[The 'src' attribute of the 'video' element]
|
||||
expected: FAIL
|
||||
|
||||
[The 'src' attribute of the 'iframe' element]
|
||||
expected: FAIL
|
||||
|
||||
[The 'src' attribute of the 'script' element]
|
||||
expected: FAIL
|
||||
|
||||
[The 'src' attribute of the 'source' element]
|
||||
expected: FAIL
|
||||
|
||||
[The 'src' attribute of the 'track' element]
|
||||
expected: FAIL
|
||||
|
||||
[The 'action' attribute of the 'form' element]
|
||||
expected: FAIL
|
||||
|
||||
[The 'data' attribute of the 'object' element]
|
||||
expected: FAIL
|
||||
|
||||
[The 'formaction' attribute of the 'button' element]
|
||||
expected: FAIL
|
||||
|
||||
[Change the base URL must effect the descendant elements only]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -2,4 +2,3 @@
|
|||
type: reftest
|
||||
reftype: ==
|
||||
refurl: /html/semantics/document-metadata/the-style-element/html_style_in_comment-ref.html
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
[script-noembed-noframes-iframe.xhtml]
|
||||
type: testharness
|
||||
[Script inside noembed, noframes and iframe]
|
||||
expected: FAIL
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue