Document* XMLHttpRequest::responseXML(ExceptionCode& ec) { if (m_responseTypeCode != ResponseTypeDefault && m_responseTypeCode != ResponseTypeDocument) { ec = INVALID_STATE_ERR; return nullptr; } if (!doneWithoutErrors()) return nullptr; if (!m_createdDocument) { bool isHTML = equalIgnoringCase(responseMIMEType(), "text/html"); // The W3C spec requires the final MIME type to be some valid XML type, or text/html. // If it is text/html, then the responseType of "document" must have been supplied explicitly. if ((m_response.isHTTP() && !responseIsXML() && !isHTML) || (isHTML && m_responseTypeCode == ResponseTypeDefault) || scriptExecutionContext()->isWorkerGlobalScope()) { m_responseDocument = 0; } else { if (isHTML) m_responseDocument = HTMLDocument::create(0, m_url); else m_responseDocument = Document::create(0, m_url); // FIXME: Set Last-Modified. m_responseDocument->setContent(m_responseBuilder.toStringPreserveCapacity()); m_responseDocument->setSecurityOrigin(securityOrigin()); if (!m_responseDocument->wellFormed()) m_responseDocument = 0; } m_createdDocument = true; } return m_responseDocument.get(); }
Document* XMLHttpRequest::responseXML(ExceptionCode& ec) { if (responseTypeCode() != ResponseTypeDefault && responseTypeCode() != ResponseTypeText && responseTypeCode() != ResponseTypeDocument) { ec = INVALID_STATE_ERR; return 0; } if (m_state != DONE) return 0; if (!m_createdDocument) { if ((m_response.isHTTP() && !responseIsXML()) || scriptExecutionContext()->isWorkerContext()) { // The W3C spec requires this. m_responseXML = 0; } else { m_responseXML = Document::create(0, m_url); // FIXME: Set Last-Modified. m_responseXML->setContent(m_responseBuilder.toStringPreserveCapacity()); m_responseXML->setSecurityOrigin(securityOrigin()); if (!m_responseXML->wellFormed()) m_responseXML = 0; } m_createdDocument = true; } return m_responseXML.get(); }
Document* XMLHttpRequest::responseXML() const { if (m_state != DONE) return 0; if (!m_createdDocument) { if (m_response.isHTTP() && !responseIsXML()) { // The W3C spec requires this. m_responseXML = 0; } else { m_responseXML = m_doc->implementation()->createDocument(0); m_responseXML->open(); m_responseXML->setURL(m_url); // FIXME: set Last-Modified and cookies (currently, those are only available for HTMLDocuments). m_responseXML->write(String(m_responseText)); m_responseXML->finishParsing(); m_responseXML->close(); if (!m_responseXML->wellFormed()) m_responseXML = 0; } m_createdDocument = true; } return m_responseXML.get(); }
Document* XMLHttpRequest::responseXML(ExceptionCode& ec) { #if ENABLE(XHR_RESPONSE_BLOB) if (m_asBlob) { ec = INVALID_STATE_ERR; return 0; } #else UNUSED_PARAM(ec); #endif if (m_state != DONE) return 0; if (!m_createdDocument) { if ((m_response.isHTTP() && !responseIsXML()) || scriptExecutionContext()->isWorkerContext()) { // The W3C spec requires this. m_responseXML = 0; } else { m_responseXML = Document::create(0, m_url); m_responseXML->open(); // FIXME: Set Last-Modified. m_responseXML->write(m_responseBuilder.toStringPreserveCapacity()); m_responseXML->finishParsing(); m_responseXML->close(); if (!m_responseXML->wellFormed()) m_responseXML = 0; } m_createdDocument = true; } return m_responseXML.get(); }
Document* XMLHttpRequest::responseXML() const { if (m_state != DONE) return 0; if (!m_createdDocument) { if ((m_response.isHTTP() && !responseIsXML()) || scriptExecutionContext()->isWorkerContext()) { // The W3C spec requires this. m_responseXML = 0; } else { m_responseXML = Document::create(0, m_url); m_responseXML->open(); // FIXME: Set Last-Modified. m_responseXML->write(String(m_responseText)); m_responseXML->finishParsing(); m_responseXML->close(); if (!m_responseXML->wellFormed()) m_responseXML = 0; } m_createdDocument = true; } return m_responseXML.get(); }
Document* XMLHttpRequest::getResponseXML() const { if (m_state != Completed) return 0; if (!m_createdDocument) { if (responseIsXML()) { m_responseXML = m_doc->implementation()->createDocument(); m_responseXML->open(); m_responseXML->write(m_response); m_responseXML->finishParsing(); m_responseXML->close(); } m_createdDocument = true; } return m_responseXML.get(); }
Document* XMLHttpRequest::getResponseXML() const { if (m_state != Loaded) return 0; if (!m_createdDocument) { if (responseIsXML()) { m_responseXML = m_doc->implementation()->createDocument(0); m_responseXML->open(); m_responseXML->setURL(m_url.url()); // FIXME: set Last-Modified and cookies (currently, those are only available for HTMLDocuments). m_responseXML->write(m_responseText); m_responseXML->finishParsing(); m_responseXML->close(); if (!m_responseXML->wellFormed()) m_responseXML = 0; } m_createdDocument = true; } return m_responseXML.get(); }
ExceptionOr<Document*> XMLHttpRequest::responseXML() { if (m_responseType != ResponseType::EmptyString && m_responseType != ResponseType::Document) return Exception { INVALID_STATE_ERR }; if (!doneWithoutErrors()) return nullptr; if (!m_createdDocument) { String mimeType = responseMIMEType(); bool isHTML = equalLettersIgnoringASCIICase(mimeType, "text/html"); // The W3C spec requires the final MIME type to be some valid XML type, or text/html. // If it is text/html, then the responseType of "document" must have been supplied explicitly. if ((m_response.isHTTP() && !responseIsXML() && !isHTML) || (isHTML && m_responseType == ResponseType::EmptyString) || scriptExecutionContext()->isWorkerGlobalScope()) { m_responseDocument = nullptr; } else { if (isHTML) m_responseDocument = HTMLDocument::create(0, m_url); else m_responseDocument = XMLDocument::create(0, m_url); // FIXME: Set Last-Modified. m_responseDocument->setContent(m_responseBuilder.toStringPreserveCapacity()); m_responseDocument->setContextDocument(downcast<Document>(*scriptExecutionContext())); m_responseDocument->setSecurityOriginPolicy(scriptExecutionContext()->securityOriginPolicy()); m_responseDocument->overrideMIMEType(mimeType); if (!m_responseDocument->wellFormed()) m_responseDocument = nullptr; } m_createdDocument = true; } return m_responseDocument.get(); }
Document* XMLHttpRequest::responseXML(ExceptionState& exceptionState) { if (m_responseTypeCode != ResponseTypeDefault && m_responseTypeCode != ResponseTypeDocument) { exceptionState.throwDOMException(InvalidStateError, "The value is only accessible if the object's 'responseType' is '' or 'document' (was '" + responseType() + "')."); return 0; } if (m_error || m_state != DONE) return 0; if (!m_createdDocument) { bool isHTML = equalIgnoringCase(responseMIMEType(), "text/html"); // The W3C spec requires the final MIME type to be some valid XML type, or text/html. // If it is text/html, then the responseType of "document" must have been supplied explicitly. if ((m_response.isHTTP() && !responseIsXML() && !isHTML) || (isHTML && m_responseTypeCode == ResponseTypeDefault) || executionContext()->isWorkerGlobalScope()) { m_responseDocument = 0; } else { DocumentInit init = DocumentInit::fromContext(document()->contextDocument(), m_url); if (isHTML) m_responseDocument = HTMLDocument::create(init); else m_responseDocument = Document::create(init); // FIXME: Set Last-Modified. m_responseDocument->setContent(m_responseText.flattenToString()); m_responseDocument->setSecurityOrigin(securityOrigin()); m_responseDocument->setContextFeatures(document()->contextFeatures()); if (!m_responseDocument->wellFormed()) m_responseDocument = 0; } m_createdDocument = true; } return m_responseDocument.get(); }