Projects/Acid3: Difference between revisions
Appearance
< Projects
No edit summary |
|||
| Line 21: | Line 21: | ||
|- | |- | ||
| 40 || CSS Matching || Parsing of n-th-last-of-kind(-5n+3) wrong. || || No || Yes | | 40 || CSS Matching || Parsing of n-th-last-of-kind(-5n+3) wrong. || || No || Yes | ||
|- | |- | ||
| 48 (red linktest failed) || CSS || :visited doesn't match URL of part || Bug in konqueror's history manager. Works in testkhtml || Yes || Yes | | 48 (red linktest failed) || CSS || :visited doesn't match URL of part || Bug in konqueror's history manager. Works in testkhtml || Yes || Yes | ||
| Line 29: | Line 27: | ||
|- | |- | ||
| 53 || DOM2 Forms || Not managing form's element collection when not in document. || || Yes || Yes | | 53 || DOM2 Forms || Not managing form's element collection when not in document. || || Yes || Yes | ||
|- | |- | ||
| 70-80 || || Can't run due to 65/69 || SVG, SMIL + XHTML || No || 72, 73, 74, and 80 pass; rest fail | | 70-80 || || Can't run due to 65/69 || SVG, SMIL + XHTML || No || 72, 73, 74, and 80 pass; rest fail | ||
Revision as of 17:07, 1 December 2008
Acid3 Test Failures of KHTML
This is an overview of the remaing failures of KHTML on the Acid3 test. FF3.1 beta2pre scores 92/100, with 4 of the 6 colored boxes filled in correctly.
| Test No | Area | Diagnosis | Comment | passes in FF3 | passes in FF3.1 |
|---|---|---|---|---|---|
| 04 | HTML Parser | Parser bug: iframe missing text kid | discard_until = ID_IFRAME+ID_CLOSE_TAG --- added in http://lists.kde.org/?l=kde-commits&m=99906936412933&w=2. | No | Yes |
| 13 | DOM Range | Unhandled mutation | Yes | Yes | |
| 26/27 | JS + DOM Memory management | Cycle breaking cleaning up too much | Yes, but slow | Yes, but slow | |
| 29 | HTML Parser | Parser bug: table missing whitespace kid | Yes | Yes | |
| 40 | CSS Matching | Parsing of n-th-last-of-kind(-5n+3) wrong. | No | Yes | |
| 48 (red linktest failed) | CSS | :visited doesn't match URL of part | Bug in konqueror's history manager. Works in testkhtml | Yes | Yes |
| 51 | DOM2 Table | Stray row | Buggy test. Raised with Ian Hickson. | Yes | Yes |
| 53 | DOM2 Forms | Not managing form's element collection when not in document. | Yes | Yes | |
| 70-80 | Can't run due to 65/69 | SVG, SMIL + XHTML | No | 72, 73, 74, and 80 pass; rest fail |
Note: An upgrade to PCRE 7.7 is required to make tests 89 and 90 pass.
Random patch storage
These are not meant for commit, but more as a proof of analysis, and starting point for proper fix:
#16, red cat.
Ugly, but roughly correct.
Index: kio/slavebase.cpp
===================================================================
--- kio/slavebase.cpp (revision 793314)
+++ kio/slavebase.cpp (working copy)
@@ -527,6 +527,7 @@
void SlaveBase::errorPage()
{
send( INF_ERROR_PAGE );
+ mOutgoingMetaData["__kio_error_page"] = "1";
}
static bool isSubCommand(int cmd)
@@ -554,6 +555,11 @@
KIO_DATA << mOutgoingMetaData;
send( INF_META_DATA, data );
}
+
+ // re-send the error-page flag as well.
+ if (mOutgoingMetaData.contains("__kio_error_page"))
+ send( INF_ERROR_PAGE );
+
KIO_DATA << _type;
send( INF_MIME_TYPE, data );
while(true)
#4, iframe kids.
This one may be committable, actually
--- a/html/htmlparser.cpp
+++ b/html/htmlparser.cpp
@@ -874,7 +874,7 @@ NodeImpl *KHTMLParser::getElement(Token* t)
// a bit a special case, since the frame is inlined...
case ID_IFRAME:
n = new HTMLIFrameElementImpl(document);
- if (!t->flat) discard_until = ID_IFRAME+ID_CLOSE_TAG;
+ //if (!t->flat) discard_until = ID_IFRAME+ID_CLOSE_TAG;
break;
// form elements
#44 testcase
<style>
html*.test { border: 2px solid red; margin: 5px; }
</style>
<body class="test">
<p class="test">There should be no red borders here.
</body>
#48, red linktest failed
It's a bug inside KonqHistoryManager --- it ignores some inserts, which makes the link not :visited.
#71 testcase
With above, we fail at least the following in #71:
<script>
var doc = document;
doc.open();
doc.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"><title><\/title><span><\/span><script type=\"text/javascript\"><\/script>");
doc.close();
alert(document.childNodes.length);
alert(document.childNodes[0]);
alert(document.childNodes[1]);
</script>
This is fixed by below, but integrated test still fails:
--- html/htmlparser.cpp (revision 873693)
+++ html/htmlparser.cpp (working copy)
@@ -316,7 +316,8 @@
void KHTMLParser::parseDoctypeToken(DoctypeToken* t)
{
// Ignore any doctype after the first. TODO It should be also ignored when processing DocumentFragment
- if (current != document || document->doctype())
+ // We do want to accept it even after we have a document, however.
+ if (document->doctype())
return;
DocumentTypeImpl* doctype = new DocumentTypeImpl(document->implementation(), document, t->name, t->publicID, t->systemID);