diff options
author | Kristian Monsen <kristianm@google.com> | 2010-12-17 11:46:26 +0000 |
---|---|---|
committer | Kristian Monsen <kristianm@google.com> | 2010-12-20 17:46:20 +0000 |
commit | 64a2f6bd06d4df1a34b4187ff750ec559a4d0597 (patch) | |
tree | 5eb897cd75d0f8c1bdea614a3fcd92a7e94f37c0 /core | |
parent | c4d251bbe19828d6f134ac378fc9124332eb6eae (diff) | |
download | frameworks_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.java | 1 | ||||
-rw-r--r-- | core/java/android/webkit/WebView.java | 39 | ||||
-rw-r--r-- | core/java/android/webkit/WebViewCore.java | 10 |
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; |