summaryrefslogtreecommitdiffstats
path: root/WebKit/android/jni/WebCoreFrameBridge.cpp
diff options
context:
space:
mode:
authorPatrick Scott <phanna@android.com>2010-11-11 13:14:26 -0500
committerPatrick Scott <phanna@android.com>2010-11-15 09:19:00 -0500
commitff1576a1bd6302d6c9988912d17e47f325242574 (patch)
tree8c80acadf120ea70ddd76dc52214b536e15e6435 /WebKit/android/jni/WebCoreFrameBridge.cpp
parent649040c55ad0f299f58ae83062b40b29f3825fb4 (diff)
downloadexternal_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.cpp38
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)