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 2183589bf35fa6bf76977516ab26c61c6bb4dbb9..404de74cb8d725eff5cd1dedde40213a11f510af 100644 |
--- a/components/cronet/android/org_chromium_net_UrlRequest.cc |
+++ b/components/cronet/android/org_chromium_net_UrlRequest.cc |
@@ -14,6 +14,7 @@ |
#include "net/base/request_priority.h" |
using base::android::ConvertUTF8ToJavaString; |
+using base::android::CheckException; |
namespace cronet { |
namespace { |
@@ -317,4 +318,39 @@ static jstring GetHeader( |
} |
} |
+static jobjectArray GetAllHeaders(JNIEnv* env, |
+ jobject object, |
+ jlong urlRequestPeer) { |
+ URLRequestPeer* request = reinterpret_cast<URLRequestPeer*>(urlRequestPeer); |
+ net::HttpRequestHeaders headers; |
+ if (request == NULL || !request->GetFullRequestHeaders(&headers)) { |
+ return NULL; |
+ } |
+ |
+ // TODO(miloslav): Better to just expose the size instead. |
+ net::HttpRequestHeaders::Iterator counter(headers); |
+ int count = 0; |
+ while (counter.GetNext()) { |
+ ++count; |
+ } |
+ |
+ jclass string_class = env->FindClass("java/lang/String"); |
+ jobjectArray result = env->NewObjectArray(2 * count, string_class, NULL); |
+ CheckException(env); |
+ |
+ net::HttpRequestHeaders::Iterator iterator(headers); |
+ int index = 0; |
+ while (iterator.GetNext()) { |
+ DCHECK(index <= 2 * count - 2); |
+ ScopedJavaLocalRef<jstring> name = |
+ ConvertUTF8ToJavaString(env, iterator.name()); |
+ env->SetObjectArrayElement(result, index++, name.obj()); |
+ |
+ ScopedJavaLocalRef<jstring> value = |
+ ConvertUTF8ToJavaString(env, iterator.value()); |
+ env->SetObjectArrayElement(result, index++, value.obj()); |
+ } |
+ DCHECK(index == 2 * count); |
+ return result; |
+} |
} // namespace cronet |