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

Commit ea8f4e0d authored by Kristian Monsen's avatar Kristian Monsen Committed by Android (Google) Code Review
Browse files

Merge "Send proxy changes on the webcore thread to WebKit"

parents fd4dda8d 64a2f6bd
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;