Bug 1363658 - Serializing doctypes should omit internal subset; r?hsivonen
Changes to match spec, Chrome, and Safari. The spec was discussed and
is what we want -- we already expand entities from the internal subset
when parsing, so there's no need to remember their definitions. Indeed
it seems like it would make sense to alter the parser to throw away the
internal subset entirely at the end of parsing.
MozReview-Commit-ID: LDvYAqSZkgE
--- a/dom/base/nsXMLContentSerializer.cpp
+++ b/dom/base/nsXMLContentSerializer.cpp
@@ -361,26 +361,24 @@ nsXMLContentSerializer::AppendComment(ns
NS_IMETHODIMP
nsXMLContentSerializer::AppendDoctype(nsIContent* aDocType,
nsAString& aStr)
{
nsCOMPtr<nsIDOMDocumentType> docType = do_QueryInterface(aDocType);
NS_ENSURE_ARG(docType);
nsresult rv;
- nsAutoString name, publicId, systemId, internalSubset;
+ nsAutoString name, publicId, systemId;
rv = docType->GetName(name);
if (NS_FAILED(rv)) return NS_ERROR_FAILURE;
rv = docType->GetPublicId(publicId);
if (NS_FAILED(rv)) return NS_ERROR_FAILURE;
rv = docType->GetSystemId(systemId);
if (NS_FAILED(rv)) return NS_ERROR_FAILURE;
- rv = docType->GetInternalSubset(internalSubset);
- if (NS_FAILED(rv)) return NS_ERROR_FAILURE;
NS_ENSURE_TRUE(MaybeAddNewlineForRootNode(aStr), NS_ERROR_OUT_OF_MEMORY);
NS_ENSURE_TRUE(AppendToString(NS_LITERAL_STRING("<!DOCTYPE "), aStr), NS_ERROR_OUT_OF_MEMORY);
NS_ENSURE_TRUE(AppendToString(name, aStr), NS_ERROR_OUT_OF_MEMORY);
char16_t quote;
if (!publicId.IsEmpty()) {
@@ -416,22 +414,16 @@ nsXMLContentSerializer::AppendDoctype(ns
quote = char16_t('\'');
}
NS_ENSURE_TRUE(AppendToString(NS_LITERAL_STRING(" SYSTEM "), aStr), NS_ERROR_OUT_OF_MEMORY);
NS_ENSURE_TRUE(AppendToString(quote, aStr), NS_ERROR_OUT_OF_MEMORY);
NS_ENSURE_TRUE(AppendToString(systemId, aStr), NS_ERROR_OUT_OF_MEMORY);
NS_ENSURE_TRUE(AppendToString(quote, aStr), NS_ERROR_OUT_OF_MEMORY);
}
- if (!internalSubset.IsEmpty()) {
- NS_ENSURE_TRUE(AppendToString(NS_LITERAL_STRING(" ["), aStr), NS_ERROR_OUT_OF_MEMORY);
- NS_ENSURE_TRUE(AppendToString(internalSubset, aStr), NS_ERROR_OUT_OF_MEMORY);
- NS_ENSURE_TRUE(AppendToString(char16_t(']'), aStr), NS_ERROR_OUT_OF_MEMORY);
- }
-
NS_ENSURE_TRUE(AppendToString(kGreaterThan, aStr), NS_ERROR_OUT_OF_MEMORY);
MaybeFlagNewlineForRootNode(aDocType);
return NS_OK;
}
nsresult
nsXMLContentSerializer::PushNameSpaceDecl(const nsAString& aPrefix,
deleted file mode 100644
--- a/testing/web-platform/meta/domparsing/DOMParser-parseFromString-xml-internal-subset.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[DOMParser-parseFromString-xml-internal-subset.html]
- type: testharness
- [Parsing and serialization of doctype internal subset]
- expected: FAIL
-