Changeset 103106 in webkit


Ignore:
Timestamp:
Dec 16, 2011 2:16:41 PM (12 years ago)
Author:
jarred@sencha.com
Message:

Support HTML documents in XHR.responseXML
https://bugs.webkit.org/show_bug.cgi?id=74626

Latest W3C XHR spec details for the responseXML attribute:
http://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#the-responsexml-attribute
http://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#document-response-entity-body

XHR.responseXML was not compliant per the latest editor's draft of the XHR spec.
The following compliance issue have been corrected:

  • A responseType of "text" should disallow access to responseXML by throwing an InvalidState exception.
  • When the error flag is toggled, responseXML should return "null" immediately and not attempt to create a new Document.
  • responseXML should return a valid HTML document when the MIME type is "text/html", but only when the caller has explicitly set responseType to "document".

Reviewed by Alexey Proskuryakov.

Source/WebCore:

Tests: fast/xmlhttprequest/xmlhttprequest-responseXML-html-document-responsetype-quirks.html

fast/xmlhttprequest/xmlhttprequest-responseXML-html-document-responsetype-strict.html
fast/xmlhttprequest/xmlhttprequest-responseXML-html-no-responsetype.html
fast/xmlhttprequest/xmlhttprequest-responseXML-invalid-xml.html
fast/xmlhttprequest/xmlhttprequest-responseXML-xml-document-responsetype.html
fast/xmlhttprequest/xmlhttprequest-responseXML-xml-text-responsetype.html

  • xml/XMLHttpRequest.cpp:

(WebCore::XMLHttpRequest::responseXML):
(WebCore::XMLHttpRequest::clearResponseBuffers):

  • xml/XMLHttpRequest.h: Rename m_responseXML to m_responseDocument

(WebCore::XMLHttpRequest::optionalResponseXML):

LayoutTests:

  • fast/frames/iframe-reparenting.html:
  • fast/xmlhttprequest/resources/xmlhttprequest-get-invalid-data.xml: Added.
  • fast/xmlhttprequest/xmlhttprequest-responseXML-html-document-responsetype-quirks-expected.txt: Added.
  • fast/xmlhttprequest/xmlhttprequest-responseXML-html-document-responsetype-quirks.html: Added.
  • fast/xmlhttprequest/xmlhttprequest-responseXML-html-document-responsetype-strict-expected.txt: Added.
  • fast/xmlhttprequest/xmlhttprequest-responseXML-html-document-responsetype-strict.html: Added.
  • fast/xmlhttprequest/xmlhttprequest-responseXML-html-no-responsetype-expected.txt: Added.
  • fast/xmlhttprequest/xmlhttprequest-responseXML-html-no-responsetype.html: Added.
  • fast/xmlhttprequest/xmlhttprequest-responseXML-invalid-xml-expected.txt: Added.
  • fast/xmlhttprequest/xmlhttprequest-responseXML-invalid-xml.html: Added.
  • fast/xmlhttprequest/xmlhttprequest-responseXML-xml-document-responsetype-expected.txt: Added.
  • fast/xmlhttprequest/xmlhttprequest-responseXML-xml-document-responsetype.html: Added.
  • fast/xmlhttprequest/xmlhttprequest-responseXML-xml-text-responsetype-expected.txt: Added.
  • fast/xmlhttprequest/xmlhttprequest-responseXML-xml-text-responsetype.html: Added.
Location:
trunk
Files:
13 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r103105 r103106  
     12011-12-16  Jarred Nicholls  <jarred@sencha.com>
     2
     3        Support HTML documents in XHR.responseXML
     4        https://bugs.webkit.org/show_bug.cgi?id=74626
     5
     6        Latest W3C XHR spec details for the responseXML attribute:
     7        http://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#the-responsexml-attribute
     8        http://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#document-response-entity-body
     9
     10        XHR.responseXML was not compliant per the latest editor's draft of the XHR spec.
     11        The following compliance issue have been corrected:
     12          - A responseType of "text" should disallow access to responseXML by throwing an InvalidState exception.
     13          - When the error flag is toggled, responseXML should return "null" immediately and not attempt to create a new Document.
     14          - responseXML should return a valid HTML document when the MIME type is "text/html", but only when the caller has
     15            explicitly set responseType to "document".
     16
     17        Reviewed by Alexey Proskuryakov.
     18
     19        * fast/frames/iframe-reparenting.html:
     20        * fast/xmlhttprequest/resources/xmlhttprequest-get-invalid-data.xml: Added.
     21        * fast/xmlhttprequest/xmlhttprequest-responseXML-html-document-responsetype-quirks-expected.txt: Added.
     22        * fast/xmlhttprequest/xmlhttprequest-responseXML-html-document-responsetype-quirks.html: Added.
     23        * fast/xmlhttprequest/xmlhttprequest-responseXML-html-document-responsetype-strict-expected.txt: Added.
     24        * fast/xmlhttprequest/xmlhttprequest-responseXML-html-document-responsetype-strict.html: Added.
     25        * fast/xmlhttprequest/xmlhttprequest-responseXML-html-no-responsetype-expected.txt: Added.
     26        * fast/xmlhttprequest/xmlhttprequest-responseXML-html-no-responsetype.html: Added.
     27        * fast/xmlhttprequest/xmlhttprequest-responseXML-invalid-xml-expected.txt: Added.
     28        * fast/xmlhttprequest/xmlhttprequest-responseXML-invalid-xml.html: Added.
     29        * fast/xmlhttprequest/xmlhttprequest-responseXML-xml-document-responsetype-expected.txt: Added.
     30        * fast/xmlhttprequest/xmlhttprequest-responseXML-xml-document-responsetype.html: Added.
     31        * fast/xmlhttprequest/xmlhttprequest-responseXML-xml-text-responsetype-expected.txt: Added.
     32        * fast/xmlhttprequest/xmlhttprequest-responseXML-xml-text-responsetype.html: Added.
     33
    1342011-12-16  Adrienne Walker  <enne@google.com>
    235
  • trunk/LayoutTests/fast/frames/iframe-reparenting.html

    r82713 r103106  
    6464    // Last test - verify that non-attached document does not keep iframe alive even if adoptNode() is used.
    6565    var xhr = new XMLHttpRequest();
    66     xhr.open("GET","data:text/html,<html xmlns='http://www.w3.org/1999/xhtml'><body id='body'>Hello</body></html>", false);
     66    xhr.open("GET","data:application/xhtml+xml,<html xmlns='http://www.w3.org/1999/xhtml'><body id='body'>Hello</body></html>", false);
    6767    xhr.send(null);
    6868    var doc = xhr.responseXML;
  • trunk/Source/WebCore/ChangeLog

    r103104 r103106  
     12011-12-16  Jarred Nicholls  <jarred@sencha.com>
     2
     3        Support HTML documents in XHR.responseXML
     4        https://bugs.webkit.org/show_bug.cgi?id=74626
     5
     6        Latest W3C XHR spec details for the responseXML attribute:
     7        http://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#the-responsexml-attribute
     8        http://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#document-response-entity-body
     9
     10        XHR.responseXML was not compliant per the latest editor's draft of the XHR spec.
     11        The following compliance issue have been corrected:
     12          - A responseType of "text" should disallow access to responseXML by throwing an InvalidState exception.
     13          - When the error flag is toggled, responseXML should return "null" immediately and not attempt to create a new Document.
     14          - responseXML should return a valid HTML document when the MIME type is "text/html", but only when the caller has
     15            explicitly set responseType to "document".
     16
     17        Reviewed by Alexey Proskuryakov.
     18
     19        Tests: fast/xmlhttprequest/xmlhttprequest-responseXML-html-document-responsetype-quirks.html
     20               fast/xmlhttprequest/xmlhttprequest-responseXML-html-document-responsetype-strict.html
     21               fast/xmlhttprequest/xmlhttprequest-responseXML-html-no-responsetype.html
     22               fast/xmlhttprequest/xmlhttprequest-responseXML-invalid-xml.html
     23               fast/xmlhttprequest/xmlhttprequest-responseXML-xml-document-responsetype.html
     24               fast/xmlhttprequest/xmlhttprequest-responseXML-xml-text-responsetype.html
     25
     26        * xml/XMLHttpRequest.cpp:
     27        (WebCore::XMLHttpRequest::responseXML):
     28        (WebCore::XMLHttpRequest::clearResponseBuffers):
     29        * xml/XMLHttpRequest.h: Rename m_responseXML to m_responseDocument
     30        (WebCore::XMLHttpRequest::optionalResponseXML):
     31
    1322011-12-16  Ryosuke Niwa  <rniwa@webkit.org>
    233
  • trunk/Source/WebCore/xml/XMLHttpRequest.cpp

    r102665 r103106  
    2828#include "DOMFormData.h"
    2929#include "DOMImplementation.h"
    30 #include "Document.h"
    3130#include "Event.h"
    3231#include "EventException.h"
     
    3534#include "ExceptionCode.h"
    3635#include "File.h"
     36#include "HTMLDocument.h"
    3737#include "HTTPParsers.h"
    3838#include "HTTPValidation.h"
     
    216216Document* XMLHttpRequest::responseXML(ExceptionCode& ec)
    217217{
    218     if (m_responseTypeCode != ResponseTypeDefault && m_responseTypeCode != ResponseTypeText && m_responseTypeCode != ResponseTypeDocument) {
     218    if (m_responseTypeCode != ResponseTypeDefault && m_responseTypeCode != ResponseTypeDocument) {
    219219        ec = INVALID_STATE_ERR;
    220220        return 0;
    221221    }
    222222
    223     if (m_state != DONE)
     223    if (m_error || m_state != DONE)
    224224        return 0;
    225225
    226226    if (!m_createdDocument) {
    227         if ((m_response.isHTTP() && !responseIsXML()) || scriptExecutionContext()->isWorkerContext()) {
    228             // The W3C spec requires this.
    229             m_responseXML = 0;
     227        bool isHTML = equalIgnoringCase(responseMIMEType(), "text/html");
     228
     229        // The W3C spec requires the final MIME type to be some valid XML type, or text/html.
     230        // If it is text/html, then the responseType of "document" must have been supplied explicitly.
     231        if ((m_response.isHTTP() && !responseIsXML() && !isHTML)
     232            || (isHTML && m_responseTypeCode == ResponseTypeDefault)
     233            || scriptExecutionContext()->isWorkerContext()) {
     234            m_responseDocument = 0;
    230235        } else {
    231             m_responseXML = Document::create(0, m_url);
     236            if (isHTML)
     237                m_responseDocument = HTMLDocument::create(0, m_url);
     238            else
     239                m_responseDocument = Document::create(0, m_url);
    232240            // FIXME: Set Last-Modified.
    233             m_responseXML->setContent(m_responseBuilder.toStringPreserveCapacity());
    234             m_responseXML->setSecurityOrigin(securityOrigin());
    235             if (!m_responseXML->wellFormed())
    236                 m_responseXML = 0;
     241            m_responseDocument->setContent(m_responseBuilder.toStringPreserveCapacity());
     242            m_responseDocument->setSecurityOrigin(securityOrigin());
     243            if (!m_responseDocument->wellFormed())
     244                m_responseDocument = 0;
    237245        }
    238246        m_createdDocument = true;
    239247    }
    240248
    241     return m_responseXML.get();
     249    return m_responseDocument.get();
    242250}
    243251
     
    741749    m_responseBuilder.clear();
    742750    m_createdDocument = false;
    743     m_responseXML = 0;
     751    m_responseDocument = 0;
    744752#if ENABLE(XHR_RESPONSE_BLOB)
    745753    m_responseBlob = 0;
  • trunk/Source/WebCore/xml/XMLHttpRequest.h

    r102665 r103106  
    105105    String responseText(ExceptionCode&);
    106106    Document* responseXML(ExceptionCode&);
    107     Document* optionalResponseXML() const { return m_responseXML.get(); }
     107    Document* optionalResponseXML() const { return m_responseDocument.get(); }
    108108#if ENABLE(XHR_RESPONSE_BLOB)
    109109    Blob* responseBlob(ExceptionCode&) const;
     
    207207    StringBuilder m_responseBuilder;
    208208    mutable bool m_createdDocument;
    209     mutable RefPtr<Document> m_responseXML;
     209    mutable RefPtr<Document> m_responseDocument;
    210210   
    211211    RefPtr<SharedBuffer> m_binaryResponseBuilder;
Note: See TracChangeset for help on using the changeset viewer.