Bug 1363658 - Serializing doctypes should omit internal subset; r?hsivonen draft
authorAryeh Gregor <ayg@aryeh.name>
Thu, 03 Aug 2017 15:33:55 +0300
changeset 620468 dfa90691c32f19ad093ec06096431e54aac1a6b3
parent 619581 52285ea5e54c73d3ed824544cef2ee3f195f05e6
child 640693 017886cd6360bf7e9f7f473f0b65cc3c6e801ba0
push id72036
push userbmo:ayg@aryeh.name
push dateThu, 03 Aug 2017 12:46:56 +0000
reviewershsivonen
bugs1363658
milestone57.0a1
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
dom/base/nsXMLContentSerializer.cpp
testing/web-platform/meta/domparsing/DOMParser-parseFromString-xml-internal-subset.html.ini
--- 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
-