summaryrefslogtreecommitdiffstats
path: root/WebKit/android
diff options
context:
space:
mode:
authorPatrick Scott <phanna@android.com>2010-10-05 09:32:44 -0400
committerPatrick Scott <phanna@android.com>2010-10-05 09:58:07 -0400
commitf69429a9e93ec4396c01fe27171bcefd4d238342 (patch)
tree9cbdd152eb1086cf7e5c0e9ccb554dc57cb7016d /WebKit/android
parentbd2883826a01ef33a513566c75923d6ddec710ad (diff)
downloadexternal_webkit-f69429a9e93ec4396c01fe27171bcefd4d238342.zip
external_webkit-f69429a9e93ec4396c01fe27171bcefd4d238342.tar.gz
external_webkit-f69429a9e93ec4396c01fe27171bcefd4d238342.tar.bz2
Block network loads based on the setting.
Bug: 3053149 Change-Id: Idb6850b2aac5de2ab19850779a65496ef356961d
Diffstat (limited to 'WebKit/android')
-rw-r--r--WebKit/android/WebCoreSupport/WebUrlLoader.cpp10
-rw-r--r--WebKit/android/jni/WebCoreFrameBridge.cpp1
-rw-r--r--WebKit/android/jni/WebCoreFrameBridge.h6
-rw-r--r--WebKit/android/jni/WebSettings.cpp6
4 files changed, 21 insertions, 2 deletions
diff --git a/WebKit/android/WebCoreSupport/WebUrlLoader.cpp b/WebKit/android/WebCoreSupport/WebUrlLoader.cpp
index cda02dd..391f988 100644
--- a/WebKit/android/WebCoreSupport/WebUrlLoader.cpp
+++ b/WebKit/android/WebCoreSupport/WebUrlLoader.cpp
@@ -28,6 +28,7 @@
#include "WebUrlLoader.h"
#include "FrameLoaderClientAndroid.h"
+#include "WebCoreFrameBridge.h"
#include "WebUrlLoaderClient.h"
namespace android {
@@ -46,8 +47,13 @@ WebUrlLoader::~WebUrlLoader()
PassRefPtr<WebUrlLoader> WebUrlLoader::start(FrameLoaderClient* client, WebCore::ResourceHandle* resourceHandle,
const WebCore::ResourceRequest& resourceRequest, bool isSync, bool isPrivateBrowsing)
{
- FrameLoaderClientAndroid* clientAndroid = static_cast<FrameLoaderClientAndroid*> (client);
- RefPtr<WebUrlLoader> loader = WebUrlLoader::create(clientAndroid->webFrame(), resourceHandle, resourceRequest);
+ WebFrame* webFrame = static_cast<FrameLoaderClientAndroid*>(client)->webFrame();
+
+ if (webFrame->blockNetworkLoads() &&
+ (resourceRequest.url().protocolIs("http") ||
+ resourceRequest.url().protocolIs("https")))
+ return NULL;
+ RefPtr<WebUrlLoader> loader = WebUrlLoader::create(webFrame, resourceHandle, resourceRequest);
loader->m_loaderClient->start(isSync, isPrivateBrowsing);
return loader.release();
diff --git a/WebKit/android/jni/WebCoreFrameBridge.cpp b/WebKit/android/jni/WebCoreFrameBridge.cpp
index 8a55e15..d89f965 100644
--- a/WebKit/android/jni/WebCoreFrameBridge.cpp
+++ b/WebKit/android/jni/WebCoreFrameBridge.cpp
@@ -298,6 +298,7 @@ WebFrame::WebFrame(JNIEnv* env, jobject obj, jobject historyList, WebCore::Page*
mUserAgent = WTF::String();
mUserInitiatedAction = false;
+ mBlockNetworkLoads = false;
}
WebFrame::~WebFrame()
diff --git a/WebKit/android/jni/WebCoreFrameBridge.h b/WebKit/android/jni/WebCoreFrameBridge.h
index bcbbb47..cbf55c4 100644
--- a/WebKit/android/jni/WebCoreFrameBridge.h
+++ b/WebKit/android/jni/WebCoreFrameBridge.h
@@ -127,11 +127,17 @@ class WebFrame : public WebCoreRefObject {
WebCore::Page* page() const { return mPage; }
+ // Currently used only by the chrome net stack. A similar field is used by
+ // FrameLoader.java to block java network loads.
+ void setBlockNetworkLoads(bool block) { mBlockNetworkLoads = block; }
+ bool blockNetworkLoads() const { return mBlockNetworkLoads; }
+
private:
struct JavaBrowserFrame;
JavaBrowserFrame* mJavaFrame;
WebCore::Page* mPage;
WTF::String mUserAgent;
+ bool mBlockNetworkLoads;
bool mUserInitiatedAction;
};
diff --git a/WebKit/android/jni/WebSettings.cpp b/WebKit/android/jni/WebSettings.cpp
index 6587b78..79c4017 100644
--- a/WebKit/android/jni/WebSettings.cpp
+++ b/WebKit/android/jni/WebSettings.cpp
@@ -87,6 +87,7 @@ struct FieldIds {
#ifdef ANDROID_BLOCK_NETWORK_IMAGE
mBlockNetworkImage = env->GetFieldID(clazz, "mBlockNetworkImage", "Z");
#endif
+ mBlockNetworkLoads = env->GetFieldID(clazz, "mBlockNetworkLoads", "Z");
mJavaScriptEnabled = env->GetFieldID(clazz, "mJavaScriptEnabled", "Z");
mPluginState = env->GetFieldID(clazz, "mPluginState",
"Landroid/webkit/WebSettings$PluginState;");
@@ -146,6 +147,7 @@ struct FieldIds {
#ifdef ANDROID_BLOCK_NETWORK_IMAGE
LOG_ASSERT(mBlockNetworkImage, "Could not find field mBlockNetworkImage");
#endif
+ LOG_ASSERT(mBlockNetworkLoads, "Could not find field mBlockNetworkLoads");
LOG_ASSERT(mJavaScriptEnabled, "Could not find field mJavaScriptEnabled");
LOG_ASSERT(mPluginState, "Could not find field mPluginState");
#if ENABLE(OFFLINE_WEB_APPLICATIONS)
@@ -194,6 +196,7 @@ struct FieldIds {
#ifdef ANDROID_BLOCK_NETWORK_IMAGE
jfieldID mBlockNetworkImage;
#endif
+ jfieldID mBlockNetworkLoads;
jfieldID mJavaScriptEnabled;
jfieldID mPluginState;
#if ENABLE(OFFLINE_WEB_APPLICATIONS)
@@ -337,6 +340,9 @@ public:
if(!flag)
cachedResourceLoader->setBlockNetworkImage(false);
#endif
+ flag = env->GetBooleanField(obj, gFieldIds->mBlockNetworkLoads);
+ WebFrame* webFrame = WebFrame::getWebFrame(pFrame);
+ webFrame->setBlockNetworkLoads(flag);
flag = env->GetBooleanField(obj, gFieldIds->mJavaScriptEnabled);
s->setJavaScriptEnabled(flag);