Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1432)

Unified Diff: Source/core/xml/XMLHttpRequest.cpp

Issue 21600002: Add json responseType support to XMLHttpRequest (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: LayoutTests Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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()) {

Powered by Google App Engine
This is Rietveld 408576698