summaryrefslogtreecommitdiffstats
path: root/WebKit
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2010-03-12 20:46:03 +0000
committerBen Murdoch <benm@google.com>2010-03-22 20:50:51 +0000
commita923424180b9d2cbe3a3951caed13039eef1edf6 (patch)
tree94c79707c7425deaee1f53e35512bd3760e6c8e9 /WebKit
parent343ec940062f940a47d74fc359b661de8be2f3b8 (diff)
downloadexternal_webkit-a923424180b9d2cbe3a3951caed13039eef1edf6.zip
external_webkit-a923424180b9d2cbe3a3951caed13039eef1edf6.tar.gz
external_webkit-a923424180b9d2cbe3a3951caed13039eef1edf6.tar.bz2
Add a new API on the resource loader to pause the current load. We use this when the plugin cannot accept any more data to prevent WebKit
buffering the data that the plugin can't take. This can result in a crash if the buffer gets too big (when watching an HD movie clip in flash, for example). Requires a frameworks/base change. Change-Id: Ibb63d38df1014ff70fa4d65275613cbf3a217c1a
Diffstat (limited to 'WebKit')
-rw-r--r--WebKit/android/jni/WebCoreResourceLoader.cpp18
-rw-r--r--WebKit/android/jni/WebCoreResourceLoader.h3
2 files changed, 21 insertions, 0 deletions
diff --git a/WebKit/android/jni/WebCoreResourceLoader.cpp b/WebKit/android/jni/WebCoreResourceLoader.cpp
index b17c9a7..cf32c09 100644
--- a/WebKit/android/jni/WebCoreResourceLoader.cpp
+++ b/WebKit/android/jni/WebCoreResourceLoader.cpp
@@ -56,6 +56,7 @@ static struct resourceloader_t {
jmethodID mCancelMethodID;
jmethodID mDownloadFileMethodID;
jmethodID mWillLoadFromCacheMethodID;
+ jmethodID mPauseLoadMethodID;
} gResourceLoader;
// ----------------------------------------------------------------------------
@@ -72,6 +73,7 @@ PassRefPtr<WebCore::ResourceLoaderAndroid> WebCoreResourceLoader::create(JNIEnv
}
WebCoreResourceLoader::WebCoreResourceLoader(JNIEnv *env, jobject jLoadListener)
+ : mPausedLoad(false)
{
mJLoader = env->NewGlobalRef(jLoadListener);
}
@@ -98,6 +100,17 @@ void WebCoreResourceLoader::downloadFile()
checkException(env);
}
+void WebCoreResourceLoader::pauseLoad(bool pause)
+{
+ if (mPausedLoad == pause)
+ return;
+
+ mPausedLoad = pause;
+ JNIEnv* env = JSC::Bindings::getJNIEnv();
+ env->CallVoidMethod(mJLoader, gResourceLoader.mPauseLoadMethodID, pause);
+ checkException(env);
+}
+
/*
* This static method is called to check to see if a POST response is in
* the cache. This may be slow, but is only used during a navigation to
@@ -320,6 +333,11 @@ int register_resource_loader(JNIEnv* env)
LOG_FATAL_IF(gResourceLoader.mDownloadFileMethodID == NULL,
"Could not find method downloadFile on LoadListener");
+ gResourceLoader.mPauseLoadMethodID =
+ env->GetMethodID(resourceLoader, "pauseLoad", "(Z)V");
+ LOG_FATAL_IF(gResourceLoader.mPauseLoadMethodID == NULL,
+ "Could not find method pauseLoad on LoadListener");
+
gResourceLoader.mWillLoadFromCacheMethodID =
env->GetStaticMethodID(resourceLoader, "willLoadFromCache", "(Ljava/lang/String;J)Z");
LOG_FATAL_IF(gResourceLoader.mWillLoadFromCacheMethodID == NULL,
diff --git a/WebKit/android/jni/WebCoreResourceLoader.h b/WebKit/android/jni/WebCoreResourceLoader.h
index d24a43e..c60b3f5 100644
--- a/WebKit/android/jni/WebCoreResourceLoader.h
+++ b/WebKit/android/jni/WebCoreResourceLoader.h
@@ -49,6 +49,8 @@ public:
*/
virtual void downloadFile();
+ virtual void pauseLoad(bool);
+
/**
* Call to java to find out if this URL is in the cache
*/
@@ -68,6 +70,7 @@ protected:
WebCoreResourceLoader(JNIEnv *env, jobject jLoadListener);
private:
jobject mJLoader;
+ bool mPausedLoad;
};
} // end namespace android