Bug 1313278 - Remove code of adding xml:base attribute in nsParserUtils::ParseFragment. r?hsivonen draft
authorXidorn Quan <me@upsuper.org>
Mon, 20 Feb 2017 18:26:27 +1100
changeset 487175 d07e32571c083c16db018d6520eed5ffcc5acbb3
parent 487174 e244e94d50b59ff31b2647538243621ff1d345a4
child 546410 f638d0b8ed4935e75b07444a5da76d4b5568e642
push id46168
push userxquan@mozilla.com
push dateTue, 21 Feb 2017 04:05:14 +0000
reviewershsivonen
bugs1313278
milestone54.0a1
Bug 1313278 - Remove code of adding xml:base attribute in nsParserUtils::ParseFragment. r?hsivonen MozReview-Commit-ID: Dyv9OlbVsaQ
browser/components/feeds/test/test_bug436801.html
parser/html/nsParserUtils.cpp
--- a/browser/components/feeds/test/test_bug436801.html
+++ b/browser/components/feeds/test/test_bug436801.html
@@ -18,53 +18,53 @@ https://bugzilla.mozilla.org/show_bug.cg
 <script class="testbody" type="text/javascript">
 
 SimpleTest.waitForExplicitFinish();
 
 addLoadEvent(function() {
   var doc = SpecialPowers.wrap($("testFrame")).contentDocument;
 
   checkNode(doc.getElementById("feedTitleText"), [
-    "ELEMENT", "h1", { "xml:base": "http://www.example.com/foo/bar/" }, [
+    "ELEMENT", "h1", [
       ["TEXT", "Example of a "],
       ["ELEMENT", "em", [
         ["TEXT", "special"],
       ]],
       ["TEXT", " feed ("],
       ["ELEMENT", "img", { "src": "baz.png" }],
       ["TEXT", ")"],
     ]
   ]);
 
   checkNode(doc.getElementById("feedSubtitleText"), [
-    "ELEMENT", "h2", { "xml:base": "http://www.example.com/foo/bar/" }, [
+    "ELEMENT", "h2", [
       ["TEXT", "With a "],
       ["ELEMENT", "em", [
         ["TEXT", "special"],
       ]],
       ["TEXT", " subtitle ("],
       ["ELEMENT", "img", { "src": "baz.png" }],
       ["TEXT", ")"],
     ]
   ]);
 
   checkNode(doc.querySelector(".entry").firstChild.firstChild.firstChild, [
-    "ELEMENT", "span", { "xml:base": "http://www.example.com/foo/bar/" }, [
+    "ELEMENT", "span", [
       ["TEXT", "Some "],
       ["ELEMENT", "abbr", { title: "Extensible Hyper-text Mark-up Language" }, [
         ["TEXT", "XHTML"],
       ]],
       ["TEXT", " examples ("],
       ["ELEMENT", "img", { "src": "baz.png" }],
       ["TEXT", ")"],
     ]
   ]);
 
   checkNode(doc.querySelectorAll(".entry")[1].firstChild.firstChild.firstChild, [
-    "ELEMENT", "span", { "xml:base": "http://www.example.com/foo/bar/" }, [
+    "ELEMENT", "span", [
       ["TEXT", "Some "],
       ["ELEMENT", "abbr", { title: "Hyper-text Mark-up Language" }, [
         ["TEXT", "HTML"],
       ]],
       ["TEXT", " examples ("],
       ["ELEMENT", "img", { "src": "baz.png" }],
       ["TEXT", ")"],
     ]
--- a/parser/html/nsParserUtils.cpp
+++ b/parser/html/nsParserUtils.cpp
@@ -157,72 +157,35 @@ nsParserUtils::ParseFragment(const nsASt
   if (scripts_enabled) {
     loader->SetEnabled(false);
   }
 
   // Wrap things in a div or body for parsing, but it won't show up in
   // the fragment.
   nsresult rv = NS_OK;
   AutoTArray<nsString, 2> tagStack;
-  nsAutoCString base, spec;
+  nsCOMPtr<nsIContent> fragment;
   if (aIsXML) {
     // XHTML
-    if (aBaseURI) {
-      base.AppendLiteral(XHTML_DIV_TAG);
-      base.AppendLiteral(" xml:base=\"");
-      rv = aBaseURI->GetSpec(spec);
-      NS_ENSURE_SUCCESS(rv, rv);
-      // nsEscapeHTML is good enough, because we only need to get
-      // quotes, ampersands, and angle brackets
-      char* escapedSpec = nsEscapeHTML(spec.get());
-      if (escapedSpec)
-        base += escapedSpec;
-      free(escapedSpec);
-      base.Append('"');
-      tagStack.AppendElement(NS_ConvertUTF8toUTF16(base));
-    }  else {
-      tagStack.AppendElement(NS_LITERAL_STRING(XHTML_DIV_TAG));
-    }
-  }
-
-  nsCOMPtr<nsIContent> fragment;
-  if (aIsXML) {
+    tagStack.AppendElement(NS_LITERAL_STRING(XHTML_DIV_TAG));
     rv = nsContentUtils::ParseFragmentXML(aFragment,
                                           document,
                                           tagStack,
                                           true,
                                           aReturn);
     fragment = do_QueryInterface(*aReturn);
   } else {
     NS_ADDREF(*aReturn = new DocumentFragment(document->NodeInfoManager()));
     fragment = do_QueryInterface(*aReturn);
     rv = nsContentUtils::ParseFragmentHTML(aFragment,
                                            fragment,
                                            nsGkAtoms::body,
                                            kNameSpaceID_XHTML,
                                            false,
                                            true);
-    // Now, set the base URI on all subtree roots.
-    if (aBaseURI) {
-      nsresult rv2 = aBaseURI->GetSpec(spec);
-      NS_ENSURE_SUCCESS(rv2, rv2);
-      nsAutoString spec16;
-      CopyUTF8toUTF16(spec, spec16);
-      nsIContent* node = fragment->GetFirstChild();
-      while (node) {
-        if (node->IsElement()) {
-          node->SetAttr(kNameSpaceID_XML,
-                        nsGkAtoms::base,
-                        nsGkAtoms::xml,
-                        spec16,
-                        false);
-        }
-        node = node->GetNextSibling();
-      }
-    }
   }
   if (fragment) {
     nsTreeSanitizer sanitizer(aFlags);
     sanitizer.Sanitize(fragment);
   }
 
   if (scripts_enabled) {
     loader->SetEnabled(true);