XMLHttpRequest: responseXML returns null if the Content-Type is valid (end in +xml...
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 31 Aug 2019 10:16:40 +0000 (10:16 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 31 Aug 2019 10:16:40 +0000 (10:16 +0000)
https://bugs.webkit.org/show_bug.cgi?id=46146

Patch by Rob Buis <rbuis@igalia.com> on 2019-08-31
Reviewed by Youenn Fablet.

LayoutTests/imported/w3c:

Updated expected result.

* web-platform-tests/xhr/responsexml-media-type-expected.txt:

Source/WebCore:

Make response MIME type fallback to text/xml in case mimeType could
not be extracted [1] and use the stricter ParsedContentType for that.

Behavior matches Firefox.

Test: web-platform-tests/xhr/responsexml-media-type.htm

[1] https://xhr.spec.whatwg.org/#response-mime-type

* xml/XMLHttpRequest.cpp:
(WebCore::XMLHttpRequest::responseMIMEType const):

LayoutTests:

Adjust test to match the specification: make response MIME type fallback to
text/xml in case mimeType could not be extracted.

Behavior matches Firefox.

* http/tests/xmlhttprequest/supported-xml-content-types-expected.txt:
* http/tests/xmlhttprequest/supported-xml-content-types.html:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@249361 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/http/tests/xmlhttprequest/supported-xml-content-types-expected.txt
LayoutTests/http/tests/xmlhttprequest/supported-xml-content-types.html
LayoutTests/imported/w3c/ChangeLog
LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-media-type-expected.txt
Source/WebCore/ChangeLog
Source/WebCore/xml/XMLHttpRequest.cpp

index bcf8d93..0cf1a3d 100644 (file)
@@ -1,3 +1,18 @@
+2019-08-31  Rob Buis  <rbuis@igalia.com>
+
+        XMLHttpRequest: responseXML returns null if the Content-Type is valid (end in +xml) in some cases
+        https://bugs.webkit.org/show_bug.cgi?id=46146
+
+        Reviewed by Youenn Fablet.
+
+        Adjust test to match the specification: make response MIME type fallback to
+        text/xml in case mimeType could not be extracted.
+
+        Behavior matches Firefox.
+
+        * http/tests/xmlhttprequest/supported-xml-content-types-expected.txt:
+        * http/tests/xmlhttprequest/supported-xml-content-types.html:
+
 2019-08-31  Frederic Wang  <fwang@igalia.com>
 
         Fix interpretation of fraction shifts
index 3da35e7..7277d23 100644 (file)
@@ -40,40 +40,40 @@ PASS -- testing: foo&bar/baz+xml -- responseXML: [object XMLDocument]
 
 PASS -- testing: foo*bar/baz+xml -- responseXML: [object XMLDocument]
 
-PASS -- testing: text/html -- responseXML: null
+PASS -- testing: foo bar/baz+xml -- responseXML: [object XMLDocument]
 
-PASS -- testing: image/png -- responseXML: null
+PASS -- testing: foo[bar/baz+xml -- responseXML: [object XMLDocument]
 
-PASS -- testing: invalid -- responseXML: null
+PASS -- testing: foo]bar/baz+xml -- responseXML: [object XMLDocument]
 
-PASS -- testing: foo bar/baz+xml -- responseXML: null
+PASS -- testing: foo(bar/baz+xml -- responseXML: [object XMLDocument]
 
-PASS -- testing: foo[bar/baz+xml -- responseXML: null
+PASS -- testing: foo)bar/baz+xml -- responseXML: [object XMLDocument]
 
-PASS -- testing: foo]bar/baz+xml -- responseXML: null
+PASS -- testing: foo
 
-PASS -- testing: foo(bar/baz+xml -- responseXML: null
+PASS -- testing: foo>bar/baz+xml -- responseXML: [object XMLDocument]
 
-PASS -- testing: foo)bar/baz+xml -- responseXML: null
+PASS -- testing: foo@bar/baz+xml -- responseXML: [object XMLDocument]
 
-PASS -- testing: foo
+PASS -- testing: foo,bar/baz+xml -- responseXML: [object XMLDocument]
 
-PASS -- testing: foo>bar/baz+xml -- responseXML: null
+PASS -- testing: foo;bar/baz+xml -- responseXML: [object XMLDocument]
 
-PASS -- testing: foo@bar/baz+xml -- responseXML: null
+PASS -- testing: foo:bar/baz+xml -- responseXML: [object XMLDocument]
 
-PASS -- testing: foo,bar/baz+xml -- responseXML: null
+PASS -- testing: foo\bar/baz+xml -- responseXML: [object XMLDocument]
 
-PASS -- testing: foo;bar/baz+xml -- responseXML: null
+PASS -- testing: foo"bar/baz+xml -- responseXML: [object XMLDocument]
 
-PASS -- testing: foo:bar/baz+xml -- responseXML: null
+PASS -- testing: foo/bar/baz+xml -- responseXML: [object XMLDocument]
 
-PASS -- testing: foo\bar/baz+xml -- responseXML: null
+PASS -- testing: foo?bar/baz+xml -- responseXML: [object XMLDocument]
 
-PASS -- testing: foo"bar/baz+xml -- responseXML: null
+PASS -- testing: foo=bar/baz+xml -- responseXML: [object XMLDocument]
 
-PASS -- testing: foo/bar/baz+xml -- responseXML: null
+PASS -- testing: invalid -- responseXML: [object XMLDocument]
 
-PASS -- testing: foo?bar/baz+xml -- responseXML: null
+PASS -- testing: text/html -- responseXML: null
 
-PASS -- testing: foo=bar/baz+xml -- responseXML: null
+PASS -- testing: image/png -- responseXML: null
index c827a2a..c901f58 100644 (file)
@@ -56,31 +56,27 @@ testXMLType("foo`bar/baz+xml", true);
 testXMLType("foo#bar/baz+xml", true);
 testXMLType("foo&bar/baz+xml", true);
 testXMLType("foo*bar/baz+xml", true);
+testXMLType("foo bar/baz+xml", true);
+testXMLType("foo[bar/baz+xml", true);
+testXMLType("foo]bar/baz+xml", true);
+testXMLType("foo(bar/baz+xml", true);
+testXMLType("foo)bar/baz+xml", true);
+testXMLType("foo<bar/baz+xml", true);
+testXMLType("foo>bar/baz+xml", true);
+testXMLType("foo@bar/baz+xml", true);
+testXMLType("foo,bar/baz+xml", true);
+testXMLType("foo;bar/baz+xml", true);
+testXMLType("foo:bar/baz+xml", true);
+testXMLType("foo\\bar/baz+xml", true);
+testXMLType('foo"bar/baz+xml', true);
+testXMLType("foo/bar/baz+xml", true);
+testXMLType("foo?bar/baz+xml", true);
+testXMLType("foo=bar/baz+xml", true);
+
+testXMLType("invalid", true);
 
 // non-xml types
 testXMLType("text/html", false);
 testXMLType("image/png", false);
 
-
-// invalid types
-testXMLType("invalid", false);
-
-testXMLType("foo bar/baz+xml", false);
-
-testXMLType("foo[bar/baz+xml", false);
-testXMLType("foo]bar/baz+xml", false);
-testXMLType("foo(bar/baz+xml", false);
-testXMLType("foo)bar/baz+xml", false);
-testXMLType("foo<bar/baz+xml", false);
-testXMLType("foo>bar/baz+xml", false);
-testXMLType("foo@bar/baz+xml", false);
-testXMLType("foo,bar/baz+xml", false);
-testXMLType("foo;bar/baz+xml", false);
-testXMLType("foo:bar/baz+xml", false);
-testXMLType("foo\\bar/baz+xml", false);
-testXMLType('foo"bar/baz+xml', false);
-testXMLType("foo/bar/baz+xml", false);
-testXMLType("foo?bar/baz+xml", false);
-testXMLType("foo=bar/baz+xml", false);
-
 </script>
index 1963653..65a2803 100644 (file)
@@ -1,3 +1,14 @@
+2019-08-31  Rob Buis  <rbuis@igalia.com>
+
+        XMLHttpRequest: responseXML returns null if the Content-Type is valid (end in +xml) in some cases
+        https://bugs.webkit.org/show_bug.cgi?id=46146
+
+        Reviewed by Youenn Fablet.
+
+        Updated expected result.
+
+        * web-platform-tests/xhr/responsexml-media-type-expected.txt:
+
 2019-08-31  Frederic Wang  <fwang@igalia.com>
 
         Fix interpretation of fraction shifts
index 7b2a881..15f4b7e 100644 (file)
@@ -1,14 +1,14 @@
 
 PASS XMLHttpRequest: responseXML MIME type tests ('', should  parse) 
 PASS XMLHttpRequest: responseXML MIME type tests ('text/html', should not parse) 
-FAIL XMLHttpRequest: responseXML MIME type tests ('bogus', should  parse) null is not an object (evaluating 'client.responseXML.documentElement')
-FAIL XMLHttpRequest: responseXML MIME type tests ('bogus+xml', should  parse) null is not an object (evaluating 'client.responseXML.documentElement')
+PASS XMLHttpRequest: responseXML MIME type tests ('bogus', should  parse) 
+PASS XMLHttpRequest: responseXML MIME type tests ('bogus+xml', should  parse) 
 PASS XMLHttpRequest: responseXML MIME type tests ('text/plain;+xml', should not parse) 
 PASS XMLHttpRequest: responseXML MIME type tests ('text/plainxml', should not parse) 
 PASS XMLHttpRequest: responseXML MIME type tests ('video/x-awesome+xml', should  parse) 
 PASS XMLHttpRequest: responseXML MIME type tests ('video/x-awesome', should not parse) 
 PASS XMLHttpRequest: responseXML MIME type tests ('text/xml', should  parse) 
-FAIL XMLHttpRequest: responseXML MIME type tests ('application', should  parse) null is not an object (evaluating 'client.responseXML.documentElement')
+PASS XMLHttpRequest: responseXML MIME type tests ('application', should  parse) 
 FAIL XMLHttpRequest: responseXML MIME type tests ('text/xsl', should not parse) assert_equals: expected null but got Document node with 1 child
 PASS XMLHttpRequest: responseXML MIME type tests ('text/plain', should not parse) 
 PASS XMLHttpRequest: responseXML MIME type tests ('application/rdf', should not parse) 
index ea9f4c1..ee8b7ae 100644 (file)
@@ -1,3 +1,22 @@
+2019-08-31  Rob Buis  <rbuis@igalia.com>
+
+        XMLHttpRequest: responseXML returns null if the Content-Type is valid (end in +xml) in some cases
+        https://bugs.webkit.org/show_bug.cgi?id=46146
+
+        Reviewed by Youenn Fablet.
+
+        Make response MIME type fallback to text/xml in case mimeType could
+        not be extracted [1] and use the stricter ParsedContentType for that.
+
+        Behavior matches Firefox.
+
+        Test: web-platform-tests/xhr/responsexml-media-type.htm
+
+        [1] https://xhr.spec.whatwg.org/#response-mime-type
+
+        * xml/XMLHttpRequest.cpp:
+        (WebCore::XMLHttpRequest::responseMIMEType const):
+
 2019-08-31  Frederic Wang  <fwang@igalia.com>
 
         Fix interpretation of fraction shifts
index 0529344..53ac481 100644 (file)
@@ -841,12 +841,14 @@ String XMLHttpRequest::responseMIMEType() const
 {
     String mimeType = extractMIMETypeFromMediaType(m_mimeTypeOverride);
     if (mimeType.isEmpty()) {
+        String contentType;
         if (m_response.isHTTP())
-            mimeType = extractMIMETypeFromMediaType(m_response.httpHeaderField(HTTPHeaderName::ContentType));
+            contentType = m_response.httpHeaderField(HTTPHeaderName::ContentType);
         else
-            mimeType = m_response.mimeType();
-        if (mimeType.isEmpty())
-            mimeType = "text/xml"_s;
+            contentType = m_response.mimeType();
+        if (auto parsedContentType = ParsedContentType::create(contentType))
+            return parsedContentType->mimeType();
+        return "text/xml"_s;
     }
     return mimeType;
 }