Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 41e7e6f9 authored by Kristian Monsen's avatar Kristian Monsen
Browse files

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
parent 16331c8a
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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);
}
+40 −0
Original line number Diff line number Diff line
@@ -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.
+10 −0
Original line number Diff line number Diff line
@@ -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;