diff options
author | Patrick Scott <phanna@android.com> | 2010-11-11 13:14:26 -0500 |
---|---|---|
committer | Patrick Scott <phanna@android.com> | 2010-11-15 09:19:00 -0500 |
commit | ff1576a1bd6302d6c9988912d17e47f325242574 (patch) | |
tree | 8c80acadf120ea70ddd76dc52214b536e15e6435 /WebKit/android/jni/WebCoreFrameBridge.cpp | |
parent | 649040c55ad0f299f58ae83062b40b29f3825fb4 (diff) | |
download | external_webkit-ff1576a1bd6302d6c9988912d17e47f325242574.zip external_webkit-ff1576a1bd6302d6c9988912d17e47f325242574.tar.gz external_webkit-ff1576a1bd6302d6c9988912d17e47f325242574.tar.bz2 |
Allow applications to intercept requests.
The api returns a response containing the mime type, encoding, and an optional
InputStream for reading data. Move the asset and content url logic into the
new api to consolidate some code.
Requires a change in frameworks/base.
Bug: 2905943
Change-Id: Ic7af410308872042c412aedf62e589f6d2095782
Diffstat (limited to 'WebKit/android/jni/WebCoreFrameBridge.cpp')
-rw-r--r-- | WebKit/android/jni/WebCoreFrameBridge.cpp | 38 |
1 files changed, 23 insertions, 15 deletions
diff --git a/WebKit/android/jni/WebCoreFrameBridge.cpp b/WebKit/android/jni/WebCoreFrameBridge.cpp index 85314cc..e4f942d 100644 --- a/WebKit/android/jni/WebCoreFrameBridge.cpp +++ b/WebKit/android/jni/WebCoreFrameBridge.cpp @@ -77,6 +77,7 @@ #include "SelectionController.h" #include "Settings.h" #include "SubstituteData.h" +#include "UrlInterceptResponse.h" #include "UserGestureIndicator.h" #include "WebCache.h" #include "WebCoreJni.h" @@ -191,8 +192,8 @@ struct WebFrame::JavaBrowserFrame { jweak mObj; jweak mHistoryList; // WebBackForwardList object - jmethodID mInputStreamForAndroidResource; jmethodID mStartLoadingResource; + jmethodID mShouldInterceptRequest; jmethodID mLoadStarted; jmethodID mTransitionToCommitted; jmethodID mLoadFinished; @@ -235,9 +236,11 @@ WebFrame::WebFrame(JNIEnv* env, jobject obj, jobject historyList, WebCore::Page* mJavaFrame = new JavaBrowserFrame; mJavaFrame->mObj = env->NewWeakGlobalRef(obj); mJavaFrame->mHistoryList = env->NewWeakGlobalRef(historyList); - mJavaFrame->mInputStreamForAndroidResource = env->GetMethodID(clazz, "inputStreamForAndroidResource", "(Ljava/lang/String;)Ljava/io/InputStream;"); mJavaFrame->mStartLoadingResource = env->GetMethodID(clazz, "startLoadingResource", "(ILjava/lang/String;Ljava/lang/String;Ljava/util/HashMap;[BJIZZZLjava/lang/String;Ljava/lang/String;)Landroid/webkit/LoadListener;"); + mJavaFrame->mShouldInterceptRequest = + env->GetMethodID(clazz, "shouldInterceptRequest", + "(Ljava/lang/String;)Landroid/webkit/WebResourceResponse;"); mJavaFrame->mLoadStarted = env->GetMethodID(clazz, "loadStarted", "(Ljava/lang/String;Landroid/graphics/Bitmap;IZ)V"); mJavaFrame->mTransitionToCommitted = env->GetMethodID(clazz, "transitionToCommitted", @@ -279,8 +282,8 @@ WebFrame::WebFrame(JNIEnv* env, jobject obj, jobject historyList, WebCore::Page* "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;J)V"); env->DeleteLocalRef(clazz); - LOG_ASSERT(mJavaFrame->mInputStreamForAndroidResource, "Could not find method inputStreamForAndroidResource"); LOG_ASSERT(mJavaFrame->mStartLoadingResource, "Could not find method startLoadingResource"); + LOG_ASSERT(mJavaFrame->mShouldInterceptRequest, "Could not find method shouldInterceptRequest"); LOG_ASSERT(mJavaFrame->mLoadStarted, "Could not find method loadStarted"); LOG_ASSERT(mJavaFrame->mTransitionToCommitted, "Could not find method transitionToCommitted"); LOG_ASSERT(mJavaFrame->mLoadFinished, "Could not find method loadFinished"); @@ -383,18 +386,6 @@ private: int m_size; }; -int WebFrame::inputStreamForAndroidResource(const char* url) -{ - JNIEnv* env = getJNIEnv(); - AutoJObject obj = mJavaFrame->frame(env); - jstring jUrlStr = env->NewStringUTF(url); - - jobject jInputStream = env->CallObjectMethod(obj.get(), mJavaFrame->mInputStreamForAndroidResource, jUrlStr); - env->DeleteLocalRef(jUrlStr); - - return (int)jInputStream; -} - PassRefPtr<WebCore::ResourceLoaderAndroid> WebFrame::startLoadingResource(WebCore::ResourceHandle* loader, const WebCore::ResourceRequest& request, @@ -541,6 +532,23 @@ WebFrame::startLoadingResource(WebCore::ResourceHandle* loader, return h; } +UrlInterceptResponse* +WebFrame::shouldInterceptRequest(const WTF::String& url) +{ +#ifdef ANDROID_INSTRUMENT + TimeCounterAuto counter(TimeCounter::JavaCallbackTimeCounter); +#endif + LOGV("::WebCore:: shouldInterceptRequest(%s)", url.latin1().data()); + + JNIEnv* env = getJNIEnv(); + jstring urlStr = WtfStringToJstring(env, url); + jobject response = env->CallObjectMethod(mJavaFrame->frame(env).get(), mJavaFrame->mShouldInterceptRequest, urlStr); + env->DeleteLocalRef(urlStr); + if (response == 0) + return 0; + return new UrlInterceptResponse(env, response); +} + void WebFrame::reportError(int errorCode, const WTF::String& description, const WTF::String& failingUrl) |