| Index: Source/core/xml/XMLHttpRequest.cpp
|
| diff --git a/Source/core/xml/XMLHttpRequest.cpp b/Source/core/xml/XMLHttpRequest.cpp
|
| index d16f22ba0461b37a4d880bd87985db36784dcfee..8db28e20c5049c2b8785d183d522e5d98c391704 100644
|
| --- a/Source/core/xml/XMLHttpRequest.cpp
|
| +++ b/Source/core/xml/XMLHttpRequest.cpp
|
| @@ -223,6 +223,17 @@ ScriptString XMLHttpRequest::responseText(ExceptionState& es)
|
| return m_responseText;
|
| }
|
|
|
| +ScriptString XMLHttpRequest::responseJsonSource(ExceptionState& es)
|
| +{
|
| + if (m_responseTypeCode != ResponseTypeJson) {
|
| + es.throwDOMException(InvalidStateError);
|
| + return ScriptString();
|
| + }
|
| + if (m_error || m_state != DONE)
|
| + return ScriptString();
|
| + return m_responseText;
|
| +}
|
| +
|
| Document* XMLHttpRequest::responseXML(ExceptionState& es)
|
| {
|
| if (m_responseTypeCode != ResponseTypeDefault && m_responseTypeCode != ResponseTypeDocument) {
|
| @@ -346,6 +357,8 @@ void XMLHttpRequest::setResponseType(const String& responseType, ExceptionState&
|
| m_responseTypeCode = ResponseTypeDefault;
|
| else if (responseType == "text")
|
| m_responseTypeCode = ResponseTypeText;
|
| + else if (responseType == "json")
|
| + m_responseTypeCode = ResponseTypeJson;
|
| else if (responseType == "document")
|
| m_responseTypeCode = ResponseTypeDocument;
|
| else if (responseType == "blob")
|
| @@ -363,6 +376,8 @@ String XMLHttpRequest::responseType()
|
| return "";
|
| case ResponseTypeText:
|
| return "text";
|
| + case ResponseTypeJson:
|
| + return "json";
|
| case ResponseTypeDocument:
|
| return "document";
|
| case ResponseTypeBlob:
|
| @@ -1134,10 +1149,12 @@ void XMLHttpRequest::didReceiveData(const char* data, int len)
|
| if (m_state < HEADERS_RECEIVED)
|
| changeState(HEADERS_RECEIVED);
|
|
|
| - bool useDecoder = m_responseTypeCode == ResponseTypeDefault || m_responseTypeCode == ResponseTypeText || m_responseTypeCode == ResponseTypeDocument;
|
| + bool useDecoder = m_responseTypeCode == ResponseTypeDefault || m_responseTypeCode == ResponseTypeText || m_responseTypeCode == ResponseTypeJson || m_responseTypeCode == ResponseTypeDocument;
|
|
|
| if (useDecoder && !m_decoder) {
|
| - if (!m_responseEncoding.isEmpty())
|
| + if (m_responseTypeCode == ResponseTypeJson)
|
| + m_decoder = TextResourceDecoder::create("application/json", "UTF-8");
|
| + else if (!m_responseEncoding.isEmpty())
|
| m_decoder = TextResourceDecoder::create("text/plain", m_responseEncoding);
|
| // allow TextResourceDecoder to look inside the m_response if it's XML or HTML
|
| else if (responseIsXML()) {
|
|
|