Index: components/cronet/android/org_chromium_net_UrlRequest.cc |
diff --git a/components/cronet/android/org_chromium_net_UrlRequest.cc b/components/cronet/android/org_chromium_net_UrlRequest.cc |
index f96f16422db26e8149403dbd33731ec82b97c459..8ec8b7abdac5f64bba367abcd9204a9b1753de37 100644 |
--- a/components/cronet/android/org_chromium_net_UrlRequest.cc |
+++ b/components/cronet/android/org_chromium_net_UrlRequest.cc |
@@ -12,6 +12,7 @@ |
#include "jni/UrlRequest_jni.h" |
#include "net/base/net_errors.h" |
#include "net/base/request_priority.h" |
+#include "net/http/http_response_headers.h" |
using base::android::ConvertUTF8ToJavaString; |
@@ -307,4 +308,36 @@ static jstring GetHeader( |
} |
} |
+static void GetAllHeaders(JNIEnv* env, |
+ jobject object, |
+ jlong urlRequestPeer, |
+ jobject headersMap) { |
+ URLRequestPeer* request = reinterpret_cast<URLRequestPeer*>(urlRequestPeer); |
+ if (request == NULL) |
+ return; |
+ |
+ net::HttpResponseHeaders* headers = request->GetResponseHeaders(); |
+ if (headers == NULL) |
+ return; |
+ |
+ void* iter = NULL; |
+ std::string header_name; |
+ std::string header_value; |
+ while (headers->EnumerateHeaderLines(&iter, &header_name, &header_value)) { |
+ ScopedJavaLocalRef<jstring> name = |
+ ConvertUTF8ToJavaString(env, header_name); |
+ ScopedJavaLocalRef<jstring> value = |
+ ConvertUTF8ToJavaString(env, header_value); |
+ Java_UrlRequest_onAppendResponseHeader( |
+ env, object, headersMap, name.Release(), value.Release()); |
+ } |
+ |
+ // Some implementations (notably HttpURLConnection) include a mapping for the |
+ // null key; in HTTP's case, this maps to the HTTP status line. |
mmenke
2014/08/05 17:34:05
Should this be documented in HttpUrlRequest?
mef
2014/08/05 17:55:09
Done.
|
+ ScopedJavaLocalRef<jstring> status_line = |
+ ConvertUTF8ToJavaString(env, headers->GetStatusLine()); |
+ Java_UrlRequest_onAppendResponseHeader( |
+ env, object, headersMap, NULL, status_line.Release()); |
+} |
+ |
} // namespace cronet |