diff options
author | Patrick Scott <phanna@android.com> | 2010-10-05 07:05:31 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-10-05 07:05:31 -0700 |
commit | 24c6a233780d45269caa0095213e59a3ded360b6 (patch) | |
tree | 382386fc75a5071b948b924030ca1a0212672cbb | |
parent | 1d88f7c1752437240899bb62df4e508b91f396f6 (diff) | |
parent | f69429a9e93ec4396c01fe27171bcefd4d238342 (diff) | |
download | external_webkit-24c6a233780d45269caa0095213e59a3ded360b6.zip external_webkit-24c6a233780d45269caa0095213e59a3ded360b6.tar.gz external_webkit-24c6a233780d45269caa0095213e59a3ded360b6.tar.bz2 |
Merge "Block network loads based on the setting."
-rw-r--r-- | WebKit/android/WebCoreSupport/WebUrlLoader.cpp | 10 | ||||
-rw-r--r-- | WebKit/android/jni/WebCoreFrameBridge.cpp | 1 | ||||
-rw-r--r-- | WebKit/android/jni/WebCoreFrameBridge.h | 6 | ||||
-rw-r--r-- | WebKit/android/jni/WebSettings.cpp | 6 |
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); |