Retrying sending proxy changes to webkit

Now checking if the ProxyProperties object is null, and if the
string returned by getHost() is null.

Change-Id: I727e26c2a41fe057501c3b610ba6fa221d16da45
This commit is contained in:
Kristian Monsen
2010-12-21 12:51:11 +00:00
parent 16331c8a1d
commit 41e7e6f933
3 changed files with 51 additions and 0 deletions

View File

@@ -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);
}

View File

@@ -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,43 @@ 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 || proxyProperties.getHost() == null) {
WebViewCore.sendStaticMessage(EventHub.PROXY_CHANGED, "");
return;
}
String host = proxyProperties.getHost();
int port = proxyProperties.getPort();
if (port != 0)
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.

View File

@@ -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;