summaryrefslogtreecommitdiffstats
path: root/android_webview/native/intercepted_request_data_impl.cc
diff options
context:
space:
mode:
authormkosiba@chromium.org <mkosiba@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-16 16:28:51 +0000
committermkosiba@chromium.org <mkosiba@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-16 16:28:51 +0000
commit5b15e13c68d8ca8165698d50410557f44b012b31 (patch)
tree08ce7da669bd4a0eb41b3b0fa0ca2f9e0b9040b7 /android_webview/native/intercepted_request_data_impl.cc
parent81b9ab27d60b4645099c14e6a45eb66a59c5137e (diff)
downloadchromium_src-5b15e13c68d8ca8165698d50410557f44b012b31.zip
chromium_src-5b15e13c68d8ca8165698d50410557f44b012b31.tar.gz
chromium_src-5b15e13c68d8ca8165698d50410557f44b012b31.tar.bz2
Implement android_webview url intercepting.
This implements the WebViewClient shouldInterceptRequest and onLoadResource callbacks. BUG=138481 Android-only change - ran through android try. NOTRY=true Review URL: https://chromiumcodereview.appspot.com/11110013 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@162141 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'android_webview/native/intercepted_request_data_impl.cc')
-rw-r--r--android_webview/native/intercepted_request_data_impl.cc101
1 files changed, 101 insertions, 0 deletions
diff --git a/android_webview/native/intercepted_request_data_impl.cc b/android_webview/native/intercepted_request_data_impl.cc
new file mode 100644
index 0000000..e3d9096
--- /dev/null
+++ b/android_webview/native/intercepted_request_data_impl.cc
@@ -0,0 +1,101 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "android_webview/native/intercepted_request_data_impl.h"
+
+#include "android_webview/native/android_stream_reader_url_request_job.h"
+#include "base/android/jni_android.h"
+#include "base/android/jni_string.h"
+#include "jni/InterceptedRequestData_jni.h"
+#include "net/url_request/url_request.h"
+#include "net/url_request/url_request_job.h"
+
+using base::android::ScopedJavaLocalRef;
+
+namespace android_webview {
+
+namespace {
+
+class StreamReaderJobDelegateImpl :
+ public AndroidStreamReaderURLRequestJob::Delegate {
+ public:
+ StreamReaderJobDelegateImpl(
+ const InterceptedRequestDataImpl* intercepted_request_data)
+ : intercepted_request_data_impl_(intercepted_request_data) {
+ DCHECK(intercepted_request_data_impl_);
+ }
+
+ virtual base::android::ScopedJavaLocalRef<jobject> OpenInputStream(
+ JNIEnv* env,
+ net::URLRequest* request) OVERRIDE {
+ return intercepted_request_data_impl_->GetInputStream(env);
+ }
+
+ virtual bool GetMimeType(JNIEnv* env,
+ net::URLRequest* request,
+ jobject stream,
+ std::string* mime_type) OVERRIDE {
+ return intercepted_request_data_impl_->GetMimeType(env, mime_type);
+ }
+
+ virtual bool GetCharset(JNIEnv* env,
+ net::URLRequest* request,
+ jobject stream,
+ std::string* charset) OVERRIDE {
+ return intercepted_request_data_impl_->GetCharset(env, charset);
+ }
+
+ private:
+ const InterceptedRequestDataImpl* intercepted_request_data_impl_;
+};
+
+} // namespace
+
+InterceptedRequestDataImpl::InterceptedRequestDataImpl(
+ const base::android::JavaRef<jobject>& obj)
+ : java_object_(obj) {
+}
+
+InterceptedRequestDataImpl::~InterceptedRequestDataImpl() {
+}
+
+ScopedJavaLocalRef<jobject>
+InterceptedRequestDataImpl::GetInputStream(JNIEnv* env) const {
+ return Java_InterceptedRequestData_getData(env, java_object_.obj());
+}
+
+bool InterceptedRequestDataImpl::GetMimeType(JNIEnv* env,
+ std::string* mime_type) const {
+ ScopedJavaLocalRef<jstring> jstring_mime_type =
+ Java_InterceptedRequestData_getMimeType(env, java_object_.obj());
+ if (jstring_mime_type.is_null())
+ return false;
+ *mime_type = ConvertJavaStringToUTF8(jstring_mime_type);
+ return true;
+}
+
+bool InterceptedRequestDataImpl::GetCharset(
+ JNIEnv* env, std::string* charset) const {
+ ScopedJavaLocalRef<jstring> jstring_charset =
+ Java_InterceptedRequestData_getCharset(env, java_object_.obj());
+ if (jstring_charset.is_null())
+ return false;
+ *charset = ConvertJavaStringToUTF8(jstring_charset);
+ return true;
+}
+
+bool RegisterInterceptedRequestData(JNIEnv* env) {
+ return RegisterNativesImpl(env);
+}
+
+net::URLRequestJob* InterceptedRequestDataImpl::CreateJobFor(
+ net::URLRequest* request,
+ net::NetworkDelegate* network_delegate) const {
+ scoped_ptr<AndroidStreamReaderURLRequestJob::Delegate>
+ stream_reader_job_delegate_impl(new StreamReaderJobDelegateImpl(this));
+ return new AndroidStreamReaderURLRequestJob(
+ request, network_delegate, stream_reader_job_delegate_impl.Pass());
+}
+
+} // namespace android_webview