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

Commit 64a2f6bd authored by Kristian Monsen's avatar Kristian Monsen
Browse files

Send proxy changes on the webcore thread to WebKit

Change-Id: I16995b4595e931715b064702ae570c387cf453f3
parent c4d251bb
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);
}
+39 −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,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.
+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;