• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "android_webview/native/aw_web_resource_response_impl.h"
6 
7 #include "android_webview/native/input_stream_impl.h"
8 #include "base/android/jni_android.h"
9 #include "base/android/jni_array.h"
10 #include "base/android/jni_string.h"
11 #include "jni/AwWebResourceResponse_jni.h"
12 #include "net/http/http_response_headers.h"
13 #include "net/url_request/url_request.h"
14 #include "net/url_request/url_request_job.h"
15 
16 using base::android::ScopedJavaLocalRef;
17 using base::android::AppendJavaStringArrayToStringVector;
18 
19 namespace android_webview {
20 
AwWebResourceResponseImpl(const base::android::JavaRef<jobject> & obj)21 AwWebResourceResponseImpl::AwWebResourceResponseImpl(
22     const base::android::JavaRef<jobject>& obj)
23   : java_object_(obj) {
24 }
25 
~AwWebResourceResponseImpl()26 AwWebResourceResponseImpl::~AwWebResourceResponseImpl() {
27 }
28 
29 scoped_ptr<InputStream>
GetInputStream(JNIEnv * env) const30 AwWebResourceResponseImpl::GetInputStream(JNIEnv* env) const {
31   ScopedJavaLocalRef<jobject> jstream =
32       Java_AwWebResourceResponse_getData(env, java_object_.obj());
33   if (jstream.is_null())
34     return scoped_ptr<InputStream>();
35   return make_scoped_ptr<InputStream>(new InputStreamImpl(jstream));
36 }
37 
GetMimeType(JNIEnv * env,std::string * mime_type) const38 bool AwWebResourceResponseImpl::GetMimeType(JNIEnv* env,
39                                              std::string* mime_type) const {
40   ScopedJavaLocalRef<jstring> jstring_mime_type =
41       Java_AwWebResourceResponse_getMimeType(env, java_object_.obj());
42   if (jstring_mime_type.is_null())
43     return false;
44   *mime_type = ConvertJavaStringToUTF8(jstring_mime_type);
45   return true;
46 }
47 
GetCharset(JNIEnv * env,std::string * charset) const48 bool AwWebResourceResponseImpl::GetCharset(
49     JNIEnv* env, std::string* charset) const {
50   ScopedJavaLocalRef<jstring> jstring_charset =
51       Java_AwWebResourceResponse_getCharset(env, java_object_.obj());
52   if (jstring_charset.is_null())
53     return false;
54   *charset = ConvertJavaStringToUTF8(jstring_charset);
55   return true;
56 }
57 
GetStatusInfo(JNIEnv * env,int * status_code,std::string * reason_phrase) const58 bool AwWebResourceResponseImpl::GetStatusInfo(
59     JNIEnv* env,
60     int* status_code,
61     std::string* reason_phrase) const {
62   int status =
63       Java_AwWebResourceResponse_getStatusCode(env, java_object_.obj());
64   ScopedJavaLocalRef<jstring> jstring_reason_phrase =
65       Java_AwWebResourceResponse_getReasonPhrase(env, java_object_.obj());
66   if (status < 100 || status >= 600 || jstring_reason_phrase.is_null())
67     return false;
68   *status_code = status;
69   *reason_phrase = ConvertJavaStringToUTF8(jstring_reason_phrase);
70   return true;
71 }
72 
GetResponseHeaders(JNIEnv * env,net::HttpResponseHeaders * headers) const73 bool AwWebResourceResponseImpl::GetResponseHeaders(
74     JNIEnv* env,
75     net::HttpResponseHeaders* headers) const {
76   ScopedJavaLocalRef<jobjectArray> jstringArray_headerNames =
77       Java_AwWebResourceResponse_getResponseHeaderNames(env,
78                                                          java_object_.obj());
79   ScopedJavaLocalRef<jobjectArray> jstringArray_headerValues =
80       Java_AwWebResourceResponse_getResponseHeaderValues(env,
81                                                           java_object_.obj());
82   if (jstringArray_headerNames.is_null() || jstringArray_headerValues.is_null())
83     return false;
84   std::vector<std::string> header_names;
85   std::vector<std::string> header_values;
86   AppendJavaStringArrayToStringVector(
87       env, jstringArray_headerNames.obj(), &header_names);
88   AppendJavaStringArrayToStringVector(
89       env, jstringArray_headerValues.obj(), &header_values);
90   DCHECK(header_names.size() == header_values.size());
91   for(size_t i = 0; i < header_names.size(); ++i) {
92     std::string header_line(header_names[i]);
93     header_line.append(": ");
94     header_line.append(header_values[i]);
95     headers->AddHeader(header_line);
96   }
97   return true;
98 }
99 
RegisterAwWebResourceResponse(JNIEnv * env)100 bool RegisterAwWebResourceResponse(JNIEnv* env) {
101   return RegisterNativesImpl(env);
102 }
103 
104 } // namespace android_webview
105