summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorKristian Monsen <kristianm@google.com>2010-12-17 11:46:26 +0000
committerKristian Monsen <kristianm@google.com>2010-12-20 17:46:20 +0000
commit64a2f6bd06d4df1a34b4187ff750ec559a4d0597 (patch)
tree5eb897cd75d0f8c1bdea614a3fcd92a7e94f37c0 /core
parentc4d251bbe19828d6f134ac378fc9124332eb6eae (diff)
downloadframeworks_base-64a2f6bd06d4df1a34b4187ff750ec559a4d0597.zip
frameworks_base-64a2f6bd06d4df1a34b4187ff750ec559a4d0597.tar.gz
frameworks_base-64a2f6bd06d4df1a34b4187ff750ec559a4d0597.tar.bz2
Send proxy changes on the webcore thread to WebKit
Change-Id: I16995b4595e931715b064702ae570c387cf453f3
Diffstat (limited to 'core')
-rw-r--r--core/java/android/webkit/JWebCoreJavaBridge.java1
-rw-r--r--core/java/android/webkit/WebView.java39
-rw-r--r--core/java/android/webkit/WebViewCore.java10
3 files changed, 50 insertions, 0 deletions
diff --git a/core/java/android/webkit/JWebCoreJavaBridge.java b/core/java/android/webkit/JWebCoreJavaBridge.java
index 908526f..976e786 100644
--- a/core/java/android/webkit/JWebCoreJavaBridge.java
+++ b/core/java/android/webkit/JWebCoreJavaBridge.java
@@ -307,4 +307,5 @@ final class JWebCoreJavaBridge extends Handler {
public native void addPackageNames(Set<String> packageNames);
public native void addPackageName(String packageName);
public native void removePackageName(String packageName);
+ public native void updateProxy(String newProxy);
}
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 885bada..9718443 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -48,6 +48,8 @@ import android.graphics.RectF;
import android.graphics.Region;
import android.graphics.Shader;
import android.graphics.drawable.Drawable;
+import android.net.Proxy;
+import android.net.ProxyProperties;
import android.net.Uri;
import android.net.http.SslCertificate;
import android.os.AsyncTask;
@@ -981,6 +983,7 @@ public class WebView extends AbsoluteLayout
*/
init();
setupPackageListener(context);
+ setupProxyListener(context);
updateMultiTouchSupport(context);
if (privateBrowsing) {
@@ -990,6 +993,42 @@ public class WebView extends AbsoluteLayout
mAutoFillData = new WebViewCore.AutoFillData();
}
+ private static class ProxyReceiver extends BroadcastReceiver {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (intent.getAction().equals(Proxy.PROXY_CHANGE_ACTION)) {
+ handleProxyBroadcast(intent);
+ }
+ }
+ }
+
+ private static void setupProxyListener(Context context) {
+ IntentFilter filter = new IntentFilter();
+ filter.addAction(Proxy.PROXY_CHANGE_ACTION);
+ Intent currentProxy = context.registerReceiver(new ProxyReceiver(), filter);
+ if (currentProxy != null) {
+ handleProxyBroadcast(currentProxy);
+ }
+ }
+
+ private static void handleProxyBroadcast(Intent intent) {
+ ProxyProperties proxyProperties = (ProxyProperties)intent.getExtra(Proxy.EXTRA_PROXY_INFO);
+ if (proxyProperties == null) {
+ WebViewCore.sendStaticMessage(EventHub.PROXY_CHANGED, "");
+ return;
+ }
+
+ String host = proxyProperties.getHost();
+ int port = proxyProperties.getPort();
+ host += ": " + port;
+
+ // TODO: Handle exclusion list
+ // The plan is to make an AndroidProxyResolver, and handle the blacklist
+ // there
+ String exclusionList = proxyProperties.getExclusionList();
+ WebViewCore.sendStaticMessage(EventHub.PROXY_CHANGED, host);
+ }
+
/*
* A variable to track if there is a receiver added for ACTION_PACKAGE_ADDED
* or ACTION_PACKAGE_REMOVED.
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index f45fad9..45927f9 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -684,6 +684,14 @@ final class WebViewCore {
}
BrowserFrame.sJavaBridge.removePackageName((String) msg.obj);
break;
+
+ case EventHub.PROXY_CHANGED:
+ if (BrowserFrame.sJavaBridge == null) {
+ throw new IllegalStateException(
+ "No WebView has been created in this process!");
+ }
+ BrowserFrame.sJavaBridge.updateProxy((String) msg.obj);
+ break;
}
}
};
@@ -983,6 +991,8 @@ final class WebViewCore {
static final int AUTOFILL_FORM = 192;
+ static final int PROXY_CHANGED = 193;
+
// private message ids
private static final int DESTROY = 200;