diff options
author | mkosiba@chromium.org <mkosiba@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-16 16:28:51 +0000 |
---|---|---|
committer | mkosiba@chromium.org <mkosiba@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-16 16:28:51 +0000 |
commit | 5b15e13c68d8ca8165698d50410557f44b012b31 (patch) | |
tree | 08ce7da669bd4a0eb41b3b0fa0ca2f9e0b9040b7 /android_webview/native/intercepted_request_data_impl.cc | |
parent | 81b9ab27d60b4645099c14e6a45eb66a59c5137e (diff) | |
download | chromium_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.cc | 101 |
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 |