<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[160024] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/160024">160024</a></dd>
<dt>Author</dt> <dd>rniwa@webkit.org</dd>
<dt>Date</dt> <dd>2013-12-03 11:44:55 -0800 (Tue, 03 Dec 2013)</dd>
</dl>

<h3>Log Message</h3>
<pre>XML fragment parsing algorithm doesn't use the context element's default namespace URI
https://bugs.webkit.org/show_bug.cgi?id=125132

Reviewed by Darin Adler.

Source/WebCore:

Always use the context element's namespace as the default namespace URI when one is not specified by xmlns.

The new behavior matches that of Internet Explorer and the specified behavior in HTML5:
http://www.w3.org/TR/2013/CR-html5-20130806/the-xhtml-syntax.html#parsing-xhtml-fragments

&quot;The default namespace is the namespace for which the DOM isDefaultNamespace() method on the element would
return true.&quot;

Test: fast/parser/fragment-parsing-in-document-without-xmlns.html

* xml/parser/XMLDocumentParserLibxml2.cpp:
(WebCore::XMLDocumentParser::XMLDocumentParser):

LayoutTests:

Added a test for parsing a markup fragment inside a XHTML document without xmlns.
The parsed fragment should use the context element's namespace as the default namespace.

* fast/parser/fragment-parsing-in-document-without-xmlns-expected.txt: Added.
* fast/parser/fragment-parsing-in-document-without-xmlns.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorexmlparserXMLDocumentParserLibxml2cpp">trunk/Source/WebCore/xml/parser/XMLDocumentParserLibxml2.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfastparserfragmentparsingindocumentwithoutxmlnsexpectedtxt">trunk/LayoutTests/fast/parser/fragment-parsing-in-document-without-xmlns-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastparserfragmentparsingindocumentwithoutxmlnshtml">trunk/LayoutTests/fast/parser/fragment-parsing-in-document-without-xmlns.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (160023 => 160024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2013-12-03 19:43:25 UTC (rev 160023)
+++ trunk/LayoutTests/ChangeLog        2013-12-03 19:44:55 UTC (rev 160024)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2013-12-03  Ryosuke Niwa  &lt;rniwa@webkit.org&gt;
+
+        XML fragment parsing algorithm doesn't use the context element's default namespace URI
+        https://bugs.webkit.org/show_bug.cgi?id=125132
+
+        Reviewed by Darin Adler.
+
+        Added a test for parsing a markup fragment inside a XHTML document without xmlns.
+        The parsed fragment should use the context element's namespace as the default namespace.
+
+        * fast/parser/fragment-parsing-in-document-without-xmlns-expected.txt: Added.
+        * fast/parser/fragment-parsing-in-document-without-xmlns.html: Added.
+
</ins><span class="cx"> 2013-12-03  Radu Stavila  &lt;stavila@adobe.com&gt;
</span><span class="cx"> 
</span><span class="cx">         The overflow border of a relatively positioned element inside a region is not painted
</span></span></pre></div>
<a id="trunkLayoutTestsfastparserfragmentparsingindocumentwithoutxmlnsexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/parser/fragment-parsing-in-document-without-xmlns-expected.txt (0 => 160024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/parser/fragment-parsing-in-document-without-xmlns-expected.txt                                (rev 0)
+++ trunk/LayoutTests/fast/parser/fragment-parsing-in-document-without-xmlns-expected.txt        2013-12-03 19:44:55 UTC (rev 160024)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+This tests the fragment parsing algorithm inside a XHTML document without xmlns set on the document element via innerHTML. The element without prefix or xmlns attribute should use the default namespace of the context element (that of body element in this case).
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+xmlDocumentWithoutXmlns.body = xmlDocumentWithoutXmlns.createElement('body');
+contextElement = xmlDocumentWithoutXmlns.body;
+FAIL contextElement.innerHTML = '&lt;a href=&quot;&quot;&gt;&lt;/a&gt;'; contextElement.body.firstChild.namespaceURI should be http://www.w3.org/1999/xhtml. Threw exception TypeError: undefined is not an object (evaluating 'contextElement.body.firstChild')
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsfastparserfragmentparsingindocumentwithoutxmlnshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/parser/fragment-parsing-in-document-without-xmlns.html (0 => 160024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/parser/fragment-parsing-in-document-without-xmlns.html                                (rev 0)
+++ trunk/LayoutTests/fast/parser/fragment-parsing-in-document-without-xmlns.html        2013-12-03 19:44:55 UTC (rev 160024)
</span><span class="lines">@@ -0,0 +1,22 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;body&gt;
+&lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script&gt;
+
+description(&quot;This tests the fragment parsing algorithm inside a XHTML document without xmlns set on the document element via innerHTML.\n&quot;
+    + &quot;The element without prefix or xmlns attribute should use the default namespace of the context element (that of body element in this case).&quot;);
+
+var xhtmlDoctype = document.implementation.createDocumentType('html',
+    '-//W3C//DTD XHTML 1.0 Strict//EN', 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd');
+var xmlDocumentWithoutXmlns = document.implementation.createDocument('http://www.w3.org/1999/xhtml', 'html', xhtmlDoctype);
+evalAndLog(&quot;xmlDocumentWithoutXmlns.body = xmlDocumentWithoutXmlns.createElement('body');&quot;);
+evalAndLog(&quot;contextElement = xmlDocumentWithoutXmlns.body;&quot;);
+shouldBe(&quot;contextElement.innerHTML = '&lt;a href=\&quot;\&quot;&gt;&lt;/a&gt;'; contextElement.body.firstChild.namespaceURI&quot;, &quot;'http://www.w3.org/1999/xhtml'&quot;);
+
+var successfullyParsed = true;
+
+&lt;/script&gt;
+&lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (160023 => 160024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2013-12-03 19:43:25 UTC (rev 160023)
+++ trunk/Source/WebCore/ChangeLog        2013-12-03 19:44:55 UTC (rev 160024)
</span><span class="lines">@@ -1,3 +1,23 @@
</span><ins>+2013-12-03  Ryosuke Niwa  &lt;rniwa@webkit.org&gt;
+
+        XML fragment parsing algorithm doesn't use the context element's default namespace URI
+        https://bugs.webkit.org/show_bug.cgi?id=125132
+
+        Reviewed by Darin Adler.
+
+        Always use the context element's namespace as the default namespace URI when one is not specified by xmlns.
+
+        The new behavior matches that of Internet Explorer and the specified behavior in HTML5:
+        http://www.w3.org/TR/2013/CR-html5-20130806/the-xhtml-syntax.html#parsing-xhtml-fragments
+
+        &quot;The default namespace is the namespace for which the DOM isDefaultNamespace() method on the element would
+        return true.&quot;
+
+        Test: fast/parser/fragment-parsing-in-document-without-xmlns.html
+
+        * xml/parser/XMLDocumentParserLibxml2.cpp:
+        (WebCore::XMLDocumentParser::XMLDocumentParser):
+
</ins><span class="cx"> 2013-12-03  Nick Diego Yamane  &lt;nick.yamane@openbossa.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Remove some CSS Variables leftovers
</span></span></pre></div>
<a id="trunkSourceWebCorexmlparserXMLDocumentParserLibxml2cpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/xml/parser/XMLDocumentParserLibxml2.cpp (160023 => 160024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/xml/parser/XMLDocumentParserLibxml2.cpp        2013-12-03 19:43:25 UTC (rev 160023)
+++ trunk/Source/WebCore/xml/parser/XMLDocumentParserLibxml2.cpp        2013-12-03 19:44:55 UTC (rev 160024)
</span><span class="lines">@@ -627,6 +627,7 @@
</span><span class="cx">     if (elemStack.isEmpty())
</span><span class="cx">         return;
</span><span class="cx"> 
</span><ins>+    // FIXME: Share code with isDefaultNamespace() per http://www.whatwg.org/specs/web-apps/current-work/multipage/the-xhtml-syntax.html#parsing-xhtml-fragments
</ins><span class="cx">     for (; !elemStack.isEmpty(); elemStack.removeLast()) {
</span><span class="cx">         Element* element = elemStack.last();
</span><span class="cx">         if (element-&gt;hasAttributes()) {
</span><span class="lines">@@ -640,8 +641,7 @@
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    // If the parent element is not in document tree, there may be no xmlns attribute; just default to the parent's namespace.
-    if (m_defaultNamespaceURI.isNull() &amp;&amp; !parentElement-&gt;inDocument())
</del><ins>+    if (m_defaultNamespaceURI.isNull())
</ins><span class="cx">         m_defaultNamespaceURI = parentElement-&gt;namespaceURI();
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>