- add sources.
[platform/framework/web/crosswalk.git] / src / android_webview / native / intercepted_request_data_impl.cc
1 // Copyright (c) 2012 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/intercepted_request_data_impl.h"
6
7 #include "android_webview/browser/net/android_stream_reader_url_request_job.h"
8 #include "android_webview/native/input_stream_impl.h"
9 #include "base/android/jni_android.h"
10 #include "base/android/jni_string.h"
11 #include "jni/InterceptedRequestData_jni.h"
12 #include "net/url_request/url_request.h"
13 #include "net/url_request/url_request_job.h"
14
15 using base::android::ScopedJavaLocalRef;
16
17 namespace android_webview {
18
19 namespace {
20
21 class StreamReaderJobDelegateImpl :
22     public AndroidStreamReaderURLRequestJob::Delegate {
23  public:
24     StreamReaderJobDelegateImpl(
25         const InterceptedRequestDataImpl* intercepted_request_data)
26         : intercepted_request_data_impl_(intercepted_request_data) {
27       DCHECK(intercepted_request_data_impl_);
28     }
29
30     virtual scoped_ptr<InputStream> OpenInputStream(
31         JNIEnv* env,
32         const GURL& url) OVERRIDE {
33       return intercepted_request_data_impl_->GetInputStream(env).Pass();
34     }
35
36     virtual void OnInputStreamOpenFailed(net::URLRequest* request,
37                                          bool* restart) OVERRIDE {
38       *restart = false;
39     }
40
41     virtual bool GetMimeType(JNIEnv* env,
42                              net::URLRequest* request,
43                              android_webview::InputStream* stream,
44                              std::string* mime_type) OVERRIDE {
45       return intercepted_request_data_impl_->GetMimeType(env, mime_type);
46     }
47
48     virtual bool GetCharset(JNIEnv* env,
49                             net::URLRequest* request,
50                             android_webview::InputStream* stream,
51                             std::string* charset) OVERRIDE {
52       return intercepted_request_data_impl_->GetCharset(env, charset);
53     }
54
55  private:
56     const InterceptedRequestDataImpl* intercepted_request_data_impl_;
57 };
58
59 } // namespace
60
61 InterceptedRequestDataImpl::InterceptedRequestDataImpl(
62     const base::android::JavaRef<jobject>& obj)
63   : java_object_(obj) {
64 }
65
66 InterceptedRequestDataImpl::~InterceptedRequestDataImpl() {
67 }
68
69 scoped_ptr<InputStream>
70 InterceptedRequestDataImpl::GetInputStream(JNIEnv* env) const {
71   ScopedJavaLocalRef<jobject> jstream =
72       Java_InterceptedRequestData_getData(env, java_object_.obj());
73   if (jstream.is_null())
74     return scoped_ptr<InputStream>();
75   return make_scoped_ptr<InputStream>(new InputStreamImpl(jstream));
76 }
77
78 bool InterceptedRequestDataImpl::GetMimeType(JNIEnv* env,
79                                              std::string* mime_type) const {
80   ScopedJavaLocalRef<jstring> jstring_mime_type =
81       Java_InterceptedRequestData_getMimeType(env, java_object_.obj());
82   if (jstring_mime_type.is_null())
83     return false;
84   *mime_type = ConvertJavaStringToUTF8(jstring_mime_type);
85   return true;
86 }
87
88 bool InterceptedRequestDataImpl::GetCharset(
89     JNIEnv* env, std::string* charset) const {
90   ScopedJavaLocalRef<jstring> jstring_charset =
91       Java_InterceptedRequestData_getCharset(env, java_object_.obj());
92   if (jstring_charset.is_null())
93     return false;
94   *charset = ConvertJavaStringToUTF8(jstring_charset);
95   return true;
96 }
97
98 bool RegisterInterceptedRequestData(JNIEnv* env) {
99   return RegisterNativesImpl(env);
100 }
101
102 net::URLRequestJob* InterceptedRequestDataImpl::CreateJobFor(
103     net::URLRequest* request,
104     net::NetworkDelegate* network_delegate) const {
105   scoped_ptr<AndroidStreamReaderURLRequestJob::Delegate>
106       stream_reader_job_delegate_impl(new StreamReaderJobDelegateImpl(this));
107   return new AndroidStreamReaderURLRequestJob(
108       request, network_delegate, stream_reader_job_delegate_impl.Pass());
109 }
110
111 } // namespace android_webview